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.
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.
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.
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.
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.
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.
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.
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'optimisation des paramètres ATR et RSI doit être réévaluée, sinon cela affecte l'effet de la stratégie.
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.
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.
Il est possible de considérer l'ajout d'algorithmes d'apprentissage automatique pour optimiser l'adaptation des paramètres.
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.
Augmenter les indicateurs de détermination des tendances pour éviter de manquer les points d'inversion les plus élevés et les plus bas.
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)