
1. 三背离共振的底层逻辑与设计初衷1.1 为什么单指标背离经常“骗线”做技术分析的朋友大概率都遇到过这种情况价格创了新低MACD 绿柱明显缩短DIFF 线也拐头向上了你兴冲冲抄底进去结果价格再下一个台阶指标继续钝化止损被打掉。这不是你运气差而是单一指标的背离信号本身就存在较高的假信号率。背离的本质是“价格与动能之间的不同步”。价格在走极端但推动这个极端的力度在衰减。问题在于不同指标对“动能”的定义完全不同MACD 看的是均线系统的乖离与收敛KDJ 看的是收盘价在近期高低区间中的相对位置RSI 看的是上涨幅度与下跌幅度的比值。三者视角不同单独拿出来任何一个都可能在震荡市或者趋势加速段里给出错误信号。我自己的统计习惯是在日线级别上单纯 MACD 底背离的次日反弹成功率大概在五成出头加上 KDJ 和 RSI 同时出现背离这个数字能明显往上抬一截。这就是“共振”两个字的全部意义——用三个独立视角的交叉验证把假信号过滤掉。1.2 三背离共振到底在找什么形态所谓三背离共振指的是在同一段价格走势中MACD、KDJ、RSI 三个指标同时出现与价格方向相反的信号。以底部为例价格创出两个或更多依次降低的低点而三个指标对应的低点却是依次抬高的。顶部则反过来。这里有个容易被忽略的细节三个指标的背离不一定发生在同一根 K 线上。实战中更常见的是MACD 先出现背离隔几根 K 线后 KDJ 跟上再过几根 RSI 才确认。如果要求三者严格在同一根 K 线共振信号会少得可怜实战价值大打折扣。所以公式设计上通常采用“在最近 N 根 K 线内三者都曾出现过背离”这种宽松共振逻辑而不是“同一根 K 线三者同时背离”。1.3 用 BARSLAST 定位背离点的核心思路BARSLAST 是通达信里一个非常实用的函数作用是“返回上一次条件成立到当前的周期数”。举个例子BARSLAST(CROSS(MA5,MA10))返回的就是上一次 5 日线上穿 10 日线距离现在有多少根 K 线。在三背离公式里BARSLAST 承担的是“时间锚点”的角色。我们要找的是“上一次指标低点”和“上上次指标低点”分别在哪然后比较这两个低点对应的价格位置。没有 BARSLAST你就得用循环或者复杂的引用去回溯代码会变得又长又难维护。有了它几行就能把“两个低点之间的时间距离”和“价格距离”都算清楚。提示BARSLAST 返回的是“距离当前”的周期数所以数值越大代表那个事件发生得越早。比较两个 BARSLAST 的大小时别搞反了方向。2. 公式核心模块拆解与参数设定2.1 MACD 背离模块的写法与参数选择先看 MACD 部分。通达信自带的 MACD 公式是DIFF:EMA(CLOSE,12)-EMA(CLOSE,26)DEA:EMA(DIFF,9)MACD:2*(DIFF-DEA)。做背离判断时我一般不看柱状线而是直接看DIFF 线或者MACD 柱的面积。DIFF 线更平滑假信号少一些。底背离的判定逻辑是价格创出更低的低点但 DIFF 线的低点比上一次高。用代码表达大致是这样{ MACD 底背离 } DIF:EMA(CLOSE,12)-EMA(CLOSE,26); DEA:EMA(DIF,9); { 找价格低点 } LOW1:LLV(LOW,20); { 上一次价格低点距今天数 } T1:BARSLAST(LOWLOW1); { 上上次价格低点 } LOW2:REF(LLV(LOW,20),T11); T2:BARSLAST(REF(LOW,1)LOW2); { 价格创新低但 DIF 抬高 } MACD_DIV:LOW1LOW2 AND REF(DIF,T1)REF(DIF,T2);这段代码里T1和T2就是通过 BARSLAST 拿到的两个时间锚点。注意REF(DIF,T1)取的是“上一次价格低点那根 K 线对应的 DIF 值”而不是当前 DIF。很多人写错就错在这里直接拿当前 DIF 去比那比出来的是“现在和过去”不是“两个低点之间”。参数方面20 周期的 LLV 是我常用的窗口。太短了比如 10会频繁触发太长了比如 60信号稀少且滞后。12/26/9 是 MACD 的经典参数不建议随意改因为改了之后 DIFF 的形态会变背离的判定基准也跟着变除非你有完整的回测数据支撑。2.2 KDJ 背离模块反推与钝化处理KDJ 的背离比 MACD 更敏感也更容易钝化。通达信默认 KDJ 参数是 9,3,3公式为RSV:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; K:SMA(RSV,3,1); D:SMA(K,3,1); J:3*K-2*D;做背离时我主要看K 值或者J 值。J 值波动大信号多但噪音也多K 值相对稳。底背离的写法和 MACD 类似把 DIF 换成 K 即可。但 KDJ 有个特殊问题在极端行情下K 值会长时间贴在 0 或 100 附近这时候的“低点抬高”可能只是钝化造成的假象。我的处理办法是加一个钝化过滤只有当 K 值在两个低点之间曾经回到过 20 以上底部或 80 以下顶部才认为背离有效。代码上可以用COUNT(K20,T1-T2)0这类条件来约束。这个细节很多公开公式里没有但实战中能过滤掉不少无效信号。2.3 RSI 背离模块与周期匹配RSI 默认参数是 6,12,24。做背离我一般用RSI6因为它对价格变化最敏感和 KDJ 的节奏比较接近。如果用 RSI12 或 RSI24信号会明显滞后和三背离的“共振窗口”对不上。RSI6:SMA(MAX(CLOSE-REF(CLOSE,1),0),6,1)/SMA(ABS(CLOSE-REF(CLOSE,1)),6,1)*100;RSI 底背离的判定和前面两个一样价格低点降低RSI6 低点抬高。这里要注意的是RSI 在 30 以下和 70 以上的区域背离的可靠性更高。如果 RSI 在 50 附近晃悠时出现所谓的“背离”那大概率只是正常波动不值得参与。2.4 三指标共振窗口的设定三个指标各自算出背离信号后最后一步是判断它们是否“共振”。我用的逻辑是在最近 10 根 K 线内MACD 背离、KDJ 背离、RSI 背离都至少出现过一次。RESONANCE:COUNT(MACD_DIV,10)0 AND COUNT(KDJ_DIV,10)0 AND COUNT(RSI_DIV,10)0;10 这个窗口不是拍脑袋定的。太小比如 3会导致共振机会极少太大比如 20又会把不同波段的信号混在一起。我回测过 5、10、15、20 几个值10 在日线级别上的信号数量和胜率平衡得最好。当然如果你做的是 30 分钟或 60 分钟级别这个窗口可以适当缩小到 6-8。3. 完整源码实现与逐行注释3.1 主图/副图公式的完整代码下面是我整理的一版完整副图公式可以直接粘贴到通达信的公式编辑器里。代码里保留了必要的注释方便你按自己的习惯改参数。{ 三背离共振副图公式 } { 参数N120 价格低点窗口N210 共振窗口 } N1:20; N2:10; { MACD 部分 } DIF:EMA(CLOSE,12)-EMA(CLOSE,26); DEA:EMA(DIF,9); LOW1:LLV(LOW,N1); T1:BARSLAST(LOWLOW1); LOW2:REF(LLV(LOW,N1),T11); T2:BARSLAST(REF(LOW,1)LOW2); MACD_DIV:LOW1LOW2 AND REF(DIF,T1)REF(DIF,T2) AND T10 AND T2T1; { KDJ 部分 } RSV:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; K:SMA(RSV,3,1); D:SMA(K,3,1); K1:LLV(K,N1); KT1:BARSLAST(KK1); K2:REF(LLV(K,N1),KT11); KT2:BARSLAST(REF(K,1)K2); KDJ_DIV:K1K2 AND LOW1LOW2 AND KT10 AND KT2KT1; { RSI 部分 } RSI6:SMA(MAX(CLOSE-REF(CLOSE,1),0),6,1)/SMA(ABS(CLOSE-REF(CLOSE,1)),6,1)*100; R1:LLV(RSI6,N1); RT1:BARSLAST(RSI6R1); R2:REF(LLV(RSI6,N1),RT11); RT2:BARSLAST(REF(RSI6,1)R2); RSI_DIV:R1R2 AND LOW1LOW2 AND RT10 AND RT2RT1; { 共振判定 } RESONANCE:COUNT(MACD_DIV,N2)0 AND COUNT(KDJ_DIV,N2)0 AND COUNT(RSI_DIV,N2)0; { 输出 } STICKLINE(RESONANCE,0,1,2,0),COLORRED; DRAWTEXT(RESONANCE,0.5,三背离共振),COLORYELLOW;3.2 关键变量的含义与调试方法这段代码里有几个变量值得单独说清楚T1和T2分别代表“最近一次价格低点”和“上一次价格低点”距离当前的周期数。正常情况下T2 T1因为上一次的低点肯定比最近一次的低点发生得更早。REF(DIF,T1)取的是 T1 根 K 线之前的 DIF 值也就是最近一次价格低点那根 K 线上的 DIF。COUNT(MACD_DIV,N2)0表示在最近 N2 根 K 线内MACD 背离至少出现过一次。调试的时候我建议你先把RESONANCE拆开分别看MACD_DIV、KDJ_DIV、RSI_DIV三个信号单独出现的位置和 K 线图对照一下。如果发现某个信号的触发点明显不对大概率是BARSLAST的锚点取错了。这时候可以在副图上把T1、T2的值打出来看确认它们是否对应到你肉眼看到的低点位置。注意通达信的BARSLAST在条件从未成立时返回的是 0而不是一个很大的数。所以代码里我加了T10 AND T2T1这样的保护条件防止在数据不足或者条件不满足时产生错误信号。3.3 选股公式的转换要点副图公式改选股公式核心是把最后的输出条件写成XG:RESONANCE;然后去掉所有绘图函数STICKLINE、DRAWTEXT 之类。但有个坑要注意选股公式里不能用REF引用未来数据而我们的公式里REF(DIF,T1)这种写法在选股时是安全的因为 T1 是基于历史数据算出来的不涉及未来。另一个坑是选股公式对计算效率更敏感。如果你在选股时发现速度很慢可以把N1从 20 降到 15或者把共振窗口N2从 10 降到 8牺牲一点信号数量换速度。我实测下来全市场日线选股这个公式跑一遍大概在几十秒到一两分钟取决于你的电脑配置和通达信版本。4. 实战中的典型问题与排查技巧4.1 信号太多或太少怎么调这是被问得最多的问题。信号太多说明你的过滤条件太松信号太少说明太严。调整的优先级我建议是先调共振窗口 N2从 10 降到 6-8信号会明显增多升到 15-20信号会减少。再调价格低点窗口 N1从 20 降到 15低点判定更敏感升到 30低点更“大级别”。最后加过滤条件比如要求 RSI6 在背离时低于 30或者要求 MACD 的 DIF 在零轴下方。这些条件能大幅提高信号质量但也会减少数量。我自己的习惯是日线级别用 N120、N210然后额外加一个“RSI6 低点小于 30”的条件。这样出来的信号不多但每一个都值得认真看。4.2 背离钝化与“假共振”的识别钝化是背离交易最大的敌人。当价格连续下跌KDJ 的 K 值可以连续十几天贴在 10 以下RSI6 也可以一直在 20 以下趴着。这时候出现的“低点抬高”很可能只是钝化过程中的正常波动不是真正的动能衰减。识别方法有两个一是看背离发生的位置如果三个指标都还在极端区域KDJ 的 K15RSI625那这个背离的可靠性要打折扣二是看价格低点之间的时间跨度如果两个低点只隔了三四根 K 线那大概率是噪音隔了十几根甚至二十几根 K 线的背离才更有意义。我在代码里加过一个简单的过滤T1-T25也就是两个价格低点之间至少隔 5 根 K 线。这个条件能过滤掉不少短线噪音你可以根据自己的交易周期调整。4.3 不同周期下的参数适配三背离共振在日线级别上表现最稳但很多人也拿它做 60 分钟或 30 分钟。我的经验是周期N1N2额外过滤日线2010RSI63060分钟158K2030分钟126无周线3015RSI635周期越短噪音越多所以 N1 和 N2 都要相应缩小同时过滤条件可以适当放宽否则信号会少到没法用。但说实话30 分钟以下级别的三背离假信号率明显上升我一般只作为辅助参考不会单独作为入场依据。4.4 常见报错与兼容性问题通达信不同版本对函数的支持有细微差异。最常见的问题是BARSLAST在某些老版本里对REF嵌套的支持不好导致计算结果异常。如果你遇到这种情况可以把REF(LLV(LOW,N1),T11)拆成两步TMP:LLV(LOW,N1); LOW2:REF(TMP,T11);另外如果你用的是通达信的“条件选股”功能而不是“公式管理器”注意选股公式里不能有STICKLINE、DRAWTEXT、DRAWICON这些绘图函数否则会报错。把输出改成XG:RESONANCE;就行。还有一个坑是复权处理。如果你的数据没有做前复权除权除息那天的价格跳空会导致 LLV 和 BARSLAST 的计算全部错位。做背离分析一定要用前复权数据这是底线。5. 从信号到交易我的实际使用体会5.1 信号出现后怎么确认公式给出共振信号只是第一步。我从来不会在信号当天就冲进去而是等一个确认动作。底背离共振出现后我会看次日或第三日是否出现以下情况之一收盘价站上 5 日均线MACD 的 DIF 上穿 DEA金叉KDJ 的 K 值上穿 D 值。这三个确认条件满足任意一个我才认为信号有效。如果信号出现后价格继续创新低且三个指标继续钝化那就说明这个背离被“打穿”了直接放弃不抱幻想。5.2 止损与仓位的基本规则背离交易的止损位很好设以两个价格低点中较低的那个作为止损参考。比如价格低点分别是 10 元和 9.5 元你在 9.8 元附近入场止损就设在 9.5 元下方一点。这样止损幅度通常不大盈亏比容易做上去。仓位方面我自己的规则是三背离共振信号 确认动作首仓不超过总资金的 20%。如果后续价格突破前一个反弹高点再加 10%-20%。永远不满仓因为背离信号再准也有失败的时候。5.3 这个公式不适合什么行情三背离共振在震荡市和底部反转中表现最好但在单边加速下跌中会频繁失效。原因很简单单边下跌时指标会持续钝化所谓的“低点抬高”只是下跌中继的短暂停顿。识别方法是看均线系统——如果 20 日、60 日均线都在陡峭向下且价格连 5 日均线都站不上那任何底背离信号都要谨慎对待。同样在极度缩量的横盘中三背离信号也会变得很多但很杂因为价格波动太小指标在窄区间里来回穿容易产生虚假的“低点抬高”。这时候最好结合成交量过滤要求背离出现时成交量比前一个低点时的成交量有所放大。5.4 后续可以扩展的方向这个公式的框架其实可以继续往上叠。比如加入成交量背离价格创新低但成交量萎缩作为第四个共振条件加入均线过滤只在价格站上 60 日均线或者 60 日均线走平的时候才接受信号做成多周期共振日线出现三背离的同时周线也出现 MACD 背离这种信号的级别会更大。我自己目前用的是“三背离 成交量萎缩 60 日均线走平”这个组合信号数量进一步减少但每次出手的把握更大。公式这东西不是越复杂越好而是要在“信号数量”和“信号质量”之间找到适合自己交易节奏的平衡点。最后分享一个小技巧如果你觉得BARSLAST的写法太绕可以用通达信的REF配合HHVBARS和LLVBARS来替代。LLVBARS(LOW,N1)直接返回 N1 周期内最低价距离当前的天数比BARSLAST(LOWLLV(LOW,N1))更简洁而且效率更高。我后来把代码里的 BARSLAST 都换成了 LLVBARS跑选股的速度快了不少结果完全一致。