该策略是一个结合了肯特纳通道(Keltner Channel)、K线形态和成交量分析的多维度技术指标交易系统。策略通过监测价格对通道的突破,并结合成交量和蜡烛图形态作为过滤条件,以提高交易信号的可靠性。系统设计了完整的资金管理机制,包括基于ATR的动态止损和止盈设置。
策略基于以下核心组件构建: 1. 使用20周期EMA作为趋势中轨,结合1.5倍ATR构建上下轨,形成肯特纳通道 2. 通过监测收盘价突破通道边界识别潜在交易机会 3. 使用成交量指标过滤,要求突破时的成交量高于20周期平均值 4. 结合看涨/看跌吞没形态作为额外确认信号 5. 配套使用1.5倍ATR作为止损,2倍ATR作为止盈,实现风险收益比约为1:1.33
该策略通过整合多个技术分析工具,构建了一个相对完整的交易系统。其优势在于多重信号确认机制和完善的风险管理体系,但仍需要根据具体市场特征进行优化调整。策略的成功应用需要交易者深入理解各组件的作用,并在实际交易中保持灵活运用。
/*backtest
start: 2024-06-01 00:00:00
end: 2024-12-01 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Keltner Channel Breakout with Candlestick Patterns (Manual) - Visualize False Breakouts with Chinese Labels", overlay=true)
// 输入参数
length = input.int(20, title="EMA 长度")
mult = input.float(1.5, title="ATR 乘数") // 让通道稍微紧一点,增加突破机会
atrLength = input.int(14, title="ATR 长度")
volLength = input.int(20, title="成交量长度")
stopLossMultiplier = input.float(1.5, title="止损ATR倍数")
takeProfitMultiplier = input.float(2.0, title="止盈ATR倍数")
// 计算 Keltner 通道
ema20 = ta.ema(close, length)
atr = ta.atr(atrLength)
upper = ema20 + mult * atr
lower = ema20 - mult * atr
// 绘制 Keltner 通道
plot(upper, color=color.green, linewidth=2, title="上轨")
plot(lower, color=color.red, linewidth=2, title="下轨")
plot(ema20, color=color.blue, linewidth=2, title="中轨 (EMA20)")
// 判断突破
breakout_up = close > upper
breakout_down = close < lower
// 成交量过滤:当前成交量是否高于过去 N 根 K 线的平均成交量
volume_above_avg = volume > ta.sma(volume, volLength)
// 手动判断 K线形态:看涨吞没和看跌吞没
bullish_engulfing = close > open and open[1] > close[1] and close > open[1] and open < close[1]
bearish_engulfing = close < open and open[1] < close[1] and close < open[1] and open > close[1]
// 只在突破上轨和下轨时应用 K线形态过滤
valid_breakout_up = breakout_up and volume_above_avg and bullish_engulfing
valid_breakout_down = breakout_down and volume_above_avg and bearish_engulfing
// 交易信号
long_condition = valid_breakout_up
short_condition = valid_breakout_down
// 交易策略
if (long_condition)
strategy.entry("Long", strategy.long, comment="做多")
if (short_condition)
strategy.entry("Short", strategy.short, comment="做空")
// 止损 & 止盈
long_stop_loss = close - stopLossMultiplier * atr
long_take_profit = close + takeProfitMultiplier * atr
short_stop_loss = close + stopLossMultiplier * atr
short_take_profit = close - takeProfitMultiplier * atr
strategy.exit("Exit Long", from_entry="Long", stop=long_stop_loss, limit=long_take_profit)
strategy.exit("Exit Short", from_entry="Short", stop=short_stop_loss, limit=short_take_profit)
// 可视化假突破事件
plotshape(series=breakout_up and not bullish_engulfing, location=location.abovebar, color=color.red, style=shape.triangledown, title="假突破-上")
plotshape(series=breakout_down and not bearish_engulfing, location=location.belowbar, color=color.green, style=shape.triangleup, title="假突破-下")
// 可视化 K线形态(中文标签)
plotshape(series=bullish_engulfing and breakout_up, location=location.belowbar, color=color.green, style=shape.labelup, title="看涨吞没", text="看涨吞没")
plotshape(series=bearish_engulfing and breakout_down, location=location.abovebar, color=color.red, style=shape.labeldown, title="看跌吞没", text="看跌吞没")