Stratégie de trading suiveur avec stop loss dynamique


Date de création: 2023-10-09 16:59:57 Dernière modification: 2023-10-09 16:59:57
Copier: 0 Nombre de clics: 1077
1
Suivre
1617
Abonnés

Aperçu

La stratégie est basée sur l’indicateur ATR (Average True Range) pour définir une ligne de stop dynamique, suivre les variations du prix des actions et maximiser les profits tout en réalisant une protection contre les pertes.

Principe de stratégie

La stratégie est principalement réalisée par les étapes suivantes:

  1. Pour calculer l’indicateur ATR, le cycle ATR est défini par le paramètre nATRPeriod, par défaut 5;

  2. La marge de stop est définie par le paramètre nATRMultip, qui est 3,5 fois l’ATR par défaut;

  3. Lorsque le cours d’une action augmente, le seuil de stop-loss est relevé au cours de l’action moins le seuil de stop-loss, s’il est supérieur au seuil de stop-loss précédent; lorsqu’il baisse, le seuil de stop-loss est abaissé au cours de l’action plus le seuil de stop-loss, s’il est inférieur au seuil de stop-loss précédent;

  4. Déterminer si le cours d’une action a franchi le seuil de rupture, ce qui émet un signal d’achat ou de vente;

  5. En fonction du signal de rupture de la ligne d’arrêt, entrez dans une position de survente ou de vide, et vide la position en touchant à nouveau la ligne d’arrêt.

Lorsque le cours d’une action augmente, le stop-loss est constamment ajusté à la hausse, afin de bloquer les bénéfices; lorsque le cours d’une action baisse, le stop-loss est constamment ajusté à la baisse, afin de bloquer les pertes. L’indicateur ATR peut refléter plus précisément la volatilité du cours de l’action et ajuster le stop-loss en fonction de la dynamique de l’ATR.

Analyse des avantages

  • Ajustez dynamiquement la ligne de stop-loss, arrêtez-vous à temps pour éviter l’expansion des pertes
  • Le réglage de la ligne d’arrêt est plus lisse, évitant un arrêt prématuré
  • Utilisez l’indicateur ATR pour refléter les dernières fluctuations et calculer un stop loss plus raisonnable
  • Le suivi de la ligne de stop est un excellent moyen de localiser les bénéfices.

Analyse des risques

  • Le réglage des paramètres de l’indicateur ATR doit être prudent, car un cycle ATR trop court peut entraîner une fluctuation excessive de la ligne de stop-loss, et trop long ne peut pas refléter les fluctuations des prix en temps opportun.
  • Les paramètres de stop loss doivent être ajustés en fonction des fluctuations de l’action, trop grands ou trop petits peuvent affecter l’efficacité de la stratégie.
  • Le suivi des stop-loss peut réduire la marge de profit et arrêter les pertes avant que les actions ne montent à nouveau
  • La fréquence des ajustements de position entraîne des coûts de transaction plus élevés.

Il est possible d’optimiser les paramètres, d’ajuster les paramètres du cycle ATR et de l’amplitude de stop, de trouver la meilleure combinaison de paramètres pour équilibrer le stop et le suivi. Il peut également être combiné avec d’autres indicateurs techniques pour filtrer le timing de la mise sur le marché et réduire les stop inutiles.

Direction d’optimisation

  • Optimisation des paramètres ATR cycliques pour rapprocher les variations de la ligne de stop à la fluctuation des prix
  • Optimiser les paramètres de la marge d’arrêt pour rendre la perte plus raisonnable
  • Ajout d’autres indicateurs de filtrage
  • Il n’y a pas de plus-value si le cours de l’action est clairement à la hausse.
  • Considérer la possibilité d’adhérer à un mécanisme de réintégration afin d’éviter une réintégration après la fermeture des actions qui devrait continuer à augmenter

Résumer

La stratégie permet de bloquer les pertes et les bénéfices dans le processus de détention en ajustant dynamiquement la ligne de stop ATR. Par rapport à la position de stop fixe, la stratégie est mieux adaptée aux fluctuations du cours des actions et évite les pertes trop radicales ou conservatrices. L’indicateur ATR rend l’ajustement de la ligne de stop plus ciblé. Cependant, la stratégie de paramétrage et de réentrée doit être encore optimisée pour réduire les pertes inutiles et élargir l’espace de profit.

Code source de la stratégie
/*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)