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


Date de création: 2023-10-19 12:42:26 Dernière modification: 2023-10-19 12:42:26
Copier: 0 Nombre de clics: 843
1
Suivre
1617
Abonnés

Stratégie de stop loss suiveur adaptative basée sur l’indicateur ATR

Aperçu

L’idée centrale de cette stratégie est d’utiliser l’indicateur ATR pour définir un stop-loss de suivi adaptatif afin de protéger au maximum les positions rentables tout en évitant les pertes prématurées. L’indicateur ATR est capable de capturer dynamiquement la volatilité du marché, d’ajuster la distance de blocage en fonction des fluctuations du marché et de minimiser la probabilité que les pertes de blocage soient déclenchées tout en garantissant les pertes de blocage.

Principe de stratégie

Cette stratégie utilise la valeur moyenne des N cycles de l’indicateur ATR, multipliée par un multiple, comme distance de rupture de base. Plus l’ATR est élevé, plus la volatilité du marché est grande, plus la distance de rupture est large; plus l’ATR est faible, plus la distance de rupture est étroite.

Plus précisément, la stratégie utilise la logique centrale suivante:

  1. Calculer la valeur de l’ATR pour une période de l’ATR ((nATRPeriod)).

  2. On obtient la distance de base d’arrêt nLoss en multipliant la valeur d’ATR par le multiple ((nATRMultip)).

  3. Mise à jour de la ligne d’arrêt xATRTrailingStop en fonction des hauts, des bas et du cycle précédent.

  4. Si le bas actuel a déclenché la ligne de stop du cycle précédent, le stop est déplacé sur la ligne jusqu’à nLoss de distance en dessous du bas.

  5. Si le sommet actuel a déclenché la ligne de stop du cycle précédent, le stop est déplacé sous la ligne de stop jusqu’à la distance nLoss au-dessus du sommet.

  6. Si le stop n’est pas déclenché, le stop est ajusté en fonction de la distance entre le prix de clôture et la ligne de stop.

  7. L’ajout d’une distance de protection de la ligne d’ombre optionnelle permet d’optimiser encore plus la ligne d’arrêt.

  8. Tracez la trajectoire de la ceinture de Brin pour visualiser les limites supérieures et inférieures de la ligne de stop.

  9. Déterminer la direction de la position en fonction de la couleur de la ligne de stop.

Cette stratégie utilise l’indicateur ATR de manière flexible, permettant à la ligne de stop-loss de s’adapter aux fluctuations du marché, en veillant à ce que la distance de stop-loss soit raisonnable et en évitant les pertes de position inutiles causées par des stop-loss trop radicaux.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. L’ATR est utilisé pour ajuster dynamiquement la distance d’arrêt afin de s’adapter aux différentes conditions du marché.

  2. Les paramètres de multiplication peuvent être personnalisés, permettant un ajustement flexible de la distance d’arrêt.

  3. Ajout à l’orbite de la ceinture de Brin, pour former la limite supérieure et inférieure de la visualisation de la ligne d’arrêt.

  4. La fonctionnalité de protection contre les rayons d’ombre est disponible, pour éviter le whipsaw des tremblements de terre.

  5. Il peut être utilisé comme un stop-loss de suivi pour permettre le retrait maximal des positions rentables.

  6. La stratégie est claire et compréhensible, les paramètres sont moins faciles à optimiser.

  7. Il est utilisé dans de nombreuses variétés et cycles.

Analyse des risques

Cette stratégie comporte également des risques à prendre en compte:

  1. L’indicateur ATR est en retard de réaction à des événements inattendus sur le marché, ce qui peut entraîner une distance de rupture excessive.

  2. Un facteur trop élevé peut également entraîner une distance de stop trop large, augmentant le risque de pertes.

  3. La fonction de protection de la ligne d’ombre rend la ligne d’arrêt trop lâche en cas d’augmentation de la secousse.

  4. Il n’y a pas de règles d’entrée et de sortie qui peuvent être utilisées comme stratégie d’entrée/sortie.

  5. Les paramètres d’optimisation doivent être testés à plusieurs reprises pour s’adapter à différentes variétés et cycles.

  6. La rupture du seuil de rupture peut entraîner une expansion des pertes et nécessite une gestion efficace des fonds.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Tester différents paramètres de cycle ATR pour optimiser la distance de rupture.

  2. Ajustez les paramètres de multiplication pour trouver un équilibre entre la distance de rupture et la probabilité de rupture.

  3. Optimiser les paramètres de protection contre les rayons d’ombre pour éviter les whipsaw.

  4. Essayez d’ajouter des conditions d’entrée sur une base de stop-loss, ce qui en fait une stratégie d’entrées/sorties.

  5. Ajouter un indicateur de jugement de tendance et ajuster la distance d’arrêt en fonction de la tendance.

  6. En combinant la théorie des vagues, la distance de rupture est ajustée en fonction de la position des vagues.

  7. Ajouter un contrôle de position pour limiter les pertes individuelles.

Résumer

Cette stratégie utilise les propriétés d’adaptation de l’indicateur ATR pour concevoir un mécanisme de stop-loss qui peut être ajusté de manière dynamique. Tout en garantissant le stop-loss, elle réduit le plus possible les déclencheurs de stop-loss inutiles. L’idée de la stratégie est simple et claire et peut être optimisée de manière flexible en fonction de ses besoins.

Code source de la stratégie
/*backtest
start: 2022-10-12 00:00:00
end: 2023-10-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v2.0 13/10/2014
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
// Modified by River to add Bands, and change color of Trailing Stop and add Wick Protection. Now turned into a Strategy for Backtesting Purposes.
// After backtesting, it seems clear that it functions well as a Trailing Stop, but not as an Entry/Exit strategy.
////////////////////////////////////////////////////////////
strategy(title="ATR Trailing Stop Bands Strategy[R] ", overlay = true)
nATRPeriod = input(5)
nATRMultip = input(4)
length = input(30, "#Periods of Wick Protection", minval=2)
bType = input(0, "Max [1] or Avg Wick Protection [0]", minval=0, maxval=1)
avgupperwick = sma(close[1] <= open[1] ? high[1] - open[1] : high[1] - close[1], length)
maxupperwick = highest(close[1] <= open[1] ? high[1] - open[1] : high[1] - close[1], length)
avglowerwick = sma(close[1] > open[1] ? open[1] - low[1] : close[1] - low[1], length)
maxlowerwick = highest(close[1] > open[1] ? open[1] - low[1] : close[1] - low[1], length)
upperwick = bType == 0 ? avgupperwick : maxupperwick
lowerwick = bType == 0 ? avglowerwick : maxlowerwick
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR 
upperband = iff(high < nz(upperband[1], 0) and high[1] < nz(upperband[1], 0), min(nz(upperband[1]), high + nLoss + upperwick), high + nLoss + upperwick)
lowerband = iff(low > nz(lowerband[1], 0) and low[1] > nz(lowerband[1], 0), max(nz(lowerband[1]), low - nLoss - lowerwick), low - nLoss - lowerwick) 
xATRTrailingStop = iff(low > nz(xATRTrailingStop[1], 0) and low[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), low - nLoss - lowerwick),
 iff(high < nz(xATRTrailingStop[1], 0) and high[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), high + nLoss + upperwick), 
//                        iff(low <= nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), high + nLoss + upperwick, iff(high >= nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), low - nLoss - lowerwick,0))))
 iff(low <= nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), upperband[1], iff(high >= nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), lowerband[1],0))))

pos =	iff(close[1] > nz(xATRTrailingStop[1], 0) and low <= nz(xATRTrailingStop[1], 0), 1,
 iff(close[1] < nz(xATRTrailingStop[1], 0) and high >= nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
color = pos == 1 ? red: pos == -1 ? green : blue 
plot(upperband, color=red, title="ATR Upper")
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop", linewidth=2)
plot(lowerband, color=green, title="ATR Lower")

longCondition = (color == green and color[1] == red)
if (longCondition)
    strategy.entry("Long", strategy.long)
longExitCondition = (color == red and color[1] == green)
if (longExitCondition)
    strategy.close("Long")

shortCondition = (color == red and color[1] == green)
if (shortCondition)
    strategy.entry("Short", strategy.short)
shortexitCondition = (color == green and color[1] == red)
if (shortexitCondition)
    strategy.close("Short")