Stratégie de stop loss parabolique basée sur l'indicateur ATR


Date de création: 2023-09-13 15:53:00 Dernière modification: 2023-09-13 15:53:00
Copier: 0 Nombre de clics: 1194
1
Suivre
1617
Abonnés

Cette stratégie est appelée stratégie de stop-loss parallèle basée sur l’indicateur ATR. Cette stratégie utilise l’indicateur ATR pour ajuster la vitesse de contraction de la courbe de stop-loss parallèle, lui permettant de s’adapter aux changements de volatilité du marché.

Le facteur d’accélération du stop traditionnel est inchangé et ne peut pas faire face à une augmentation de la volatilité. Cette stratégie accélère la vitesse de contraction de la parallèle avec l’augmentation de la valeur de l’ATR, de sorte que lorsque la volatilité augmente, la courbe de stop peut se rapprocher plus rapidement du prix et contrôler efficacement le risque.

Plus précisément, la stratégie détermine la direction de la tendance des prix, calcule un facteur d’accélération adaptatif en fonction de la valeur ATR et trace la courbe de stop-loss de la parabolique. Lorsque le prix franchit la ligne de stop-loss, le stop-loss est placé.

L’avantage de cette stratégie est qu’elle permet aux arrêts de la ligne de parachute traditionnelle de s’adapter dynamiquement en fonction de la volatilité du marché. Cependant, les paramètres ATR doivent être optimisés et les arrêts de la ligne de parachute sont trop sensibles et peuvent être franchis.

Dans l’ensemble, l’adaptation au stop loss est importante pour protéger les profits et contrôler les risques. Les traders doivent choisir des indicateurs de stop loss appropriés en fonction des conditions du marché et tester et optimiser les paramètres pour tirer le meilleur parti de la stratégie de stop loss.

Code source de la stratégie
/*backtest
start: 2023-08-13 00:00:00
end: 2023-09-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="ATR Parabolic SAR Strategy [QuantNomad]", shorttitle="ATR PSAR Strategy [QN]", overlay=true, default_qty_type = strategy.percent_of_equity,  default_qty_value = 100)

atr_length = input(14)
start      = input(0.02)
increment  = input(0.02)
maximum    = input(0.2)
entry_bars = input(1, title = "Entry on Nth trend bar") 

atr = atr(atr_length)

atr := na(atr) ? tr : atr

psar        = 0.0 // PSAR
af          = 0.0 // Acceleration Factor
trend_dir   = 0   // Current direction of PSAR
ep          = 0.0 // Extreme point
trend_bars  = 0

sar_long_to_short = trend_dir[1] == 1  and close <= psar[1] // PSAR switches from long to short
sar_short_to_long = trend_dir[1] == -1 and close >= psar[1] // PSAR switches from short to long

trend_change = barstate.isfirst[1] or sar_long_to_short or sar_short_to_long

// Calculate trend direction
trend_dir    :=  barstate.isfirst[1] and close[1]  > open[1] ?  1 : 
                 barstate.isfirst[1] and close[1] <= open[1] ? -1 : 
                 sar_long_to_short ? -1 : 
                 sar_short_to_long ?  1 : nz(trend_dir[1])

trend_bars := sar_long_to_short ? -1 : 
              sar_short_to_long ?  1 : 
              trend_dir ==  1   ? nz(trend_bars[1]) + 1 : 
              trend_dir == -1   ? nz(trend_bars[1]) - 1 : 
              nz(trend_bars[1])

// Calculate  Acceleration Factor
af := trend_change ? start : 
   (trend_dir == 1 and high > ep[1]) or  
   (trend_dir == -1 and low < ep[1]) ? 
   min(maximum, af[1] + increment) : 
   af[1]

// Calculate extreme point
ep := trend_change and trend_dir == 1 ? high :  
   trend_change and trend_dir == -1 ? low : 
   trend_dir == 1 ? max(ep[1], high) : 
   min(ep[1], low)

// Calculate PSAR
psar :=  barstate.isfirst[1] and close[1]  > open[1] ? low[1]  : 
         barstate.isfirst[1] and close[1] <= open[1] ? high[1] : 
         trend_change ? ep[1] :    
         trend_dir == 1 ? psar[1] + af * atr : 
                          psar[1] - af * atr

plot(psar, style=plot.style_cross, color=trend_dir == 1 ? color.green : color.red,  linewidth = 2)


// Strategy 
strategy.entry("Long",  true,  when = trend_bars ==  entry_bars)
strategy.entry("Short", false, when = trend_bars == -entry_bars)