
A estratégia é um sistema de negociação multi-zona de tempo baseado no MACD e nas médias móveis. Combina o MACD com dois períodos de tempo de 1 minuto e 3 minutos, enquanto usa o EMA de 200 ciclos como um filtro de tendência para negociar, capturando a continuidade das tendências do mercado. A estratégia contém um mecanismo de gerenciamento de risco, incluindo a configuração de stop loss e a função de ajuste dinâmico do movimento para o ponto de referência.
A lógica central da estratégia é baseada nos seguintes elementos-chave:
As regras específicas de geração de sinais de negociação são as seguintes:
Sugestões de controle de risco:
A estratégia, através da combinação de indicadores MACD de períodos múltiplos e filtros de tendência EMA, constrói um sistema de negociação relativamente perfeito. Sua vantagem reside na integridade do mecanismo de confirmação múltipla e da gestão de risco, mas também precisa prestar atenção às questões de adaptabilidade em diferentes ambientes de mercado. Através da orientação de otimização recomendada, a estratégia espera aumentar ainda mais a capacidade de rendimento, mantendo sua estabilidade.
/*backtest
start: 2025-02-13 00:00:00
end: 2025-02-15 02:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("NQ MACD Continuation Backtest", overlay=true)
// MACD Settings
fastLength = 12
slowLength = 26
signalLength = 9
// 1-minute MACD
[macdLine, signalLine, _] = ta.macd(close, fastLength, slowLength, signalLength)
// 3-minute MACD for trend filter
[htfMacd, htfSignal, _] = request.security(syminfo.tickerid, "3", ta.macd(close, fastLength, slowLength, signalLength), lookahead=barmerge.lookahead_on)
// 200 EMA
ema200 = ta.ema(close, 200)
// Time Filters
inSession = (hour(time, "America/New_York") >= 9 and (hour(time, "America/New_York") > 9 or minute(time, "America/New_York") >= 45)) and (hour(time, "America/New_York") < 22 or (hour(time, "America/New_York") == 22 and minute(time, "America/New_York") == 30))
notRestricted = (hour(time, "America/New_York") >= 6 and hour(time, "America/New_York") < 22)
// Track Previous MACD Crosses
var bool bullishCrossed = false
var bool bearishCrossed = false
if (ta.crossover(macdLine, signalLine) and macdLine > 0)
bullishCrossed := true
if (ta.crossunder(macdLine, signalLine) and macdLine < 0)
bearishCrossed := true
// Define Continuation Signals with EMA and 3-Min MACD Filter
bullishContinuation = (ta.crossover(macdLine, signalLine) and macdLine > 0 and signalLine > 0 and htfMacd > htfSignal and bullishCrossed and close > ema200)
bearishContinuation = (ta.crossunder(macdLine, signalLine) and macdLine < 0 and signalLine < 0 and htfMacd < htfSignal and bearishCrossed and close < ema200)
// Entry Conditions with SL and 10 Contracts
if (bullishContinuation and inSession and notRestricted)
strategy.entry("Long", strategy.long, qty=10, stop=close - 7 * syminfo.mintick)
if (bearishContinuation and inSession and notRestricted)
strategy.entry("Short", strategy.short, qty=10, stop=close + 7 * syminfo.mintick)
// Break-Even Adjustment
if (strategy.position_size > 0 and close >= strategy.position_avg_price + 5 * syminfo.mintick)
strategy.exit("BreakEvenLong", from_entry="Long", stop=strategy.position_avg_price)
if (strategy.position_size < 0 and close <= strategy.position_avg_price - 5 * syminfo.mintick)
strategy.exit("BreakEvenShort", from_entry="Short", stop=strategy.position_avg_price)
// Display Indicators on Chart
plot(macdLine, color=color.blue, title="MACD Line")
plot(signalLine, color=color.orange, title="Signal Line")
plot(ema200, color=color.red, title="200 EMA")