本策略是一个结合了钱德动量振荡器(CMO)和布林带(Bollinger Bands)的高级量化交易系统。它通过分析价格波动性和动量指标来识别市场的超买超卖状态,从而产生精确的交易信号。该策略利用了动量反转和价格通道突破的双重验证机制,有效提高了交易的可靠性。
策略的核心逻辑基于以下几个关键组件: 1. 布林带系统: 使用20周期移动平均线作为中轨,标准差倍数为2.0,形成上下轨道。这一设置能够有效捕捉价格的波动范围和突破方向。 2. CMO指标系统: 采用14周期设置,超买阈值为50,超卖阈值为-50。该指标通过计算上涨和下跌动量的差值来衡量市场力量对比。 3. 交易信号生成机制: - 做多条件: 价格下穿布林带下轨且CMO低于超卖阈值 - 做空条件: 价格上穿布林带上轨且CMO高于超买阈值 - 平仓机制: 价格穿越布林带中轨或动量指标达到相反的极值区域
该策略通过布林带和CMO的协同作用,构建了一个完整的交易系统。策略在保持操作客观性的同时,通过多重确认机制提高了交易的可靠性。通过合理的参数设置和风险控制,策略展现出良好的实用性和可扩展性。进一步优化空间主要集中在动态适应性和精细化管理方面。
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Chande Momentum Oscillator + Bollinger Bands Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Bollinger Bands Parameters
bbLength = input.int(20, title="Bollinger Bands Length")
bbStdDev = input.float(2.0, title="Bollinger Bands Std Dev")
basis = ta.sma(close, bbLength)
upper = basis + bbStdDev * ta.stdev(close, bbLength)
lower = basis - bbStdDev * ta.stdev(close, bbLength)
// Chande Momentum Oscillator Parameters
cmoLength = input.int(14, title="CMO Length")
cmoOverbought = input.float(50, title="CMO Overbought Level")
cmoOversold = input.float(-50, title="CMO Oversold Level")
cmo = ta.cmo(close, cmoLength)
// Plot Bollinger Bands
plot(basis, color=color.orange, title="Bollinger Basis")
p1 = plot(upper, color=color.blue, title="Bollinger Upper")
p2 = plot(lower, color=color.blue, title="Bollinger Lower")
fill(p1, p2, color=color.blue, transp=90, title="Bollinger Fill")
// Plot CMO
hline(cmoOverbought, "Overbought", color=color.red)
hline(cmoOversold, "Oversold", color=color.green)
plot(cmo, color=color.purple, title="CMO")
// Buy Condition: Price crosses below lower Bollinger Band and CMO is oversold
longCondition = ta.crossunder(close, lower) and cmo < cmoOversold
if (longCondition)
strategy.entry("Long", strategy.long)
// Sell Condition: Price crosses above upper Bollinger Band and CMO is overbought
shortCondition = ta.crossover(close, upper) and cmo > cmoOverbought
if (shortCondition)
strategy.entry("Short", strategy.short)
// Exit Long: Price crosses above basis or CMO is overbought
exitLong = ta.crossover(close, basis) or cmo > cmoOverbought
if (exitLong)
strategy.close("Long")
// Exit Short: Price crosses below basis or CMO is oversold
exitShort = ta.crossunder(close, basis) or cmo < cmoOversold
if (exitShort)
strategy.close("Short")