Stratégie de suivi de la tendance à la cessation de perte mobile adaptée basée sur ATR et RSI

Auteur:ChaoZhang est là.
Les étiquettes:

基于ATR和RSI的自适应移动止损趋势跟踪策略

Résumé

La stratégie utilise une combinaison de la plage moyenne de fluctuations réelles (ATR), de l'indice de force et de faiblesse (RSI) et du suivi des mouvements pour réaliser un suivi de tendance adaptatif.

Les principes stratégiques

  1. Le calcul de l'ATR. ATR reflète la volatilité et le niveau de risque du marché. Cette stratégie utilise l'ATR pour calculer les niveaux de stop-loss dynamiques et réaliser des stop-loss d'adaptation.

  2. Calculer le RSI. Le RSI permet de déterminer le phénomène d'excédent de vente sur le marché. Le RSI est en hausse lorsque le RSI est supérieur à 50 et en baisse lorsque le RSI est inférieur à 50. Cette stratégie utilise le RSI pour déterminer la direction de la tendance des prix.

  3. Suivi des stops mobiles. Cette stratégie est basée sur les niveaux de stop calculés par l'ATR et la direction de la tendance déterminée par le RSI.

  4. Plus précisément, lorsque le RSI est supérieur à 50, il ouvre plus de positions et moins de 50, il ouvre moins de positions. Il utilise ensuite le prix de stop-loss calculé par l'ATR pour déplacer le stop-loss et suivre les fluctuations du prix.

Analyse des avantages

  1. L'utilisation de l'ATR pour réaliser un stop-loss adaptatif permet d'ajuster l'ampleur du stop-loss en fonction de la dynamique de la volatilité du marché et d'éviter les inconvénients d'un stop-loss trop grand ou trop petit.

  2. Le RSI détermine avec précision et fiabilité la direction de la tendance, évitant ainsi que les transactions soient piégées dans des marchés instables.

  3. Le stop-loss mobile suit les fluctuations des prix et permet de lever les positions de stop-loss pour suivre pleinement les gains de la tendance.

L'analyse des risques

  1. L'optimisation des paramètres ATR et RSI doit être réévaluée, sinon cela affecte l'effet de la stratégie.

  2. Bien qu'il y ait une protection contre les dommages, il est difficile de faire un saut en hauteur pour éviter le risque de briser le freinage. Les positions peuvent être réduites de manière appropriée pour contrôler le risque.

  3. Les stratégies sont plus dépendantes des paramètres d'optimisation des variétés de transactions et nécessitent des paramètres d'ajustement pour différentes variétés.

Optimisation

  1. Il est possible de considérer l'ajout d'algorithmes d'apprentissage automatique pour optimiser l'adaptation des paramètres.

  2. L'ajout d'un module de contrôle de position permet d'ajuster dynamiquement la taille des positions en fonction des conditions du marché, ce qui réduit la probabilité d'une perte de rupture.

  3. Augmenter les indicateurs de détermination des tendances pour éviter de manquer les points d'inversion les plus élevés et les plus bas.

Résumé

Cette stratégie intègre des modules tels que l'ATR, le RSI et les stop-loss mobiles pour former une stratégie de suivi des tendances adaptative typique. L'optimisation des paramètres pour s'adapter très flexiblement à différentes variétés de transactions est une stratégie de suivi des tendances générale recommandée.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-19 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="UTBot Strategy", overlay = true )
   
// CREDITS to @HPotter for the orginal code. 
// CREDITS to @Yo_adriiiiaan for recently publishing the UT Bot study based on the original code -
// CREDITS to @TradersAITradingPlans for making this Strategy. 
// Strategy fixed with Time period by Kirk65.
// I am using this UT bot with 2 hours time frame with god resultss. Alert with "Once per bar" and stoploss 1.5%. If Alerts triggered and price goes against Alert. Stoploss will catch it. Wait until next Alert.
// While @Yo_adriiiiaan mentions it works best on a 4-hour timeframe or above, witch is a lot less risky, but less profitable. 

testStartYear = input(2019, "BACKTEST START YEAR", minval = 1980, maxval = 2222) 
testStartMonth = input(01, "BACKTEST START MONTH", minval = 1, maxval = 12)
testStartDay = input(01, "BACKTEST START DAY", minval = 1, maxval = 31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2222, "BACKTEST STOP YEAR", minval=1980, maxval = 2222)
testStopMonth = input(12, "BACKTEST STOP MONTH", minval=1, maxval=12)
testStopDay = input(31, "BACKTEST STOP DAY", minval=1, maxval=31)
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod = true

SOURCE = input(hlc3)
RSILENGTH = input(14, title = "RSI LENGTH")
RSICENTERLINE = input(52, title = "RSI CENTER LINE")
MACDFASTLENGTH = input(7, title = "MACD FAST LENGTH")
MACDSLOWLENGTH = input(12, title = "MACD SLOW LENGTH")
MACDSIGNALSMOOTHING = input(12, title = "MACD SIGNAL SMOOTHING")
a = input(10, title = "Key Vaule. 'This changes the sensitivity'") 
SmoothK = input(3)
SmoothD = input(3)
LengthRSI = input(14)
LengthStoch = input(14)
RSISource = input(close) 
c = input(10, title="ATR Period")
xATR = atr(c)
nLoss = a * xATR
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 =	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 
ema= ema(close,1)
above = crossover(ema,xATRTrailingStop )
below = crossover(xATRTrailingStop,ema)
buy = close > xATRTrailingStop and above 
sell = close < xATRTrailingStop and below
barbuy = close > xATRTrailingStop 
barsell = close < xATRTrailingStop 
plotshape(buy, title = "Buy", text = 'Buy', style = shape.labelup, location = location.belowbar, color= green,textcolor = white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= red,textcolor = white, transp = 0, size = size.tiny)
barcolor(barbuy? green:na)
barcolor(barsell? red:na)
//alertcondition(buy, title='Buy', message='Buy')
//alertcondition(sell, title='Sell', message='Sell')

if (buy)
    strategy.entry("UTBotBuy",strategy.long, when=testPeriod)
if (sell)
    strategy.entry("UTBotSell",strategy.short, when=testPeriod)

En savoir plus