该策略是一个基于MACD指标和移动平均线的多时区交易系统。它结合了1分钟和3分钟两个时间周期的MACD指标,同时使用200周期EMA作为趋势过滤器,通过捕捉市场趋势的持续性来进行交易。策略包含了风险管理机制,包括止损设置和移动到保本点的动态调整功能。
策略的核心逻辑基于以下几个关键要素: 1. 使用1分钟和3分钟两个时间周期的MACD指标来确认趋势的持续性 2. 通过200周期EMA作为主要趋势判断依据 3. 结合价格与均线位置关系来过滤交易信号 4. 在交易时段过滤器的基础上进行交易
具体的交易信号生成规则如下: - 多头信号: MACD线在零线以上且向上穿越信号线,同时3分钟MACD确认趋势,价格在EMA200之上 - 空头信号: MACD线在零线以下且向下穿越信号线,同时3分钟MACD确认趋势,价格在EMA200之下
风险控制建议: - 根据市场波动调整止损距离 - 考虑增加利润目标来确保盈利 - 在重要经济数据公布期间暂停交易 - 定期评估和调整策略参数
该策略通过多时间周期MACD指标和EMA趋势过滤器的结合,构建了一个相对完善的交易系统。它的优势在于多重确认机制和风险管理的完整性,但同时也需要注意在不同市场环境下的适应性问题。通过建议的优化方向,策略有望在保持其稳定性的同时进一步提高收益能力。
/*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")