
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.
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.
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é.
/*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)