该策略是一个结合了钱德动量震荡指标(CMO)和布林带百分比指标(%B)的趋势交易系统。它通过分析价格动量和波动率的变化来捕捉市场趋势的突破机会。策略的核心思想是在价格接近布林带边界且动量发生转向时进行交易,从而在趋势初期建仓并获取潜在的大幅盈利。
策略使用两个主要技术指标: 1. 布林带百分比(%B):通过计算价格在布林带中的相对位置来判断超买超卖状态。当%B低于0.2表示价格接近下轨,可能出现反弹;当%B高于0.8表示价格接近上轨,可能出现回落。 2. 钱德动量震荡指标(CMO):通过计算上涨和下跌幅度的差值来衡量价格动量。CMO由负转正表示动量由空转多,由正转负表示动量由多转空。
交易信号生成逻辑: - 做多条件:当%B上穿0.2且CMO上穿0时开多仓 - 做空条件:当%B下穿0.8且CMO下穿0时开空仓
风险控制建议: - 设置合理的止损位 - 控制每笔交易的资金比例 - 定期检查和调整策略参数 - 结合其他技术指标进行交叉验证
这是一个基于技术分析的系统化交易策略,通过结合动量和波动率指标来捕捉市场趋势机会。策略设计合理,具有较强的实用性和可扩展性。通过合理的风险控制和持续优化,该策略能够为交易者提供稳定的盈利机会。建议交易者在实盘使用前进行充分的回测和参数优化,并根据具体交易品种的特点进行适当调整。
/*backtest
start: 2024-02-22 00:00:00
end: 2024-12-08 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("CMO + Bollinger Bands (%B) Strategy", overlay=true)
// Parameters for Bollinger Bands
bb_length = input.int(20, title="Bollinger Bands Length")
bb_mult = input.float(2.0, title="Bollinger Bands Multiplier")
// Calculate Bollinger Bands
basis = ta.sma(close, bb_length)
dev = bb_mult * ta.stdev(close, bb_length)
upper = basis + dev
lower = basis - dev
// Calculate %B
percentB = (close - lower) / (upper - lower)
// Parameters for Chande Momentum Oscillator
cmo_length = input.int(14, title="CMO Length")
// Calculate CMO
cmo = ta.cmo(close, cmo_length)
// Plot Bollinger Bands and %B
plot(basis, color=color.blue, title="Basis")
p1 = plot(upper, color=color.red, title="Upper Band")
p2 = plot(lower, color=color.green, title="Lower Band")
fill(p1, p2, color=color.rgb(173, 216, 230, 90), title="Bollinger Bands Fill")
hline(0, "Zero Line", color=color.gray)
hline(0.8, "Upper %B Threshold", color=color.red, linestyle=hline.style_dashed)
hline(0.2, "Lower %B Threshold", color=color.green, linestyle=hline.style_dashed)
// Plot CMO
plot(cmo, title="Chande Momentum Oscillator", color=color.purple)
hline(0, "CMO Zero Line", color=color.gray)
// Calculate crossover and crossunder for consistency
crossover_pB_0_2 = ta.crossover(percentB, 0.2)
crossover_cmo_0 = ta.crossover(cmo, 0)
crossunder_pB_0_8 = ta.crossunder(percentB, 0.8)
crossunder_cmo_0 = ta.crossunder(cmo, 0)
// Buy Signal
longCondition = crossover_pB_0_2 and crossover_cmo_0
if (longCondition)
strategy.entry("Long", strategy.long)
// Sell Signal
shortCondition = crossunder_pB_0_8 and crossunder_cmo_0
if (shortCondition)
strategy.entry("Short", strategy.short)
// Display signals on the chart
plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")