本文是《量化指标解码》系列的第13篇,我们将深入解码WaveTrend波浪趋势指标,从双重EMA平滑到交叉信号捕捉,从超买超卖区域判断到背离检测,从常规信号到强势信号识别,让你掌握在震荡行情中精准捕捉转折点的核心技术。
上一篇讲了聪明钱突破通道,有读者私信说这个指标在捕捉突破时确实好用,但在震荡行情中不太管用,价格在通道内来回波动时,不知道什么时候该进该出。
这个问题我也遇到过。趋势行情好做,无非就是顺势而为,等回调入场。但震荡行情就麻烦了,价格在一个区间反复拉锯,追高了就套,杀跌了就踏空。很多人在震荡市里被来回打脸,亏得怀疑人生。
后来接触到WaveTrend这个指标,是在研究TradingView上LazyBear大神的脚本时发现的。仔细研究了算法之后才发现,这个指标的设计思路非常适合震荡行情:通过双重EMA平滑价格波动,用两条波浪线的交叉来判断买卖时机,再配合超买超卖区域和背离检测,在震荡市里找到相对确定性的入场点。
把这个指标加到系统里用了一段时间,效果确实不错。特别是在横盘震荡的时候,WT1和WT2的交叉信号比单纯看RSI或MACD要清晰很多。更重要的是,它能通过背离提前预警趋势反转,让你在震荡转趋势的临界点上占据先机。
这篇文章,我们就来好好讲讲WaveTrend。它既能在震荡行情中捕捉高抛低吸的机会,又能在趋势行情中识别过度延伸和潜在反转。
WaveTrend(波浪趋势),是一个基于双重EMA平滑和动量振荡的技术指标。它的核心思想是:通过多重平滑消除价格噪音,用两条波浪线的交叉来捕捉市场的转折点。
说人话就是:把价格数据经过两次平滑处理,变成两条流畅的波浪线。当快线上穿慢线,就是买入信号;当快线下穿慢线,就是卖出信号。
很多人会问:这不就是RSI吗?都是振荡指标,都有超买超卖区域。
其实不是。关键区别有三个:
平滑程度不同
信号生成不同
灵敏度不同
打个比方,RSI像是用温度计测水温,告诉你现在水是热还是冷。WaveTrend像是用两个不同灵敏度的温度计,快的那个先感知到温度变化,慢的那个跟上时,就是温度真正转折的时候。
这个指标天生就是为震荡行情设计的:
所以这个指标最适合在震荡行情中做波段交易,或者在趋势行情中寻找回调和反转的时机。
WaveTrend的计算分六步:计算HLC3、计算ESA、计算D值、计算CI、计算WT1、计算WT2。听起来复杂,但每一步都有清晰的逻辑。
HLC3是High、Low、Close三个价格的平均值,代表K线的价格重心。
def calculate_hlc3(bars):
"""
计算HLC3
HLC3 = (最高价 + 最低价 + 收盘价) / 3
"""
hlc3 = [(bar.high_price + bar.low_price + bar.close_price) / 3
for bar in bars]
return hlc3
为什么用HLC3?因为它比单纯的收盘价更能反映K线的整体位置,过滤掉了尾盘拉升或砸盘的干扰。
对HLC3进行第一次EMA平滑,得到ESA(Exponential Smoothed Average)。
def calculate_esa(hlc3, channel_length=9):
"""
计算ESA
ESA = EMA(hlc3, channel_length)
"""
esa = talib.EMA(hlc3, timeperiod=channel_length)
return esa
这里的channel_length默认是9,意思是用9周期的EMA。周期越短,反应越快;周期越长,曲线越平滑。
计算HLC3与ESA的偏离程度,然后再对这个偏离度进行EMA平滑。
def calculate_d(hlc3, esa, channel_length=9):
"""
计算D值
D = EMA(abs(hlc3 - esa), channel_length)
"""
d_values = np.abs(hlc3 - esa)
d = talib.EMA(d_values, timeperiod=channel_length)
return d
这一步很关键。D值衡量的是价格偏离均线的幅度。价格波动剧烈时,D值大;价格平稳时,D值小。
这是WaveTrend的核心公式,用偏离度除以一个缩放因子。
def calculate_ci(hlc3, esa, d):
"""
计算CI(Channel Index)
CI = (hlc3 - esa) / (0.015 * d)
"""
ci = np.zeros_like(hlc3)
for i in range(len(hlc3)):
if d[i] != 0:
ci[i] = (hlc3[i] - esa[i]) / (0.015 * d[i])
return ci
为什么是0.015?
这个系数是LazyBear在TradingView上测试出来的经验值。它的作用是调整CI的取值范围,让大部分时候CI在-100到+100之间波动。你也可以改成0.01或0.02,但0.015是市场验证过的最优值。
对CI再做一次EMA平滑,得到WT1。
def calculate_wt1(ci, avg_length=21):
"""
计算WT1
WT1 = EMA(ci, avg_length)
"""
# 过滤无效值
ci_clean = np.copy(ci)
ci_clean[np.isnan(ci_clean)] = 0
ci_clean[np.isinf(ci_clean)] = 0
wt1 = talib.EMA(ci_clean, timeperiod=avg_length)
return wt1
这里的avg_length默认是21,第二次平滑使用的周期更长,让WT1更加稳定。
对WT1计算4周期的SMA,得到WT2。
def calculate_wt2(wt1):
"""
计算WT2
WT2 = SMA(wt1, 4)
"""
wt1_clean = np.copy(wt1)
wt1_clean[np.isnan(wt1_clean)] = 0
wt2 = talib.SMA(wt1_clean, timeperiod=4)
return wt2
为什么WT2用SMA而不是EMA?
因为SMA更滞后,和WT1的EMA形成快慢配合。当快线(WT1)穿越慢线(WT2)时,就是明确的交叉信号。
把这六步串起来,就得到了完整的WaveTrend指标:
理解了计算原理,使用起来就很清晰了。
看两个条件:
如果WT1在-60以下(极度超卖区)上穿WT2,这就是强烈买入信号,代码里会在K线下方画一个向下的三角形。这种机会不多,但一旦出现,往往是绝佳的抄底时机。
如果WT1在-60到-53之间(超卖区)上穿,这是普通买入信号,用小圆点标记。这种信号多一些,但也需要配合其他指标验证。
同样看两个条件:
如果WT1在+60以上(极度超买区)下穿WT2,这就是强烈卖出信号,会在K线上方画一个向上的三角形。这是逃顶的好时机。
如果WT1在+53到+60之间(超买区)下穿,这是普通卖出信号,用小圆点标记。
背离是WaveTrend最有价值的功能之一。有两种背离:
看涨背离(价格创新低,指标创新高):
看跌背离(价格创新高,指标创新低):
背离信号往往出现在趋势的末端,是反转的早期预警。结合交叉信号使用,效果更好。
系统会自动分析WaveTrend的状态,给出实时解读。
解读内容包括:
这些解读会实时更新,帮你快速理解当前市场在什么阶段。比如你看到"极度超卖区 - 警惕底部反转"配合"WT1上穿WT2 - 看涨信号",这就是明确的做多机会。
WaveTrend有几个核心参数,理解它们对实战很重要。
1. 通道长度(channel_length,默认9)
控制第一次EMA平滑的周期,影响指标的灵敏度。
5-8:快速反应
9-12:平衡模式(推荐)
13-15:稳健跟踪
实战建议:日内用7-9,小时线用9-11,日线用11-13。
2. 平均长度(avg_length,默认21)
控制第二次EMA平滑的周期,影响WT1的平滑程度。
15-18:快速模式
21-25:标准模式(推荐)
26-30:平稳模式
实战建议:默认21就很好,不同品种可以在18-25之间微调。
3. 超买线1(ob_level1,默认60)
极度超买的阈值,WT1超过这个值说明市场过热。
实战建议:60是经典设置,可以根据品种特性调整到55-65。波动大的品种可以设高一点,波动小的品种设低一点。
4. 超买线2(ob_level2,默认53)
普通超买的阈值,WT1超过这个值开始考虑减仓。
实战建议:保持和超买线1有7-10点的差距,形成一个超买区间。
5. 超卖线1(os_level1,默认-60)
极度超卖的阈值,WT1低于这个值说明市场超跌。
实战建议:-60是经典设置,对称于+60。
6. 超卖线2(os_level2,默认-53)
普通超卖的阈值,WT1低于这个值开始考虑加仓。
实战建议:保持和超卖线1有7-10点的差距。
7. 显示背离(show_divergences,默认True)
是否显示价格与WaveTrend的背离信号。
背离是很重要的反转信号,建议开启。如果觉得图表太乱,可以关闭,专注交叉信号本身。
第一,不是所有交叉都值得做。WT1和WT2在零轴附近来回穿梭时,交叉信号不可靠。最好等WT1到超买超卖区域后的交叉,成功率高很多。
第二,超买超卖可以持续很久。WT1进入超买区域不代表马上会跌,可能还会继续上涨。真正的卖点是WT1在超买区下穿WT2的时候。
第三,背离信号要配合位置。低位的看涨背离最可靠,往往是大底部信号。高位的看跌背离最可靠,往往是大顶部信号。中间位置的背离,谨慎对待。
第四,多周期验证。小周期的WaveTrend信号配合大周期趋势,效果最好。如果日线在上涨趋势,小时线WaveTrend给出超卖买入信号,这种顺势交易成功率最高。
第五,零轴很重要。WT1在零轴上方,说明整体偏多;在零轴下方,说明整体偏空。突破零轴或跌破零轴,都是重要的趋势转折信号。
就这几点。话不多,但都是实战踩坑总结出来的。
到这里,WaveTrend波浪趋势的核心内容基本讲完了。从双重EMA平滑到交叉信号捕捉,从超买超卖判断到背离检测,从常规信号到强势信号识别,最重要的是理解这个指标的本质:它通过多层平滑消除噪音,用双线交叉捕捉市场转折点。
不要指望这个指标能告诉你市场一定会涨还是会跌,它只能告诉你:当前市场处于什么状态(超买/超卖/中性),以及动量方向在发生什么变化(上穿/下穿)。
用好它的关键是:
下一篇准备讲SuperTrended RSI。说实话,WaveTrend在震荡行情中捕捉买卖点确实很强,但它有个问题:不太能区分震荡和趋势。有时候在强势趋势中,WT1刚进超买区就给卖出信号,你平仓出来,结果它继续涨了20%。SuperTrended RSI专门解决这个问题,它把RSI和SuperTrend结合起来,用趋势方向过滤掉逆势信号。两个指标配合起来,WaveTrend管震荡中的精确买卖点,SuperTrended RSI管趋势中的顺势交易,互补性很强。
先写到这,有问题欢迎留言交流。
本文是《量化指标解码》系列的第13篇,ATMQuant量化交易系统已开源至GitHub:https://github.com/seasonstar/atmquant
WaveTrend波浪趋势指标已集成到ATMQuant系统副图指标控制板,完整源码和配置教程详见GitHub。
本文内容仅供学习交流,不构成任何投资建议。交易有风险,投资需谨慎。
想系统性掌握策略研发、指标可视化与回测优化?加入我的知识星球,获得持续、体系化的成长支持:
《量化指标解码》系列
《以AI量化为生》系列