
This strategy is an advanced quantitative trading system that combines the Chande Momentum Oscillator (CMO) and Bollinger Bands. It identifies overbought and oversold market conditions by analyzing price volatility and momentum indicators to generate precise trading signals. The strategy employs a dual-verification mechanism of momentum reversal and price channel breakout to effectively enhance trading reliability.
The core logic is based on the following key components: 1. Bollinger Bands System: Uses a 20-period moving average as the middle band, with a standard deviation multiplier of 2.0 to form the upper and lower bands. This setup effectively captures price volatility range and breakout direction. 2. CMO Indicator System: Employs a 14-period setting with an overbought threshold of 50 and oversold threshold of -50. This indicator measures market force balance by calculating the difference between upward and downward momentum. 3. Trading Signal Generation Mechanism: - Long Entry: Price crosses below the lower Bollinger Band and CMO is below the oversold threshold - Short Entry: Price crosses above the upper Bollinger Band and CMO is above the overbought threshold - Exit Mechanism: Price crosses the Bollinger Band middle line or momentum indicator reaches the opposite extreme zone
This strategy constructs a complete trading system through the synergy of Bollinger Bands and CMO. While maintaining operational objectivity, the strategy enhances trading reliability through multiple confirmation mechanisms. Through reasonable parameter settings and risk control, the strategy demonstrates good practicality and scalability. Further optimization potential mainly focuses on dynamic adaptability and refined management.
/*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")