通达信背离指标公式要处理的对象是一对序列:价格走出了一个新高,而指标线没有走出对应的新高。判定本身只有一句比较,难点全部落在这句话的边界上——比较的是哪两个点、窗口取多长、同一根里出现两次极值怎么办。把边界写清楚,算式才值得看。
下面按背离的构成、三种判定写法、两个方向的对称处理、参数变化带来的结论漂移、与未来函数的关系、失效场景与验证顺序展开。文中函数写法以通达信 PC 版的公式系统为准,不同版本与券商定制版在函数集合上存在差异,请以你所用客户端帮助文档为准。
一、背离由两个不同步的序列构成
一段背离判定由三部分拼成:价格序列的窗口极值、指标线的窗口极值、以及两者是否在同一根上同时成立。缺掉任何一部分,写出来的都只是「价格创了新高」或者「指标创了新高」,不是背离。
| 组成部分 | 取法 | 取错会怎样 |
|---|---|---|
| 价格窗口极值 | HHV(HIGH,N) / LLV(LOW,N) |
窗口取太短,几乎所有高点都算创新高 |
| 指标线窗口极值 | HHV(指标线,N) / LLV(指标线,N) |
指标线未先定义成变量,直接嵌函数容易写错层级 |
| 同步判断 | 两个「等于极值」的条件相减 | 用大于替代等于,会把接近极值的情形也算进来 |
第三行是最容易写松的地方。写成「价格接近窗口最高价」等同于放宽了条件,判定出来的根数会明显变多,而多出来的那些根并不是原本想找的形态。要收紧就回到严格等于。
还有一个细节容易被跳过:同一根 K 线上价格既可能是窗口最高、也可能同时是窗口最低,极端情形下两个方向的判定会同时成立。这类根在图上伴随很长的影线,如果不希望它进入统计,可以在算式里排除掉实体极小的根,或者干脆在两个方向之间加一个互斥条件。
二、三种判定写法
通达信背离指标公式的写法按复杂度分三层,先用最简单的把逻辑跑通,再按需要加严。
第一层是极值同时性。价格与指标在同一根上各自的取值等于窗口极值,再取指标未创新高这一支。
{ 指标线:以两条 EMA 之差为例 }
快线:=EMA(CLOSE,12);
慢线:=EMA(CLOSE,26);
指标线:=快线-慢线;
{ 第一层:极值同时性 }
价高:=HHV(HIGH,30);
指高:=HHV(指标线,30);
价创新高:=HIGH=价高;
指创新高:=指标线=指高;
顶向背离:价创新高 AND NOT(指创新高);
第二层加入位置要求:价格的新高必须出现在窗口的后半段,避免把窗口头部那根也当成当前的新高。第三层加入最小间隔,要求两次极值之间至少隔开若干根,把同一段行情里的重复次数压下来。
{ 第三层:加最小间隔 }
自上次高价:=BARSLAST(价创新高);
隔开足够:=自上次高价>=5;
背离确认:顶向背离 AND 隔开足够;
三、两个方向对称写
向上的方向写完之后,向下的方向把 HHV 换成 LLV、把「创新高」换成「创新低」即可,结构完全对称。建议两段分开命名,不要共用同一个变量名,否则同一根上后一次赋值会覆盖前一次。
{ 向下方向的对称写法 }
价低:=LLV(LOW,30);
指低:=LLV(指标线,30);
价创新低:=LOW=价低;
指创新低:=指标线=指低;
底向背离:价创新低 AND NOT(指创新低);
两个方向共用同一个窗口参数时,参数一旦调整,两边结论同时变化。如果只关心其中一个方向,把另一个方向的窗口单独参数化,避免互相牵连。同一段算式同时输出两个方向的判定时,把两行分别命名并分别配色,读图时不必回头翻代码就知道哪条线对应哪个方向。
四、参数变化带来的结论漂移
写通达信背离指标公式时,窗口长度是这个算式里最敏感的一处。窗口取 20 与取 60,同一段走势上判定出来的背离根数可以差出若干根,而两边的算式都没有错,它们回答的是不同长度下的问题。
指标线本身的参数也会带来同样的效果。以两条 EMA 之差作为指标线时,EMA 的周期决定了指标线的平滑程度,平滑度越高、创新高的机会越少,判定出的背离就越容易在长窗口里出现。所以看到一段背离在图上出现得很密集,先别急着改算式,先确认窗口与指标参数是不是自己想要的组合。
五、与未来函数的关系
用 ZIG、PEAK、TROUGH 这类函数做背离判定会得到完全不同的性质。这些函数在计算当前根时会引用之后的极值来确定转折点,因而它们给出的背离位置在事后看非常整齐,在当下并不知道。这类写法不属于本文讨论的范围,判定标准与上面三层写法也不通用。
要判断一段背离算式是否引用了未来数据,可以把最后若干根临时删掉再重算,看历史区间上的判定结果有没有变化。变化了就说明采用了未来信息,历史区间上的整齐程度不能作为有效性的依据。
六、失效场景
- 新股与长期停牌的品种。窗口起点不足,两侧极值都取不满,判定结果不可信。
- 涨跌幅限制到位的连续根。价格序列本身被截断,新高的定义退化成「等于上限」,两侧同步性失去意义。
- 除权前后。价格序列存在跳空缺口,窗口极值跨过除权日时会指向错误的根。
这几类场景的共同点是数据的形态本身就变了,算式没有变化,但输入不再是它假设的那种序列。把这些情形在公式描述栏里记下来,比在图上反复确认省事。跨品种使用同一段背离算式时,还要确认各品种的交易日历是否一致,节假日的差异会让窗口覆盖的实际时间跨度不同。
七、验证顺序
- 把指标线单独挂到副图,确认其取值与参数和预期一致,再开始写判定。
- 用第一层写法跑一遍,在图上逐根对照判定为真的位置,确认它们确实是价格新高而指标未新高。
- 逐层加严,每加一层记录判定根数的变化,变化幅度过大就回退一层。
- 把图表的最后若干根截掉重算,确认历史判定结果不发生变化。
回到最初的问题:一段背离算式真正需要写清楚的,是它比较了哪两根上的哪两个取值。这部分写明白,剩下的工作只是窗口与参数的选择。形态类判定的其他写法,见 量价形态与信号拆解 一栏;指标线本身的参数口径,见 指标原理与参数 一栏;判定结果是否可靠的验证方式,见 指标回测与风险验证 一栏。
文中函数名与语法按通达信 PC 版公式系统的常见形态描述;不同版本与券商定制版在函数集合、序列取值上限与未来数据判定上存在差异,具体请以你所用客户端帮助文档为准。本文只讨论公式判定机制,不构成任何投资建议。
