Stratégie d'arrêt de traînée ATR

Auteur:ChaoZhang est là., Date: 2023-09-26 20h23
Les étiquettes:

L'ATR trailing stop est une stratégie de trading qui définit dynamiquement les niveaux de stop loss basés sur l'indicateur Average True Range (ATR).

La logique de la stratégie

La stratégie calcule l'indicateur AVERAGE (moyenne mobile des prix) et les bandes supérieures/inférieures DIFF/DIFFLOW basées sur les valeurs ATR, formant un canal de négociation.

Plus précisément, il calcule d'abord l'indicateur de moyenne mobile simple AVERAGE et ATR. La bande supérieure DIFF et la bande inférieure DIFFLOW sont ensuite calculées en multipliant les valeurs ATR par un coefficient. Cela forme un canal de négociation délimité par DIFF et DIFFLOW. Lorsque le prix dépasse la bande supérieure, une position longue est prise. Lorsque le prix dépasse la bande inférieure, une position courte est prise. En outre, le niveau de stop loss se déplace dynamiquement avec les valeurs ATR. Cela permet des arrêts adaptatifs.

Ainsi, la stratégie peut être continuellement longue/courte pour réaliser des bénéfices dans les tendances majeures, tout en utilisant des arrêts de trailing ATR pour contrôler le risque.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. Les arrêts dynamiques basés sur ATR s'adaptent à la volatilité du marché, en évitant les arrêts trop proches ou trop éloignés.

  2. Le canal de négociation vise à capturer la réversion moyenne dans les tendances.

  3. Traitement continu de tendance sans prédire les ruptures.

  4. Des paramètres et des règles simples, faciles à comprendre et à automatiser.

  5. Une utilisation élevée du capital, un commerce continu offrent plus d'opportunités de profit.

Risques et améliorations

Quelques risques à prendre en considération:

  1. Les coefficients d'ATR élevés conduisent à des arrêts trop éloignés, ne permettant pas de contrôler le risque.

  2. Les coupes de fouet sur les marchés à plage déclenchent des arrêts fréquents.

  3. L'ajout d'un filtre de tendance au canal de négociation ne casse que dans la direction de la tendance.

  4. Des pics élevés peuvent rendre les arrêts inefficaces.

Optimisations possibles:

  1. Optimiser les paramètres ATR pour trouver le juste équilibre entre le suivi de la volatilité et la prévention des arrêts excessifs.

  2. Ajouter un indicateur de tendance, uniquement les ruptures commerciales dans la direction de la tendance.

  3. Les paramètres doivent être testés individuellement pour chaque instrument afin de trouver les valeurs optimales.

  4. Optimisez l'entrée, envisagez d'entrer sur les échappées de la ligne médiane du canal.

  5. Augmenter la taille des positions tout en contrôlant le risque total/la réduction des risques.

Conclusion

L'ATR trailing stop est une stratégie de trading qui traite continuellement les tendances tout en gérant le risque de manière dynamique. Elle convient aux instruments volatils et offre une bonne utilisation du capital.


/*backtest
start: 2023-09-18 00:00:00
end: 2023-09-25 00:00:00
period: 5m
basePeriod: 1m
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/
// © Investoz

//@version=4
strategy("ATR Strategy FOREX", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

len = input(26, type=input.integer, minval=1, title="Length")
mul = input(1, type=input.float, minval=0, title="Length")
mullow = input(2, type=input.float, minval=0, title="Length")

price = sma(close, 1)
average = ema(close, len)
diff = atr(len) * mul
difflow = atr(len) * mullow

bull_level = average + diff
bear_level = average - difflow
bull_cross = crossunder(price, bear_level)
bear_cross = crossunder(bull_level, price)

FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 18, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2008, title = "From Year", minval = 2008)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2019)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
startTimeOk()  => true

if (startTimeOk())
    strategy.entry("KOP", strategy.long, when=bull_cross)
    strategy.close("KOP", when=bear_cross)  
    strategy.entry("SALJ", strategy.short, when=bear_cross)
    strategy.close("SALJ", when=bull_cross)

plot(price, title="price", color=color.black, transp=50, linewidth=2)
a0 = plot(average, title="average", color=color.red, transp=50, linewidth=1)
a1 = plot(bull_level, title="bull", color=color.green, transp=50, linewidth=1)
a2 = plot(bear_level, title="bear", color=color.red, transp=50, linewidth=1)
fill(a0, a1, color=color.green, transp=97)
fill(a0, a2, color=color.red, transp=97)

Plus de