
A estratégia é um sistema de negociação quantitativa baseado em múltiplos indicadores técnicos, integrando os três principais indicadores técnicos: a média móvel do índice (EMA), o indicador de força relativa (RSI) e o indicador de tendência média (ADX). A estratégia usa o sinal de cruzamento da linha rápida e lenta da EMA como base principal de entrada, ao mesmo tempo em que a RSI é usada para a confirmação de sobrecompra e venda, e usa o indicador ADX para determinar a força da tendência do mercado, formando assim um sistema de decisão de negociação completo. A estratégia também contém um módulo de gerenciamento de risco para controlar as posições de parada e perda de cada transação, definindo o risco-benefício.
A lógica central da estratégia baseia-se nos seguintes componentes-chave:
Trata-se de uma estratégia de negociação de indicadores técnicos múltiplos concebida de forma racional e logicamente completa. Com a integração dos três indicadores técnicos clássicos, EMA, RSI e ADX, a estratégia tem um bom desempenho em termos de acompanhamento de tendências e controle de risco. Embora existam algumas áreas que precisam de otimização, em geral a estratégia tem um bom valor prático e espaço para expansão.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Enhanced EMA + RSI + ADX Strategy", overlay=true)
// Input parameters
lenFast = input.int(9, title="Fast EMA Length", minval=1)
lenSlow = input.int(21, title="Slow EMA Length", minval=1)
rsiPeriod = input.int(14, title="RSI Period")
adxPeriod = input.int(14, title="ADX Period")
adxSmoothing = input.int(1, title="ADX Smoothing")
adxThreshold = input.int(20, title="ADX Threshold")
riskRewardRatio = input.float(2.0, title="Risk/Reward Ratio")
// EMA Calculations
fastEMA = ta.ema(close, lenFast)
slowEMA = ta.ema(close, lenSlow)
// RSI Calculation
rsiValue = ta.rsi(close, rsiPeriod)
// ADX Calculation
[plusDI, minusDI, adxValue] = ta.dmi(adxPeriod, adxSmoothing)
// Entry Conditions
buyCondition = ta.crossover(fastEMA, slowEMA) and rsiValue < 60 and adxValue > adxThreshold
sellCondition = ta.crossunder(fastEMA, slowEMA) and rsiValue > 40 and adxValue > adxThreshold
// Entry logic
if (buyCondition)
strategy.entry("Buy", strategy.long)
strategy.exit("Sell", from_entry="Buy", limit=close + (close - strategy.position_avg_price) * riskRewardRatio, stop=close - (close - strategy.position_avg_price))
if (sellCondition)
strategy.close("Buy")
// Plotting EMAs (thinner lines)
plot(fastEMA, color=color.new(color.green, 0), title="Fast EMA", linewidth=1)
plot(slowEMA, color=color.new(color.red, 0), title="Slow EMA", linewidth=1)
// Entry and exit markers (larger shapes)
plotshape(series=buyCondition, style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), size=size.normal, title="Buy Signal")
plotshape(series=sellCondition, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.normal, title="Sell Signal")
// Displaying price labels for buy/sell signals
if (buyCondition)
label.new(bar_index, low, text="Buy\n" + str.tostring(close), color=color.new(color.green, 0), style=label.style_label_down, textcolor=color.white)
if (sellCondition)
label.new(bar_index, high, text="Sell\n" + str.tostring(close), color=color.new(color.red, 0), style=label.style_label_up, textcolor=color.white)
// Optional: Add alerts for entry signals
alertcondition(buyCondition, title="Buy Alert", message="Buy signal triggered")
alertcondition(sellCondition, title="Sell Alert", message="Sell signal triggered")