Esta estratégia combina a faixa média verdadeira (ATR), o índice de força relativa (RSI) e a perda de parada de rastreamento para alcançar a tendência adaptativa.
Calcule o ATR. O ATR mostra a volatilidade do mercado e o nível de risco. Esta estratégia usa o ATR para calcular o stop loss dinâmico para o controle de risco adaptativo.
Calcule o RSI. O RSI julga o estado de sobrecompra / sobrevenda. Quando o RSI está acima de 50, ele sinaliza perspectiva de alta, quando abaixo de 50, perspectiva de baixa. Esta estratégia utiliza o RSI para determinar a direção da tendência.
Seguimento de stop loss. De acordo com o nível de stop loss calculado pelo ATR e a direção da tendência pelo RSI, esta estratégia mantém o stop loss em movimento para rastrear a flutuação do preço, para maximizar o lucro, garantindo um stop loss eficaz.
Especificamente, longo quando o RSI sobe acima de 50, curto quando desce abaixo de 50, e depois move o stop loss baseado no ATR para bloquear o lucro ao longo da tendência.
O ATR adapta-stop loss considera a volatilidade do mercado, evita stop loss demasiado largos ou demasiado apertados.
O RSI identifica de forma confiável a tendência, evitando os golpes.
A tendência para aumentar a meta de lucro.
Os parâmetros ATR e RSI necessitam de otimização de backtest, caso contrário, afetam o desempenho da estratégia.
Embora com proteção de stop loss, ainda existe o risco de salto repentino do preço para penetrar o stop loss.
O desempenho da estratégia depende muito do ajuste de parâmetros para diferentes produtos.
Considere algoritmos de aprendizado de máquina para otimização de parâmetros adaptativos.
Adicionar um controlo de dimensionamento de posição para ajustamento dinâmico com base nas condições do mercado, para reduzir a probabilidade de penetração de stop loss.
Adicionar mais indicadores de tendência para evitar perder os principais pontos de inversão da tendência.
Esta estratégia integra ATR, RSI e trailing stop loss para um sistema típico de tendência adaptativa. Através do ajuste de parâmetros, ele pode ser flexivelmente adaptado a diferentes produtos de negociação, uma estratégia de tendência universal recomendada. Com mais julgamentos e otimização de aprendizado de máquina, pode alcançar um desempenho ainda melhor.
/*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)