向导技巧(第75部分):动量震荡指标与包络线的应用
动量震荡指标 + 包络线,识别趋势与入场时机
一、为什么把动量震荡指标与包络线组合在一起
在量化交易和手动分析里,单一指标常有盲区。动量震荡指标(AO)由比尔·威廉姆斯提出,本质是用中间价的快线与慢线之差来刻画趋势动量;它擅长在趋势行情中提示方向,但在震荡市里容易发出过早的反转信号。包络线则是在一条移动平均线上下按固定百分比画出两条轨道,用来界定价格的常规波动边界,在横盘区间里识别超买超卖很管用,可一旦遇到单边趋势,价格会贴着轨道外面走,单纯靠包络线反转就容易吃亏。把两者叠加,等于用 AO 确认“动量是否支持”,用包络线定义“价格是否到了极端边界”,互补之后,信号的噪音明显降低,这是本文组合的根本逻辑。
从实战角度看,这种组合既能做均值回归(价格碰轨后回弹),也能做趋势延续(价格破轨后 AO 确认动量强劲)。我们在美元兑日元三十分钟周期上做过一年训练、一年前瞻的回测,结果显示部分形态在前瞻阶段依然有正期望,说明这种共振思路并非过拟合的偶然。当然,外汇与贵金属本身属于高风险品种,任何历史测试都不能代表未来,落地前务必在更多市场状态中验证。
- AO 负责判断动量方向和强度,偏趋势
- 包络线负责标出波动边界与支撑阻力,偏震荡
- 两者结合可降低假信号概率,并自然给出止损参考位
二、两个指标的基础算法与读图方式
AO 的计算并不复杂:取每根 K 线的中间价(最高加最低除以二),分别算五周期和三十四个周期的简单移动平均,两者相减即为当期 AO 值,以柱状图呈现。零轴上方代表短期动量强于长期,下方则相反。除了零轴穿越,双峰(同侧两个谷/峰,后者更靠近零轴)和背离也是常用读法。包络线以某条均线为中轨,上下各偏移设定百分比(常见 2%)得到上轨与下轨。轨道宽度随价格波动自动伸缩:波动大时通道变宽,平静时收窄。价格触上轨视为超买,触下轨视为超卖,但趋势中价格可能长时间在轨外运行,所以不能机械抄顶摸底。
理解算法有助于写代码和设参数。比如 AO 的 five 与 thirty-four 周期来自比尔·威廉姆斯的经验值,若放到更低周期可能需微调;包络线的百分比偏离若太小,轨道会频繁被触碰,信号过多,太大则迟钝。实际编写智能交易时,通常用现成的指标调用函数取得数值,再按形态逻辑组合判断。
// 伪代码示意:获取 AO 与包络线值 double ao_now = iAO(symbol, period, 0); double env_up = iEnvelopes(symbol, period, ma_period, 0, PRICE_CLOSE, deviation, MODE_SMA, 0); double env_lo = iEnvelopes(symbol, period, ma_period, 0, PRICE_CLOSE, deviation, MODE_SMA, 1);
三、假突破反转:用 AO 过滤包络线的刺穿
第一种常见形态是包络线边界的假突破。例如价格瞬间跌破下轨又快速拉回通道内,表面看是破位,但若此时 AO 处于零轴下方且绿柱(此处指负值柱)逐步缩小,甚至出轻微底背离,说明抛压已近枯竭,更可能是空头陷阱。代码上会检查两三根 K 线的收盘价与轨道关系,并要求 AO 从负翻正或保持特定结构。反之,上轨的假突破伴随 AO 正值减弱,则是多头力气用完的预警。这类形态本质是均值回归,止损可放在轨道外一点,因入场靠近极端价,风险回报比较优。
在回测中,该形态前瞻表现小幅盈利或持平,说明逻辑有一定稳健性。但要注意,若大趋势极强,价格可能只是短暂回轨随即再攻,此时假突破过滤反而会错过行情,因此必须结合更大周期方向做二次确认。
bool CSignalAO_Envelopes::IsPattern_0(ENUM_POSITION_TYPE T)
{
if(T == POSITION_TYPE_BUY &&
AO(X()) > 0.0 &&
AO(X()+1) < 0.0 &&
Close(X()+2) > Envelopes_Lo(X()+2) &&
Close(X()+1) <= Envelopes_Lo(X()+1) &&
Close(X()) > Envelopes_Lo(X()))
return(true);
else if(T == POSITION_TYPE_SELL &&
AO(X()) < 0.0 &&
AO(X()+1) > 0.0 &&
Close(X()+2) < Envelopes_Up(X()+2) &&
Close(X()+1) >= Envelopes_Up(X()+1) &&
Close(X()) < Envelopes_Up(X()))
return(true);
return(false);
}
四、真实突破延续:AO 强动量确认破轨有效
与假突破相反,形态一捕捉价格连续两根以上 K 线收在包络线上轨外,且 AO 保持高位正值,说明买方控盘扎实,突破大概率延续。代码里会取 AO 最近三根值,比对零轴与彼此大小,并核对收盘价位置。看跌版则是连续收在下轨外且 AO 深负。该形态专为趋势市设计,回测前瞻表现较好,图形上常出现在波动率放大初期。
实操上,这种信号适合用移动止损跟随,因为行情可能跑得很远;但若 AO 只是勉强在零轴上,而价格已破轨,则可能是毛刺,本形态明确要求 AO 有足够强度才触发,就是为了剔除这类情况。
bool CSignalAO_Envelopes::IsPattern_1(ENUM_POSITION_TYPE T)
{
vector _last = AO_Last3(X());
if(T == POSITION_TYPE_BUY &&
_last[0] < 0.0 && _last[2] < 0.0 && _last[0] > _last[2] &&
Close(X()+2) > Envelopes_Mid(X()+2) &&
Close(X()+1) <= Envelopes_Mid(X()+1) &&
Close(X()) > Envelopes_Mid(X()))
return(true);
else if(T == POSITION_TYPE_SELL &&
_last[0] > 0.0 && _last[2] > 0.0 && _last[0] < _last[2] &&
Close(X()+2) < Envelopes_Mid(X()+2) &&
Close(X()+1) >= Envelopes_Mid(X()+1) &&
Close(X()) < Envelopes_Mid(X()))
return(true);
return(false);
}
五、边界背离与零轴回踩:两种反转和续涨结构
形态二看包络线轨道处的 AO 背离:价格探下轨出新低,AO 却抬高低点,下跌动能弱化,支撑有效;形态三则是 AO 零轴金叉叠加价格回踩包络线中轨(均线)获撑,属于趋势中的逢低买。前者反转意图强,后者顺势回调结束信号清晰。代码中分别用 AO 相邻值大小关系和收盘价与轨道比较来实现。两者在前瞻测试都能盈利,但背离形态需警惕在单边市中“背离再背离”导致提前入场。
进一步说,中轨在形态三里扮演动态支撑,AO 零轴是多空分水岭;当主趋势向上时,价格回中轨、AO 短暂下水再上穿,就是不错的加仓点。这种结构比盲目追高安全,尤其在外汇日内波段里常用。
bool CSignalAO_Envelopes::IsPattern_2(ENUM_POSITION_TYPE T)
{
if(T == POSITION_TYPE_BUY &&
AO(X()+2) > AO(X()+1) && AO(X()+1) < AO(X()) &&
Close(X()+2) > Envelopes_Lo(X()+2) &&
Close(X()+1) <= Envelopes_Lo(X()+1) &&
Close(X()) > Envelopes_Lo(X()))
return(true);
else if(T == POSITION_TYPE_SELL &&
AO(X()+2) < AO(X()+1) && AO(X()+1) > AO(X()) &&
Close(X()+2) < Envelopes_Up(X()+2) &&
Close(X()+1) >= Envelopes_Up(X()+1) &&
Close(X()) < Envelopes_Up(X()))
return(true);
return(false);
}
六、波动率收缩、极端动量及双顶底等进阶形态
形态四利用包络线收窄(挤压)叠加 AO 微偏向,预判突破方向;形态五看 AO 极端高位伴轨道扩张,顺趋势跟进;形态六是轨道处双底/双顶加 AO 双峰,反转概率提升;形态七为 AO 从超卖陡转超买且价格破上轨,抓 V 反;形态八为破轨后回踩轨道不进内,趋势低风险续入;形态九为轨道斜率转升加 AO 上零轴,判新趋势开启。这些在源码中均有独立函数,回测结果参差:形态七前瞻佳,形态八、九前瞻未盈利,提示参数或市场适配需调。
对中文交易者来说,没必要死记所有形态。可先上手假突破与真实突破两种(形态零和一),因为它们覆盖了震荡与趋势两类环境,逻辑也最直观。其余形态作为过滤器或补充观察即可。贵金属与外汇波动受消息影响大,形态七的 V 反常由新闻触发,手动盘要留意日历。
- 挤压突破:轨道收口 + AO 偏斜,概率上引导方向
- 极端趋势:AO 高耸 + 轨道陡倾,顺势不为逆
- 双峰双顶:轨道边界经典图形 + AO 确认,反转可信度增
七、编写与回测的实操步骤及与其他方案对比
在向导里建信号类,把 AO 与包络线取值封装成函数,每个形态写成独立 IsPattern_N 方法,主逻辑按头寸方向调用。回测用二八分或逐年滚动,重点看前瞻而非训练拟合。和布林带比,包络线用百分比轨更直观,但布林带用标准差更能反映波动率突变;AO 相比 MACD 更少参数,却也少了一条信号线。组合起来的优势是“边界+动量”双确认,劣势是参数两处都要调,过优化风险上升。
从社区多位作者实测看,这类组合在日元交叉盘三十分钟周期表现尚可,换成黄金小时图可能需放宽包络线偏差。高风险提示:杠杆品种中,即便形态胜率略高,单笔错判也可能吞掉多笔盈利,务必配合仓位控制。本文形态均基于历史数据,未来表现存不确定性,请以概率视角看待任何信号。
bool CSignalAO_Envelopes::IsPattern_9(ENUM_POSITION_TYPE T)
{
if(T == POSITION_TYPE_BUY &&
AO(X()+2) > AO(X()+1) && AO(X()+1) > AO(X()) && AO(X()) > 0.0 &&
Close(X()+2) > Envelopes_Mid(X()+2) &&
Close(X()+1) <= Envelopes_Mid(X()+1) &&
Close(X()) > Envelopes_Mid(X()))
return(true);
else if(T == POSITION_TYPE_SELL &&
AO(X()+2) < AO(X()+1) && AO(X()+1) < AO(X()) && AO(X()) < 0.0 &&
Close(X()+2) < Envelopes_Mid(X()+2) &&
Close(X()+1) >= Envelopes_Mid(X()+1) &&
Close(X()) < Envelopes_Mid(X()))
return(true);
return(false);
}