
A estratégia usa uma combinação de médias móveis T3, indicadores ATR e força de queda para identificar os sinais de compra e venda e, com base no ATR, calcular as posições de stop loss e stop loss, para realizar operações de acompanhamento de tendências. A vantagem da estratégia é a resposta rápida, enquanto controla o risco de negociação.
Média móvel T3: calcula uma média móvel T3 com um parâmetro liso de T3 (default 100) para determinar a direção da tendência.
ATR: calcula o ATR (Average True Rate of Volatility), usado para determinar o tamanho da posição de parada de perda.
ATR Stop Moving: Uma linha de stop movendo baseada no ATR pode ser ajustada de acordo com a variação do preço e a taxa de flutuação, permitindo o acompanhamento de tendências.
Um sinal de compra é gerado quando o preço de fechamento atravessa a linha de stop móvel ATR e está abaixo da média de T3.
Sinais de venda: quando o preço de fechamento atravessa a linha de parada móvel ATR e está acima da média T3 produz um sinal de venda.
Stop Loss: após a entrada, o preço de stop loss e stop loss é calculado com base no valor do ATR e na taxa de retorno do risco definida pelo usuário.
Depois de comprar, o preço de parada é o preço de entrada menos o valor do ATR, o preço de parada é o preço de entrada mais o valor do ATR multiplicado pela taxa de retorno do risco.
Depois de vender, o preço de parada é o preço de entrada mais o valor do ATR, o preço de parada é o preço de entrada menos o valor do ATR multiplicado pela taxa de retorno do risco.
Quando o preço dispara um stop loss ou um stop loss, a posição de equilíbrio sai.
O parâmetro de média T3 assume por defeito 100 e é mais sensível que a média móvel em geral, permitindo uma resposta mais rápida às mudanças de preço.
O stop loss móvel calculado com o ATR pode ser calculado com base no preço do trail de flutuação do mercado, evitando o risco de o stop loss ser ultrapassado. A posição de stop loss é baseada no ATR e pode controlar a taxa de retorno de risco por transação.
A linha de parada móvel ATR é capaz de acompanhar a tendência, mesmo que não seja acionada durante uma correção de curto prazo, reduzindo assim os sinais errados.
O ciclo de média T3 e o ciclo ATR podem ser otimizados para ajustar os parâmetros para diferentes mercados, aumentando a estabilidade da estratégia.
Se houver uma situação aguda, o preço pode romper diretamente a linha de parada causando perdas. O ciclo ATR e a distância de parada podem ser ampliados de forma apropriada para mitigar.
Quando a tendência se inverte, o preço atravessando a linha de parada móvel pode causar perdas. Pode ser combinado com outros indicadores para avaliar a tendência e evitar a negociação perto do ponto de reversão.
A otimização de parâmetros requer suporte de dados históricos abundantes, existindo o risco de otimização excessiva. Deve-se adotar parâmetros de otimização de combinação de múltiplos mercados e períodos de tempo, não dependendo de um único conjunto de dados.
Testar diferentes parâmetros de ciclo de média T3 para encontrar a melhor combinação de parâmetros para equilibrar sensibilidade e estabilidade
Testar os parâmetros do ciclo ATR para encontrar o melhor equilíbrio entre o risco de controle e a tendência de obtenção
Combinação de indicadores como RSI, MACD, etc. para evitar erros de negociação de reversão de tendência
Treinar os melhores parâmetros usando métodos de aprendizagem de máquina, reduzindo as limitações da otimização manual
Aumentar as estratégias de gestão de posições para melhor controlar os riscos
Esta estratégia integra os benefícios da linha média T3 e dos indicadores ATR, permitindo uma resposta rápida às mudanças de preço e ao mesmo tempo controlar o risco. A estabilidade da estratégia e a eficiência da negociação podem ser ainda mais aumentadas através da otimização de parâmetros e da combinação com outros indicadores.
/*backtest
start: 2022-10-31 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title='UT Bot Alerts (QuantNomad) Strategy w/ NinjaView', overlay=true)
T3 = input(100)//600
// Input for Long Settings
// Input for Long Settings
xPrice3 = close
xe1 = ta.ema(xPrice3, T3)
xe2 = ta.ema(xe1, T3)
xe3 = ta.ema(xe2, T3)
xe4 = ta.ema(xe3, T3)
xe5 = ta.ema(xe4, T3)
xe6 = ta.ema(xe5, T3)
b3 = 0.7
c1 = -b3*b3*b3
c2 = 3*b3*b3+3*b3*b3*b3
c3 = -6*b3*b3-3*b3-3*b3*b3*b3
c4 = 1+3*b3+b3*b3*b3+3*b3*b3
nT3Average = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3
//plot(nT3Average, color=color.white, title="T3")
// Buy Signal - Price is below T3 Average
buySignal3 = xPrice3 < nT3Average
sellSignal3 = xPrice3 > nT3Average
// Inputs
a = input(1, title='Key Value. "This changes the sensitivity"')
c = input(50, title='ATR Period')
h = input(true, title='Signals from Heikin Ashi Candles')
riskRewardRatio = input(1, title='Risk Reward Ratio')
xATR = ta.atr(c)
nLoss = a * xATR
src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2
pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3
xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue
ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossunder(ema, xATRTrailingStop)
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.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(sell, title='Sell', text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)
barcolor(barbuy ? color.new(color.green, 90) : na)
barcolor(barsell ? color.new(color.red, 90) : na)
var float entryPrice = na
var float takeProfitLong = na
var float stopLossLong = na
var float takeProfitShort = na
var float stopLossShort = na
if buy and buySignal3
entryPrice := src
takeProfitLong := entryPrice + nLoss * riskRewardRatio
stopLossLong := entryPrice - nLoss
takeProfitShort := na
stopLossShort := na
if sell and sellSignal3
entryPrice := src
takeProfitShort := entryPrice - nLoss * riskRewardRatio
stopLossShort := entryPrice + nLoss
takeProfitLong := na
stopLossLong := na
// Strategy order conditions
acct = "Sim101"
ticker = "ES 12-23"
qty = 1
OCOMarketLong = '{ "alert": "OCO Market Long", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitLong) + '", "stop_price": "' + str.tostring(stopLossLong) + '", "tif": "DAY" }'
OCOMarketShort = '{ "alert": "OCO Market Short", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitShort) + '", "stop_price": "' + str.tostring(stopLossShort) + '", "tif": "DAY" }'
CloseAll = '{ "alert": "Close All", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '" }'
strategy.entry("Long", strategy.long, when=buy ,alert_message=OCOMarketLong)
strategy.entry("Short", strategy.short, when=sell , alert_message=OCOMarketShort)
// Setting the take profit and stop loss for long trades
strategy.exit("Take Profit/Stop Loss", "Long", stop=stopLossLong, limit=takeProfitLong,alert_message=CloseAll)
// Setting the take profit and stop loss for short trades
strategy.exit("Take Profit/Stop Loss", "Short", stop=stopLossShort, limit=takeProfitShort,alert_message=CloseAll)
// Plot trade setup boxes
bgcolor(buy ? color.new(color.green, 90) : na, transp=0, offset=-1)
bgcolor(sell ? color.new(color.red, 90) : na, transp=0, offset=-1)
longCondition = buy and not na(entryPrice)
shortCondition = sell and not na(entryPrice)
var line longTakeProfitLine = na
var line longStopLossLine = na
var line shortTakeProfitLine = na
var line shortStopLossLine = na
if longCondition
longTakeProfitLine := line.new(bar_index, takeProfitLong, bar_index + 1, takeProfitLong, color=color.green, width=2)
longStopLossLine := line.new(bar_index, stopLossLong, bar_index + 1, stopLossLong, color=color.red, width=2)
label.new(bar_index + 1, takeProfitLong, str.tostring(takeProfitLong, "#.#####"), color=color.green, style=label.style_none, textcolor=color.green, size=size.tiny)
label.new(bar_index + 1, stopLossLong, str.tostring(stopLossLong, "#.#####"), color=color.red, style=label.style_none, textcolor=color.red, size=size.tiny)
if shortCondition
shortTakeProfitLine := line.new(bar_index, takeProfitShort, bar_index + 1, takeProfitShort, color=color.green, width=2)
shortStopLossLine := line.new(bar_index, stopLossShort, bar_index + 1, stopLossShort, color=color.red, width=2)
label.new(bar_index + 1, takeProfitShort, str.tostring(takeProfitShort, "#.#####"), color=color.green, style=label.style_none, textcolor=color.green, size=size.tiny)
label.new(bar_index + 1, stopLossShort, str.tostring(stopLossShort, "#.#####"), color=color.red, style=label.style_none, textcolor=color.red, size=size.tiny)
alertcondition(buy, 'UT Long', 'UT Long')
alertcondition(sell, 'UT Short', 'UT Short')