
A estratégia combina o uso de uma média real de variação (ATR), um índice de força relativa (RSI) e um stop loss móvel para realizar um acompanhamento de tendência adaptativo. Calcula um stop loss dinâmico através do ATR, usa o RSI para determinar a direção da tendência do mercado, e o stop loss móvel acompanha as flutuações de preços para maximizar os lucros. Esta é uma estratégia de acompanhamento de tendência muito típica.
Calcular o ATR. O ATR reflete a volatilidade do mercado e o nível de risco. Esta estratégia calcula o ponto de parada dinâmica através do ATR, para obter um stop loss adaptativo.
Calcular o RSI. O RSI pode determinar a tendência de sobrecompra e sobrevenda do mercado. Quando o RSI é maior que 50, é um otimismo, quando é menor que 50, é um otimismo. Esta estratégia usa o RSI para determinar a direção da tendência de preços.
Esta estratégia é baseada no ponto de parada de perda calculado pelo ATR e na direção da tendência julgada pelo RSI, para que o ponto de parada móvel acompanhe continuamente a oscilação dos preços e, ao mesmo tempo, garanta a parada de perda e aumente gradualmente o ponto de parada para maximizar os lucros.
Especificamente, quando o RSI é maior do que 50 para abrir uma posição a mais e menor do que 50 para abrir uma posição a menos. Em seguida, use o preço de parada de perda calculado pelo ATR para mover a parada e acompanhar a oscilação do preço.
O uso do ATR para a realização de stop-loss adaptativo permite ajustar a amplitude de stop-loss de acordo com a dinâmica de volatilidade do mercado, evitando que o stop-loss seja demasiado grande ou demasiado pequeno.
O RSI é um indicador de tendência muito preciso e confiável, evitando que as negociações fiquem presas em mercados de turbulência.
O Stop Loss móvel acompanha a oscilação dos preços, permitindo a ampliação do Stop Loss e o acompanhamento da tendência para o lucro.
A configuração dos parâmetros ATR e RSI precisa ser testada e otimizada, caso contrário, isso afetará a eficácia da estratégia.
Embora haja proteção de stop loss, é difícil evitar o risco de um grande salto, o que fará com que o stop loss seja ultrapassado. A posição pode ser apropriadamente reduzida para controlar o risco.
A estratégia depende muito da otimização dos parâmetros das variedades de negociação, o que requer ajustes de parâmetros para diferentes variedades.
Pode-se considerar a inclusão de algoritmos de aprendizagem de máquina para a otimização de adaptação dos parâmetros.
A adição do módulo de controle de posição permite ajustar o tamanho da posição de forma dinâmica de acordo com as condições do mercado, reduzindo a probabilidade de ruptura do stop loss.
Aumentar os indicadores de tendência para evitar perdas em pontos de inversão.
Esta estratégia integra o uso de módulos como ATR, RSI e stop loss móvel, formando uma estratégia de acompanhamento de tendências típica. A otimização de parâmetros permite uma grande flexibilidade para adaptar-se a diferentes variedades de negociação, e é uma estratégia de acompanhamento de tendências genérica recomendada.
/*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)