Les ressources ont été chargées... Je charge...

ATR arrête la stratégie de suivi

Auteur:ChaoZhang est là., Date: 2023-10-09 16:59:57 Je suis désolé
Les étiquettes:

Résumé

Cette stratégie définit une ligne de stop loss dynamique basée sur l'indicateur Average True Range (ATR) pour suivre les changements de prix des actions, afin de protéger le stop loss tout en maximisant la prise de profit.

La logique de la stratégie

La mise en œuvre de la stratégie s'effectue principalement par les étapes suivantes:

  1. Calcul de l'indicateur ATR, la période ATR est définie par le paramètre nATRPeriod, par défaut à 5;

  2. Calculer la ligne d'arrêt des pertes sur la base de la valeur ATR, la magnitude de l'arrêt des pertes étant définie par le paramètre nATRMultip, par défaut à 3,5 fois l'ATR;

  3. Lorsque le prix augmente, s'il est supérieur à la ligne de stop-loss précédente, ajuster la ligne de stop-loss jusqu'au prix moins l'ampleur du stop-loss; lorsque le prix chute, s'il est inférieur à la ligne de stop-loss précédente, ajuster la ligne de stop-loss jusqu'au prix plus l'ampleur du stop-loss;

  4. Juge si le prix franchit la ligne de stop loss, si elle est franchie, envoie des signaux d'achat ou de vente;

  5. Entrez des positions longues ou courtes en fonction des signaux de rupture de la ligne de stop-loss et fermez les positions lorsque le prix touche à nouveau la ligne de stop-loss.

Lorsque le prix augmente, la ligne de stop loss se déplace continuellement vers le haut pour verrouiller les profits. Lorsque le prix chute, la ligne de stop loss se déplace continuellement vers le bas pour arrêter les pertes. L'indicateur ATR peut refléter plus précisément la fluctuation des prix.

Analyse des avantages

  • Ajustez dynamiquement la ligne de stop-loss pour un stop-loss rapide afin d'éviter l'expansion des pertes
  • L'ajustement de la ligne de stop loss est relativement fluide pour éviter une stop loss prématurée
  • Utiliser l'indicateur ATR pour calculer une ampleur de stop loss plus raisonnable sur la base de la dernière volatilité
  • La ligne de perte de trail stop pour verrouiller efficacement les bénéfices

Analyse des risques

  • Le paramètre ATR doit être réglé avec prudence, une période ATR trop courte peut entraîner une fluctuation excessive de la ligne stop loss, une période trop longue peut ne pas refléter la variation du prix dans le temps
  • L'ampleur du stop loss doit être définie en fonction de la volatilité spécifique des actions, des valeurs trop importantes ou trop faibles affecteront le rendement de la stratégie
  • L'arrêt de la perte peut réduire la marge bénéficiaire en arrêtant le bénéfice avant une autre hausse des prix
  • Les ajustements fréquents de position peuvent entraîner des coûts de négociation plus élevés

Les paramètres peuvent être optimisés en ajustant la période d'ATR et l'ampleur de la perte d'arrêt pour trouver l'équilibre optimal entre la perte d'arrêt et la perte de retard.

Directions d'optimisation

  • Optimiser le paramètre de la période ATR pour que les modifications de la ligne stop-loss suivent plus étroitement la fluctuation des prix
  • Optimiser le paramètre d'amplitude de la perte d'arrêt pour une perte d'arrêt plus raisonnable
  • Ajouter d' autres indicateurs au filtrage du temps d'entrée
  • Passez long seulement lorsque la tendance à la hausse est évidente
  • Considérer l'ajout d'un mécanisme de réentrée pour participer aux stocks avec un stop loss mais une attente continue de hausse

Résumé

L'indicateur ATR rend l'ajustement de la ligne de stop loss plus ciblé. Mais les paramètres et les stratégies de réentrée ont besoin d'une optimisation supplémentaire pour réduire les arrêts inutiles et augmenter la marge bénéficiaire. Dans l'ensemble, il s'agit d'une bonne idée de stop loss dynamique qui vaut la peine d'être étudiée et appliquée.


/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//@okadoke
////////////////////////////////////////////////////////////
// Based on Average True Range Trailing Stops Strategy by HPotter
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
////////////////////////////////////////////////////////////
strategy(title="ATR Trailing Stops Strategy", shorttitle="ATRTSS", overlay = true, 
  initial_capital=100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type="percent", commission_value=0.0)
  
nATRPeriod      = input(5, "ATR Period")
nATRMultip      = input(3.5, "ATR Multiplier")
useShorts       = input(false, "Test w/Shorts?")
daysBackMax     = input(defval = 360, title = "Max Days Back to Test", minval = 0)
daysBackMin     = input(defval = 0, title = "Min Days Back to Test", minval = 0)
msBackMax       = 1000 * 60 * 60 * 24 * daysBackMax
msBackMin       = 1000 * 60 * 60 * 24 * daysBackMin

xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = na
xATRTrailingStop := 
 iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
  iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), 
   iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss))) 
                       
pos = na 
pos := 
 iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1, 
  iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
        
color = pos == -1 ? red: pos == 1 ? green : blue 
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")

isWithinTimeBounds = (msBackMax == 0 or (time > (timenow - msBackMax))) and (msBackMin == 0 or (time < (timenow - msBackMin)))

buy     = crossover(close, xATRTrailingStop)
sell    = crossunder(close, xATRTrailingStop)

strategy.entry("LONG", long=true, when=buy and isWithinTimeBounds)
strategy.close("LONG", when=sell and isWithinTimeBounds)
strategy.entry("SHORT", long=false, when=useShorts and sell and isWithinTimeBounds)
strategy.close("SHORT", when=useShorts and buy and isWithinTimeBounds)



Plus de