基于Chande动量振荡器(CMO)的均值回归交易策略是一种技术分析策略,通过计算一定时期内价格变动的动量来识别超买超卖区域。该策略主要通过监测资产价格的动量变化,在价格出现极端偏离时进行交易,以捕捉价格回归均值的机会。策略采用9天周期的CMO指标作为核心信号,在CMO低于-50时开仓做多,在CMO高于50或持仓时间超过5天时平仓。
策略的核心是CMO指标的计算和应用。CMO通过计算一定周期内上涨和下跌的差值与总和的比值来衡量动量。具体计算公式为: CMO = 100 × (上涨和 - 下跌和)/(上涨和 + 下跌和)
与传统RSI不同,CMO在分子中同时使用了涨跌数据,提供了更对称的动量测量。策略在CMO低于-50时认为市场超卖,预期价格会回升,因此开仓做多。当CMO升至50以上或开仓超过5天时,策略平仓止盈或止损。
该策略通过CMO指标捕捉市场超买超卖机会,结合固定时间止损,构建了一个稳健的均值回归交易系统。策略逻辑清晰,风险控制合理,具有良好的实用价值。通过进一步优化参数和增加辅助指标,策略的稳定性和盈利能力还可以进一步提升。
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Chande Momentum Oscillator Strategy", overlay=false)
// Input for the CMO period
cmoPeriod = input.int(9, minval=1, title="CMO Period")
// Calculate price changes
priceChange = ta.change(close)
// Separate positive and negative changes
up = priceChange > 0 ? priceChange : 0
down = priceChange < 0 ? -priceChange : 0
// Calculate the sum of ups and downs using a rolling window
sumUp = ta.sma(up, cmoPeriod) * cmoPeriod
sumDown = ta.sma(down, cmoPeriod) * cmoPeriod
// Calculate the Chande Momentum Oscillator (CMO)
cmo = 100 * (sumUp - sumDown) / (sumUp + sumDown)
// Define the entry and exit conditions
buyCondition = cmo < -50
sellCondition1 = cmo > 50
sellCondition2 = ta.barssince(buyCondition) >= 5
// Track if we are in a long position
var bool inTrade = false
if (buyCondition and not inTrade)
strategy.entry("Long", strategy.long)
inTrade := true
if (sellCondition1 or sellCondition2)
strategy.close("Long")
inTrade := false
// Plot the Chande Momentum Oscillator
plot(cmo, title="Chande Momentum Oscillator", color=color.blue)
hline(-50, "Buy Threshold", color=color.green)
hline(50, "Sell Threshold", color=color.red)