Stratégie de stop-loss suivant la tendance basée sur la volatilité des prix


Date de création: 2023-12-01 17:53:36 Dernière modification: 2023-12-01 17:53:36
Copier: 6 Nombre de clics: 666
1
Suivre
1619
Abonnés

Stratégie de stop-loss suivant la tendance basée sur la volatilité des prix

Aperçu

Cette stratégie est une stratégie de suivi de la tendance basée sur la volatilité des prix. Elle utilise l’amplitude de fluctuation réelle moyenne (ATR) pour définir une ligne de perte de fluctuation des prix.

Principe de stratégie

La stratégie commence par calculer l’ATR, l’amplitude de fluctuation réelle moyenne sur une période donnée. Ensuite, en fonction de la direction actuelle de la tendance des prix, le stop loss est défini comme l’ATR de n fois le prix le plus élevé actuel moins l’ATR de n fois le prix le plus bas actuel. Si la tendance est à la baisse, le stop loss est défini comme l’ATR de n fois le prix le plus bas actuel.

Lorsque le prix dépasse la limite de rupture de la tendance à la hausse ou la limite de rupture de la tendance à la baisse, le changement de tendance est déterminé. La stratégie consiste à liquider la rupture de position et à définir une nouvelle limite de rupture en fonction de la nouvelle direction de la tendance.

Dans l’ensemble, la stratégie utilise la volatilité des prix pour définir des lignes de stop-loss, ce qui permet de juger avec précision les changements de tendance. Lorsque les tendances changent, les arrêts en temps opportun aident la stratégie à saisir la nouvelle direction de la tendance.

Avantages stratégiques

  • Utilisez les caractéristiques de volatilité des prix pour déterminer les tendances et saisir précisément les points de basculement des prix
  • Arrêt et commutation des positions en temps opportun pour réduire le risque de renversement
  • La flexibilité de réglage des paramètres permet de contrôler la distance entre la ligne de stop et les fluctuations de prix
  • Adaptable à des paramètres spécifiques à la variété, avec une forte adaptabilité

Risque stratégique

  • Risque d’erreur de jugement causé par une rupture inefficace. Des ruptures inefficaces qui ne peuvent pas être maintenues peuvent se produire et entraîner une modification de la tendance à l’erreur de jugement.
  • Un paramètre trop radical peut augmenter les pertes. Par exemple, une valeur n trop grande ou trop proche d’une ligne de stop-loss peut déclencher une petite secousse.
  • Les variétés à faible volatilité telles que les urrencies peuvent avoir un effet de stop-loss médiocre. Les valeurs ATR plus faibles rapprochent la ligne de stop-loss du prix

Optimisation de la stratégie

  • Des indicateurs auxiliaires tels que le volume de transactions ou l’accélération des fluctuations peuvent être introduits pour éviter les erreurs de jugement qui invalident les percées
  • Ajustez la valeur de n en fonction des caractéristiques des différentes variétés pour que la distance de rupture soit plus appropriée
  • Les cycles ATR peuvent également être optimisés en choisissant les paramètres cycliques les plus appropriés pour juger de la volatilité des écarts

Résumer

Cette stratégie est globalement une meilleure mise en œuvre de l’algorithme de mise en place d’une ligne de stop-loss basée sur la volatilité des prix. Elle est plus précise dans la détermination des mouvements de prix et est capable de saisir les points de retournement clés de la tendance. Elle offre également un certain espace de paramètres pour l’ajustement et une plus grande adaptabilité.

Code source de la stratégie
/*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)