Stratégie adaptative de stop trailing


Date de création: 2023-10-08 15:06:28 Dernière modification: 2023-10-08 15:06:28
Copier: 0 Nombre de clics: 771
1
Suivre
1617
Abonnés

Aperçu

La stratégie implémente principalement un mécanisme de stop-loss adaptatif qui permet d’ajuster automatiquement la position de stop-loss en fonction des fluctuations des prix pour obtenir de meilleurs effets de stop-loss. La stratégie utilise l’indicateur ATR pour calculer une plage de stop-loss raisonnable et, combinée à la ligne d’équilibre EMA, génère un signal de transaction, ouvrant une position plus vide lors de la rupture de la ligne d’équilibre EMA, tout en suivant le stop-loss avec un algorithme de stop-loss adaptatif.

Principe de stratégie

  1. Calculer l’indicateur ATR, en définissant la valeur d’ATR multipliée par le paramètre a comme la plage de stop loss nLoss.
  2. Calculer la ligne moyenne de l’EMA.
  3. Les prix sont plus élevés lorsque le prix est au-dessus de la moyenne de l’EMA, et plus bas lorsque le prix est en dessous de la moyenne de l’EMA.
  4. L’algorithme d’arrêt d’adaptation utilise l’algorithme d’arrêt d’adaptation pour ajuster automatiquement le point d’arrêt xATRTrailingStop, selon les règles suivantes:
    • Lorsque le prix dépasse le seuil de stop-loss, le seuil de stop-loss est ajusté à la valeur du prix moins la marge de stop-loss nLoss.
    • Lorsque le prix dépasse le seuil de stop-loss vers le bas, le seuil de stop-loss est ajusté au prix plus le seuil de stop-loss nLoss.
    • Dans les autres cas, le stop loss est maintenu.
  5. La position est stoppée lorsque le prix a atteint son point d’arrêt.

Analyse des avantages

  1. Le mécanisme d’arrêt de perte adaptatif est mis en œuvre, permettant d’ajuster automatiquement l’amplitude de l’arrêt de perte en fonction de la volatilité du marché et de contrôler efficacement les risques.
  2. Calculer une marge de stop raisonnable combinée à l’indicateur ATR, afin d’éviter un stop trop grand ou trop petit.
  3. L’utilisation d’EMA pour générer des signaux de négociation peut réduire les transactions inutiles et filtrer le bruit du marché.
  4. La stratégie est simple et claire, le code est facile à comprendre, facile à vérifier et à optimiser.
  5. Les paramètres peuvent être modifiés pour s’adapter à différents environnements de marché.

Risques et améliorations

  1. L’EMA peut générer des signaux de négociation en retard, ce qui peut entraîner une entrée trop tardive. Il est possible d’envisager d’utiliser d’autres indicateurs pour aider à juger l’entrée anticipée.
  2. La durée de la position est incertaine, il n’y a pas de contrôle sur la taille de la perte unique. Il est possible de définir un profit cible ou une durée de conservation maximale pour éviter une perte importante.
  3. Dans les marchés à forte tendance, les arrêts peuvent être déclenchés trop souvent. Il est possible d’ajuster les paramètres en fonction de la tendance ou d’ajouter des conditions de filtrage.
  4. Les paramètres doivent être ajustés en fonction des caractéristiques des différentes variétés, telles que le cycle ATR, le multiplicateur d’arrêt, etc., sans utiliser aveuglément les valeurs par défaut.

Direction d’optimisation

  1. Vous pouvez envisager d’inclure des indicateurs de jugement de tendance, de faire des ordres dans la direction de la tendance et d’éviter les transactions à contre-courant.
  2. Le multiplicateur de stop-loss peut être ajusté en fonction de la taille de la volatilité, en assouplissant de manière appropriée la plage de stop-loss lors de fortes fluctuations.
  3. Il est possible de définir une durée de maintien maximale et d’arrêter activement les pertes après un certain temps.
  4. Vous pouvez ajouter une stratégie de stop mobile, qui augmente le stop progressivement au fur et à mesure que le prix évolue.
  5. Les paramètres ATR peuvent être personnalisés en fonction des caractéristiques de chaque action.

Résumer

L’idée générale de la stratégie est claire et facile à comprendre. La stratégie utilise l’indicateur ATR pour définir une marge d’adaptation au stop-loss et pour générer des signaux de négociation avec l’EMA, ce qui permet de contrôler efficacement les pertes. Cependant, la stratégie elle-même est plus passive, l’espace d’optimisation est plus grand, il est possible d’envisager d’inclure des jugements de tendance, d’ajuster les paramètres en fonction de la situation du marché, etc.

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