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

Auteur:ChaoZhang est là., Date: 2023-10-08 15h06 et 28 min
Les étiquettes:

Résumé

Cette stratégie implémente principalement un mécanisme de stop loss adaptatif qui ajuste automatiquement la position de stop loss en fonction des fluctuations de prix pour obtenir un meilleur effet de stop loss. La stratégie utilise l'indicateur ATR pour calculer une plage de stop loss raisonnable et génère des signaux de trading en combinaison avec les lignes EMA. Elle ouvre des positions longues ou courtes lorsque le prix franchit les lignes EMA et utilise un algorithme de stop loss adaptatif pour suivre le stop loss.

La logique de la stratégie

  1. Calculer l'indicateur ATR et définir la valeur ATR multipliée par le paramètre a comme plage de stop-loss nLoss.
  2. Calculer la ligne EMA.
  3. Allez long lorsque le prix dépasse la ligne EMA, et allez court lorsque le prix dépasse la ligne EMA.
  4. Utiliser l'algorithme d'arrêt de perte adaptatif pour ajuster automatiquement la position d'arrêt de perte xATRTrailingStop, avec les règles suivantes:
    • Lorsque le prix dépasse la position stop loss, ajustez le stop loss au prix moins la plage de stop loss nLoss.
    • Lorsque le prix dépasse la position stop loss, ajuster le stop loss au prix plus la plage de stop loss nLoss.
    • Dans le cas contraire, conservez le stop loss inchangé.
  5. Fermer une position pour un stop loss lorsque le prix atteint le niveau de stop loss.

Analyse des avantages

  1. Mise en œuvre d'un mécanisme d'arrêt des pertes adaptatif qui ajuste automatiquement la plage d'arrêt des pertes en fonction de la volatilité du marché, contrôlant ainsi efficacement les risques.
  2. Calcule une plage de stop loss raisonnable avec l'indicateur ATR, en évitant un stop loss trop grand ou trop petit.
  3. Utilise l'EMA pour générer des signaux de négociation, réduire les transactions inutiles et filtrer le bruit du marché.
  4. Une logique stratégique simple et claire, facile à comprendre et à optimiser.
  5. Permet l'ajustement des paramètres d'entrée pour s'adapter aux différents environnements du marché.

Risques et améliorations

  1. Les signaux de l'EMA peuvent être retardés, ce qui conduit à une entrée tardive.
  2. Période de détention incertaine, incapable de contrôler la taille d'un seul stop-loss, peut fixer une cible de profit ou une période de détention maximale pour limiter les pertes.
  3. Il est possible que le stop loss soit déclenché trop fréquemment sur des marchés à forte tendance.
  4. Les paramètres tels que la période ATR, le multiplicateur de stop loss doivent être ajustés en fonction des caractéristiques du symbole, les valeurs par défaut ne doivent pas être utilisées à l'aveugle.

Directions d'optimisation

  1. Considérez l'ajout d'un indicateur de tendance, en effectuant des transactions dans la direction de la tendance afin d'éviter les transactions contre-tendance.
  2. Ajuster le multiplicateur de stop loss en fonction de la volatilité, permettant un stop plus large dans des conditions de forte volatilité.
  3. La valeur de l'échange de titres est la valeur de l'échange de titres.
  4. Ajoutez une stratégie de stop loss en mouvement, en augmentant progressivement le stop au fur et à mesure que le prix évolue.
  5. Personnaliser le paramètre de la période ATR en fonction des caractéristiques du symbole.

Conclusion

La stratégie a une logique claire et simple, gérant les risques avec un stop loss adaptatif basé sur l'ATR et une EMA pour les signaux commerciaux. Mais elle est relativement passive avec beaucoup de marge d'optimisation. Considérez l'ajout de jugement de tendance, d'ajustement de paramètres dynamiques basé sur les conditions du marché pour la rendre plus proactive. Dans l'ensemble, elle sert de bonne idée et de modèle pour les stratégies de stop loss d'inversion, mais les paramètres doivent être ajustés pour différents symboles au lieu d'appliquer aveuglément les valeurs par défaut.


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

//@version=4
strategy(title="UT Bot Strategy", overlay = true)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 

// Inputs
a = input(1,     title = "Key Vaule. 'This changes the sensitivity'")
c = input(10,    title = "ATR Period")
h = input(false, title = "Signals from Heikin Ashi Candles")

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////


xATR  = atr(c)
nLoss = a * xATR

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close

xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
 
pos = 0   
pos :=	iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
   
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema   = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

buy  = src > xATRTrailingStop and above 
sell = src < xATRTrailingStop and below

barbuy  = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

plotshape(buy,  title = "Buy",  text = 'Buy',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

barcolor(barbuy  ? color.green : na)
barcolor(barsell ? color.red   : na)

strategy.entry("long",   true, when = buy  and time_cond)
strategy.entry("short", false, when = sell and time_cond)

Plus de