
L’optimisation du stop loss multiplicateur ATR est une stratégie de suivi de tendance qui utilise le multiplicateur de l’amplitude réelle moyenne ((ATR) pour définir un stop loss, un risque d’ajustement dynamique. Lorsque la tendance des prix change, il peut être arrêté à temps et éviter des pertes massives.
La stratégie commence par calculer une moyenne mobile simple pour les cycles SMA rapides et les cycles SMA lents, en faisant plus lorsque le SMA rapide est traversé par le SMA lent et en faisant moins lorsque le SMA rapide est traversé par le SMA lent.
Après l’entrée, il surveille en temps réel la valeur de l’ATR. L’ATR représente l’amplitude moyenne des fluctuations sur une période donnée. Cette stratégie nous permet de définir la longueur de cycle de l’ATR (défaut 14) et le multiplicateur (défaut 2). Le système calcule la valeur de l’ATR à l’entrée, puis multiplie le multiplicateur par le paramètre de la distance d’arrêt.
Par exemple, si l’ATR après l’entrée est de 50 points et que le multiplicateur est réglé sur 2, la distance de rupture est de 100 points. Si le prix parcourt plus de 100 points par la suite, un ordre de rupture est déclenché. Cela permet de stopper la perte à temps et d’éviter des pertes excessives.
La stratégie prend en compte les jugements de tendance et ne déclenche un stop-loss que lorsque le signal d’achat correspond à une tendance à la hausse. Un signal de coupe est déclenché lorsque le signal correspond à une tendance à la baisse.
Les lignes de stop-loss sont tracées sur le graphique et peuvent être vérifiées en temps réel. Lorsque les conditions de stop-loss sont déclenchées, les positions correspondantes sont automatiquement liquidées.
Le plus grand avantage de cette stratégie est l’ajustement dynamique de la distance d’arrêt, qui permet de modifier automatiquement l’excédent de risque en fonction de l’évolution de la volatilité du marché. Lorsque la volatilité augmente, la distance d’arrêt augmente également, réduisant la probabilité que la limite soit franchie.
Par rapport à la distance de stop fixe, cette méthode permet de contrôler efficacement les pertes individuelles tout en suivant la tendance. Elle garantit à la fois un espace de profit et une attention à la gestion des risques.
De plus, combiné à un jugement de tendance, ce type d’arrêt de perte peut réduire le risque de secousses dans les zones de consolidation.
Le principal risque de cette stratégie est le risque que la courte courbe de prix se retire pendant la période de tenue et déclenche un ordre de stop loss. En particulier, lorsque le cycle ATR est trop court, la distance de stop loss ne peut pas filtrer complètement les effets des fluctuations à court terme.
Un autre risque est que, dans des conditions extrêmes, les mouvements de hausse des prix peuvent franchir directement la ligne de stop loss. Cela nécessite de définir un plus grand multiplicateur de stop loss, mais signifie également une plus petite marge de profit.
Enfin, la stratégie ne tient pas compte de l’impact des transactions de nuit et avant le couvre-feu sur les valeurs d’ATR. Cela peut entraîner une inexactitude des données ATR calculées par la stratégie à l’ouverture ou à la fermeture.
Cette stratégie peut être optimisée dans les domaines suivants:
Optimiser les paramètres ATR cycliques pour tester les meilleures combinaisons de paramètres dans différents marchés
Comparaison des rendements des réglages des multiplicateurs fixes et des multiplicateurs dynamiques
ATR calculé en combinant les données du jour et de la veille pour minimiser les effets des sauts de prix d’ouverture
Configuration de la condition ATR: activée uniquement lorsque l’ATR atteint un certain niveau, afin d’éviter des pertes inutiles sur les marchés à faible volatilité
Plus de conditions de filtrage: des informations telles que les tendances à grande échelle, les indicateurs quantitatifs et autres
La meilleure stratégie de stop loss multiplicateur ATR permet de trouver un équilibre efficace entre le suivi de la tendance et le contrôle du risque en ajustant dynamiquement la distance de stop loss. Par rapport à la distance de stop loss fixe, elle permet de limiter efficacement les pertes individuelles tout en garantissant une marge de profit.
Bien sûr, il y a des risques potentiels, comme le saut des prix, les arrêts trop sensibles, etc. Nous pouvons continuer à optimiser notre stratégie à plusieurs niveaux pour améliorer la stabilité et la rentabilité de la stratégie.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//@author=Daveatt
//This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
SystemName = "BEST ATR Stop Multiple Strategy"
TradeId = "BEST"
InitCapital = 100000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 1
CalcOnorderFills = true
CalcOnTick = true
DefaultQtyType = strategy.fixed
DefaultQtyValue = strategy.fixed
Precision = 2
Overlay=true
strategy(title=SystemName, shorttitle=SystemName, overlay=Overlay )
fastSMAperiod = input(defval=15, title='Fast SMA', type=input.integer, minval=2, step=1)
slowSMAperiod = input(defval=45, title='Slow SMA', type=input.integer, minval=2, step=1)
src = close
// Calculate moving averages
fastSMA = sma(src, fastSMAperiod)
slowSMA = sma(src, slowSMAperiod)
// Calculate trading conditions
enterLong = crossover(fastSMA, slowSMA)
enterShort = crossunder(fastSMA, slowSMA)
// trend states
since_buy = barssince(enterLong)
since_sell = barssince(enterShort)
buy_trend = since_sell > since_buy
sell_trend = since_sell < since_buy
is_signal = enterLong or enterShort
// get the entry price
entry_price = valuewhen(enterLong or enterShort, src, 0)
// Plot moving averages
plot(series=fastSMA, color=color.teal)
plot(series=slowSMA, color=color.orange)
// Plot the entries
plotshape(enterLong, style=shape.circle, location=location.belowbar, color=color.green, size=size.small)
plotshape(enterShort, style=shape.circle, location=location.abovebar, color=color.red, size=size.small)
///////////////////////////////
//======[ Trailing STOP ]======//
///////////////////////////////
// use SL?
useSL = input(true, "Use stop Loss")
// ATR multiple Stop
stop_atr_length = input(14,title="ATR Length", minval=1, type=input.integer)
stop_atr_mult = input(2,title="ATR Multiple", minval=0.05, step=0.1, type=input.float)
// Global STOP
stop_price = 0.0, stop_price := nz(stop_price[1])
// STOP ATR
var stop_atr = 0.0
var entry_stop_atr = 0.0
stop_atr := nz(atr(stop_atr_length))
if enterLong or enterShort
entry_stop_atr := stop_atr * stop_atr_mult
// display the ATR value multiple
plotshape(enterLong, title='ATR Long Stop value', style=shape.labelup,
location=location.bottom, color=color.green, transp=0, text='', textcolor=color.navy, editable=true, size=size.small, show_last=1, size=size.small)
// var label atr_long_label = na
// var label atr_short_label = na
lapos_y_entry_up = lowest(30)
lapos_y_entry_dn = highest(30)
// text_label = "ATR value: " + tostring(stop_atr, '#.#') + "\n\nATR Multiple value: " + tostring(entry_stop_atr, '#.#')
// if enterLong
// label.delete(atr_long_label)
// atr_long_label := label.new(bar_index, lapos_y_entry_up, text=text_label,
// xloc=xloc.bar_index, yloc=yloc.price, color=color.green, style=label.style_labelup, textcolor=color.white,
// size=size.normal)
// if enterShort
// label.delete(atr_short_label)
// atr_short_label := label.new(bar_index, lapos_y_entry_dn, text=text_label,
// xloc=xloc.bar_index, yloc=yloc.price, color=color.red, style=label.style_labeldown, textcolor=color.black,
// size=size.normal)
// Determine trail stop loss prices
longStopPrice = 0.0, shortStopPrice = 0.0
longStopPrice := if useSL and buy_trend
stopValue = entry_price - entry_stop_atr
else
0
shortStopPrice := if useSL and sell_trend
stopValue = entry_price + entry_stop_atr
else
999999
//////////////////////////////////////////////////////////////////////////////////////////
//*** STOP LOSS HIT CONDITIONS TO BE USED IN ALERTS ***//
//////////////////////////////////////////////////////////////////////////////////////////
cond_long_stop_loss_hit = useSL and buy_trend and crossunder(low, longStopPrice[1])
cond_short_stop_loss_hit = useSL and sell_trend and crossover(high, shortStopPrice[1])
// Plot stop loss values for confirmation
plot(series=useSL and buy_trend and low >= longStopPrice
? longStopPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Long Trail Stop")
plot(series=useSL and sell_trend and high <= shortStopPrice
? shortStopPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Short Trail Stop")
close_long = cond_long_stop_loss_hit
close_short = cond_short_stop_loss_hit
// Submit entry orders
strategy.entry(TradeId + " L", long=true, when=enterLong)
strategy.close(TradeId + " L", when=close_long)
//if (enterShort)
strategy.entry(TradeId + " S", long=false, when=enterShort)
strategy.close(TradeId + " S", when=close_short)