Stratégie de suivi de l'arrêt de volatilité

Auteur:ChaoZhang est là., Date: 2023-12-01 17:53:36 Je suis désolé
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie de suivi de tendance basée sur la volatilité des prix. Elle utilise la plage moyenne vraie (ATR) pour définir des lignes de stop loss pour les fluctuations des prix. ATR reflète la volatilité et le niveau de risque des prix. Lorsque le prix dépasse la ligne de stop loss, la stratégie juge l'inversion de tendance et prend les actions correspondantes pour ouvrir des positions ou arrêter les pertes.

Principe de stratégie

La stratégie calcule d'abord la plage moyenne réelle (ATR) sur une certaine période. Ensuite, en fonction de la direction de la tendance actuelle du prix, si c'est une tendance haussière, la ligne de stop loss est réglée sur le prix le plus élevé actuel moins n fois l'ATR; si c'est une tendance baissière, la ligne de stop loss est réglée sur le prix le plus bas actuel plus n fois l'ATR. La valeur n peut être ajustée via des paramètres pour contrôler la distance entre la ligne de stop loss et le prix.

Lorsque le prix franchit la ligne de stop loss de la tendance haussière ou de la tendance baissière, la tendance est jugée avoir changé.

En résumé, la stratégie utilise la volatilité des prix pour définir des lignes de stop loss afin d'obtenir un jugement précis des changements de tendance.

Les avantages de la stratégie

  • Utiliser les caractéristiques de la volatilité des prix pour juger des tendances et saisir avec précision les points tournants des prix
  • Arrêter les pertes en temps opportun et changer de position pour réduire les risques d'inversions de marché
  • Réglage flexible des paramètres pour contrôler la distance entre la ligne de stop-loss et les fluctuations de prix
  • Les paramètres peuvent être optimisés pour des produits spécifiques pour une meilleure adaptabilité

Risques liés à la stratégie

  • Risques d'erreurs de jugement dues à des écarts non valables Les prix peuvent avoir des écarts non valables non viables, ce qui entraîne des erreurs de jugement des changements de tendance
  • Par exemple, lorsque la valeur n est trop grande, la ligne de stop loss est trop proche et de petites fluctuations peuvent la déclencher.
  • L'effet stop loss peut être faible pour les produits à faible volatilité comme les devises.

Directions d'optimisation

  • Des indicateurs auxiliaires tels que le volume de négociation ou l'accélération de la volatilité peuvent être introduits pour éviter de porter un jugement erroné sur les écarts non valables
  • Ajuster la valeur n en fonction des caractéristiques des différents produits afin de rendre la distance d'arrêt des pertes plus appropriée
  • La période ATR peut également être optimisée pour choisir le paramètre de période le plus approprié pour juger de la volatilité de l'écart de prix

Résumé

Dans l'ensemble, il s'agit d'une bonne mise en œuvre d'algorithme pour définir des lignes de stop loss basées sur la volatilité des prix. Sa précision dans le jugement des tendances des prix est élevée et il peut capturer les points tournants clés des tendances. Il offre également une certaine marge de manœuvre pour l'ajustement des paramètres pour une meilleure adaptabilité. En tant que stratégie de stop loss, il peut éviter efficacement les risques d'inversions de marché et vaut la peine d'être appliqué dans le trading en direct.


/*backtest
start: 2022-11-30 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © laptevmaxim92

//@version=4
strategy("Volatility stop strategy", overlay=true)

length = input(20)
mult = input(2, step = 0.1)
utp = input(false, "Use take profit?")
pr = input(100, "Take profit pips")
usl = input(false, "Use stop loss?")
sl = input(100, "Stop loss pips")
fromday = input(01, defval=01, minval=01, maxval=31, title="From Day")
frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month")
fromyear = input(2000, minval=1900, maxval=2100, title="From Year")
today = input(31, defval=01, minval=01, maxval=31, title="To Day")
tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month")
toyear = input(2039, minval=1900, maxval=2100, title="To Year")

use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))

atr_ = atr(length)
max_ = 0.0
min_ = 0.0
max1 = 0.0
max1 := max(nz(max_[1]), close)
min1 = 0.0
min1 := min(nz(min_[1]), close)
vstop = 0.0
is_uptrend = false
is_uptrend_prev = false
is_uptrend_prev := nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? color.green : color.red, linewidth=2)

longCondition = is_uptrend
if (longCondition and use_date)
    strategy.entry("BUY", strategy.long)

shortCondition = not is_uptrend
if (shortCondition and use_date)
    strategy.entry("SELL", strategy.short)
    
if (utp and not usl)
    strategy.exit("TP", "BUY", profit = pr)
    strategy.exit("TP", "SELL", profit = pr)
    
if (usl and not utp)
    strategy.exit("SL", "BUY", loss = sl)
    strategy.exit("SL", "SELL", loss = sl)
    
if (usl and utp)
    strategy.exit("TP/SL", "BUY", loss = sl, profit = pr)
    strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)

Plus de