ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

三背离共振公式:MACD+KDJ+RSI多指标背离共振选股策略

三背离共振公式:MACD+KDJ+RSI多指标背离共振选股策略 1. 三背离共振的底层逻辑与设计初衷1.1 为什么单指标背离经常“骗线”做技术分析的朋友都有过这种经历MACD出现底背离了兴冲冲进场结果股价继续创新低指标却继续背离反复几次止损下来心态直接崩掉。问题不在于背离这个工具本身而在于单一指标的背离信号太容易被短期波动干扰。MACD的计算基于两条均线对价格变化的敏感度中等但在震荡市里DIF和DEA频繁交叉背离信号会密集出现其中相当一部分是无效的。KDJ的问题恰恰相反它太敏感了。J值可以在超买超卖区反复钝化价格稍微一反弹KDJ就金叉向上但价格可能只是下跌中继。RSI相对中庸但单独使用时背离的确认周期较长容易错过最佳介入点。我自己的体会是单一指标的背离本质上只是一个“警告信号”告诉你当前趋势的动能可能在衰减但它不负责告诉你趋势是否真的会反转。真正有意义的反转往往是多个维度的动能同时出现衰减形成共振。这就是三背离共振公式的核心设计思路——用MACD、KDJ、RSI三个不同维度的指标同时检测背离信号只有三者共振时才认为反转概率足够高。1.2 三指标背离共振的数学含义从数学角度理解MACD背离反映的是中期趋势动能的衰减KDJ背离反映的是短期超买超卖状态的修正需求RSI背离反映的是价格变化速率的放缓。三者分别对应趋势、摆动、动量三个维度当这三个维度同时发出背离信号时意味着市场在多个时间尺度和多个计算逻辑下都出现了“力竭”迹象。这就像一个人跑步MACD看的是他整体配速是否在下降KDJ看的是他当前步频是否已经乱掉RSI看的是他心率变化是否在放缓。三个信号同时出现说明他确实跑不动了而不是偶尔调整一下呼吸。公式中引入BARSLAST函数是为了量化“背离形成的时间窗口”。BARSLAST返回上一次条件成立到当前的周期数用它来限定背离信号的有效时间范围避免一个很久之前的背离信号被反复引用。比如我们可以设定“MACD背离发生在最近30个周期内”这样就能过滤掉那些已经失效的老信号。1.3 公式的整体架构设计整个公式的架构分为四层第一层基础指标计算。分别计算MACD的DIF、DEA、MACD柱KDJ的K、D、J值RSI的6日、12日、24日值。这些是后续背离判断的数据基础。第二层背离条件定义。分别定义MACD底背离、KDJ底背离、RSI底背离的条件。底背离的核心逻辑是价格创新低但指标不创新低。第三层共振判断。将三个背离条件进行逻辑与运算同时用BARSLAST限定各自背离发生的时间窗口确保三个背离信号在相近的时间内出现。第四层信号输出与过滤。输出最终的共振信号并加入一些过滤条件比如排除ST股、排除停牌、排除上市时间过短的股票等。这个架构的好处是模块化每个指标的计算和背离判断相互独立方便后续单独调整参数或替换指标。比如你觉得KDJ太敏感可以换成WR指标只需要修改第二层的对应模块即可。2. 核心指标计算与背离条件拆解2.1 MACD背离的精确判定方法MACD底背离的标准定义是价格创出近期新低但DIF值或MACD柱值没有创出近期新低。在实际编写公式时有两种常见的实现方式方式一基于DIF值的背离{ 计算MACD } DIF:EMA(CLOSE,12)-EMA(CLOSE,26); DEA:EMA(DIF,9); MACD:(DIF-DEA)*2; { 寻找价格低点 } LOW_PRICE:LLV(LOW,30); { 寻找DIF低点 } LOW_DIF:LLV(DIF,30); { 底背离条件价格创新低但DIF未创新低 } MACD_DIVERGE:LOWLLV(LOW,30) AND DIFLLV(DIF,30) AND DIF0;这里的关键在于LLV函数的周期选择。30周期是我经过反复测试后觉得比较均衡的参数。周期太短比如20周期背离信号出现太频繁假信号多周期太长比如60周期信号太少而且滞后严重。30周期大致对应一个半月左右的交易日既能捕捉中期背离又不至于太迟钝。方式二基于MACD柱值的背离{ 基于MACD柱的底背离 } MACD_BAR:MACD; LOW_BAR:LLV(MACD_BAR,30); MACD_BAR_DIVERGE:LOWLLV(LOW,30) AND MACD_BARLLV(MACD_BAR,30) AND MACD_BAR0;两种方式各有优劣。基于DIF的背离更稳定但信号较少基于MACD柱的背离更敏感但假信号也更多。我个人的做法是两者取或即只要DIF背离或MACD柱背离任一成立就认为MACD维度出现了背离。这样可以在稳定性和灵敏度之间取得平衡。注意MACD背离判断中DIF或MACD柱必须处于零轴下方否则背离的意义不大。零轴上方的背离往往是中继整理而非趋势反转。2.2 KDJ背离的钝化处理技巧KDJ的背离判断比MACD更复杂因为KDJ有超买超卖区的钝化问题。在极端行情中KDJ可以在低位反复钝化价格继续下跌KDJ却一直在20以下徘徊这时候单纯看K值或D值是否创新低意义不大。我的处理方式是用J值来判断背离同时加入钝化过滤条件。{ 计算KDJ } 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; { KDJ底背离价格创新低但J值未创新低 } KDJ_DIVERGE:LOWLLV(LOW,30) AND JLLV(J,30) AND J20;这里J20是钝化过滤条件确保背离发生在超卖区。如果J值在50附近出现所谓的“背离”那大概率只是正常波动不具备反转意义。另外KDJ背离还有一个细节J值的波动幅度远大于K和D所以用J值判断背离时容易出现“J值稍微反弹一点就算背离”的情况。为了过滤这种噪音我加了一个幅度条件{ J值反弹幅度至少达到前次低点的10% } KDJ_DIVERGE:LOWLLV(LOW,30) AND JLLV(J,30)*1.1 AND J20;这个1.1的系数是我反复调试后确定的。太小了过滤效果不明显太大了会漏掉一些有效信号。当然这个参数可以根据不同品种的波动特性微调比如创业板股票波动大可以调到1.15。2.3 RSI背离的周期选择与参数优化RSI的背离判断相对直接但周期选择很关键。常用的RSI周期有6日、12日、24日。6日太敏感24日太迟钝12日是我认为最适合做背离判断的周期。{ 计算RSI } RSI12:SMA(MAX(CLOSE-REF(CLOSE,1),0),12,1)/SMA(ABS(CLOSE-REF(CLOSE,1)),12,1)*100; { RSI底背离价格创新低但RSI未创新低 } RSI_DIVERGE:LOWLLV(LOW,30) AND RSI12LLV(RSI12,30) AND RSI1235;RSI1235是超卖区过滤条件。RSI在35以下才算进入超卖区此时出现的背离才具有反转意义。如果RSI在50以上出现背离那往往是上涨中继而不是底部反转。还有一个细节RSI背离的确认需要价格创出至少两个低点。也就是说当前低点必须低于前一个低点同时RSI的当前值高于前一个低点对应的RSI值。这个逻辑用LLV函数实现时需要确保LOWLLV(LOW,30)成立即当前价格确实是30周期内的最低点。2.4 BARSLAST在背离时间窗口中的应用BARSLAST函数是通达信公式中非常实用的一个函数它返回上一次条件成立到当前的周期数。在三背离共振公式中我用它来限定各个背离信号的有效时间窗口。{ 计算各背离信号发生到当前的周期数 } MACD_BARS:BARSLAST(MACD_DIVERGE); KDJ_BARS:BARSLAST(KDJ_DIVERGE); RSI_BARS:BARSLAST(RSI_DIVERGE); { 共振条件三个背离都在最近20个周期内出现 } RESONANCE:MACD_BARS20 AND KDJ_BARS20 AND RSI_BARS20;为什么是20个周期因为三个指标的敏感度不同MACD最迟钝RSI最敏感。在实际走势中往往是RSI先出现背离然后KDJ跟上最后MACD才确认。三个信号之间的时间差通常在5到15个周期之间。设定20个周期的窗口既能容纳这个时间差又不会把太久之前的信号拉进来。如果窗口设得太小比如10个周期可能会漏掉一些信号因为MACD背离往往滞后。如果设得太大比如30个周期又会引入太多噪音把一些不相关的背离信号组合在一起。提示BARSLAST在通达信中的返回值是周期数如果条件从未成立过返回的是一个很大的值。所以在实际使用中需要确保至少有一次背离信号出现过否则RESONANCE永远不会成立。3. 完整公式源码与逐段注释3.1 基础指标计算模块{ 基础指标计算 } { MACD计算 } DIF:EMA(CLOSE,12)-EMA(CLOSE,26); DEA:EMA(DIF,9); MACD:(DIF-DEA)*2; { KDJ计算 } 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; { RSI计算 } RSI12:SMA(MAX(CLOSE-REF(CLOSE,1),0),12,1)/SMA(ABS(CLOSE-REF(CLOSE,1)),12,1)*100;这一段是公式的基础计算了MACD、KDJ、RSI三个指标的核心数值。需要注意的是通达信的EMA和SMA函数与标准数学定义略有不同SMA(X,N,M)中的M是权重参数通常取1。EMA是指数移动平均对近期数据赋予更高权重。3.2 背离条件定义模块{ 背离条件定义 } { 价格低点判断 } LOW_30:LLV(LOW,30); { MACD底背离 } MACD_DIVERGE:LOWLOW_30 AND DIFLLV(DIF,30) AND DIF0; { KDJ底背离 } KDJ_DIVERGE:LOWLOW_30 AND JLLV(J,30)*1.1 AND J20; { RSI底背离 } RSI_DIVERGE:LOWLOW_30 AND RSI12LLV(RSI12,30) AND RSI1235;这里有一个细节需要注意LOWLOW_30这个条件在通达信中判断的是“当前最低价等于30周期内的最低价”也就是当前K线创出了30周期新低。这个条件在下跌趋势中会连续多根K线成立因为价格可能连续创新低。这会导致背离信号在下跌过程中反复出现。为了解决这个问题我通常会加一个“首次创新低”的判断{ 首次创新低当前最低价是30周期最低但前一根不是 } FIRST_LOW:LOWLOW_30 AND REF(LOW,1)REF(LOW_30,1);然后用FIRST_LOW替代LOWLOW_30这样可以确保背离信号只在价格首次创出新低时触发避免在连续下跌中反复发出信号。3.3 共振判断与信号输出模块{ 共振判断 } { 各背离信号到当前的周期数 } MACD_BARS:BARSLAST(MACD_DIVERGE); KDJ_BARS:BARSLAST(KDJ_DIVERGE); RSI_BARS:BARSLAST(RSI_DIVERGE); { 共振条件三个背离都在最近20个周期内出现 } RESONANCE:MACD_BARS20 AND KDJ_BARS20 AND RSI_BARS20; { 信号输出 } XG:RESONANCE AND FIRST_LOW;最后一行XG:RESONANCE AND FIRST_LOW是选股输出条件。XG是通达信选股公式的标准输出变量名冒号表示输出。这个条件的意思是三个背离信号都在最近20个周期内出现并且当前K线是首次创出30周期新低。3.4 副图显示与图标标记如果要在副图上显示背离信号可以用DRAWTEXT或DRAWICON函数{ 副图显示 } DRAWTEXT(XG,LOW*0.98,三背离共振),COLORRED; DRAWICON(XG,LOW*0.96,1);DRAWICON的第三个参数是图标编号1号图标通常是一个向上的箭头。通达信的图标编号可以在公式编辑器的“插入图标”功能中查看。注意副图显示和选股公式需要分开写。选股公式中不能包含DRAWTEXT、DRAWICON等绘图函数否则无法通过编译。建议把核心逻辑写在一个公式中然后分别建立选股公式和副图指标选股公式只保留XG输出副图指标加上绘图函数。4. 参数调优与实战避坑指南4.1 不同市场环境下的参数调整三背离共振公式的参数不是一成不变的。在牛市、熊市、震荡市中最优参数差异很大。下面是我在不同市场环境下测试得出的参数建议市场环境LLV周期BARSLAST窗口J值过滤RSI过滤信号频率牛市回调2015J30RSI40较高熊市反弹4025J15RSI30较低震荡市3020J20RSI35中等极端行情5030J10RSI25极低牛市回调中市场整体向上背离信号出现后反转概率高可以适当放宽条件增加信号频率。熊市反弹中市场整体向下背离信号容易失败需要收紧条件只做最确定的信号。震荡市中用默认参数即可。我自己的习惯是在公式中加一个市场环境判断模块根据大盘指数的走势自动切换参数。比如用上证指数的20日均线判断均线向上时用牛市参数均线向下时用熊市参数均线走平时用震荡市参数。{ 市场环境判断 } INDEX_MA20:MA(INDEXC,20); BULL_MARKET:INDEXCINDEX_MA20; BEAR_MARKET:INDEXCINDEX_MA20;然后在背离条件中根据市场环境动态调整参数。这个做法稍微复杂一些但实战效果明显更好。4.2 常见误判场景与过滤方法即使三背离共振也不是100%准确。以下几种情况需要特别警惕第一种除权除息导致的假背离。如果股票在近期有除权除息价格会出现跳空导致LLV判断出现偏差。解决方法是在公式中加入复权判断或者直接用前复权数据。第二种停牌复牌后的假背离。停牌期间指标停止计算复牌后价格跳空容易触发假信号。解决方法是用BARSCOUNT函数判断上市时间或者用DYNAINFO函数判断是否停牌。第三种ST股票的假背离。ST股票波动特性与正常股票不同背离信号可靠性低。解决方法是在选股时排除ST股票{ 排除ST股票 } NOT_ST:IF(NAMELIKE(ST),0,1); NOT_ST2:IF(NAMELIKE(*ST),0,1); XG:FINAL_SIGNAL AND NOT_ST AND NOT_ST2;第四种新股上市初期的假背离。新股上市初期波动极大指标计算不稳定。解决方法是用BARSCOUNT(CLOSE)60判断上市时间超过60个交易日。4.3 信号确认与仓位管理三背离共振信号出现后不要急于满仓进场。我的做法是分两步确认第一步信号出现当天观察尾盘是否企稳。如果尾盘价格回升收盘价高于当日均价说明有资金承接可以轻仓试探。第二步信号出现后第二天观察是否出现放量阳线。如果第二天放量上涨突破前一日高点说明反转确认可以加仓。仓位管理上我通常把资金分成三份信号出现当天进一份第二天确认后进第二份如果后续突破关键均线如20日均线再进第三份。这样既能抓住机会又能控制风险。提示三背离共振信号在周线级别上的可靠性远高于日线级别。如果日线出现信号但周线仍在下跌趋势中建议只做短线反弹不要重仓。如果周线也出现背离或企稳信号可以中线持有。4.4 公式的局限性与补充工具任何公式都有局限性三背离共振也不例外。它的主要局限在于滞后性背离信号本身是滞后指标信号出现时价格往往已经反弹了一段。钝化风险在极端单边行情中指标可以在超卖区长期钝化背离信号反复出现但价格继续下跌。参数依赖不同品种、不同周期的最优参数不同需要手动调整。为了弥补这些局限我通常会结合以下工具成交量背离信号出现时如果成交量萎缩到地量水平反转概率更高。K线形态如锤子线、启明星、双底等形态与背离信号共振时可靠性更高。支撑阻力位如果背离信号出现在重要支撑位附近反转概率更高。这些工具不能替代三背离共振公式但可以作为辅助确认手段提高信号的可靠性。5. 公式移植与多平台适配5.1 从通达信到其他平台的移植要点三背离共振公式的核心逻辑是通用的但不同平台的函数名称和语法有差异。移植时需要注意以下几点函数通达信同花顺东方财富说明指数移动平均EMAEMAEMA基本一致移动平均SMASMASMA权重参数可能不同最低值LLVLLVLLV基本一致最高值HHVHHVHHV基本一致上一次条件成立BARSLASTBARSLASTBARSLAST基本一致条件判断IFIFIF基本一致大部分函数在不同平台上的名称是一致的主要差异在于SMA函数的权重参数。通达信的SMA(X,N,M)中M是权重同花顺的SMA可能没有这个参数。移植时需要根据目标平台的文档调整。5.2 用Python复现三背离共振逻辑如果要在Python中复现这个公式可以用pandas和numpy来实现。核心代码如下import pandas as pd import numpy as np def calculate_macd(close, fast12, slow26, signal9): ema_fast close.ewm(spanfast, adjustFalse).mean() ema_slow close.ewm(spanslow, adjustFalse).mean() dif ema_fast - ema_slow dea dif.ewm(spansignal, adjustFalse).mean() macd (dif - dea) * 2 return dif, dea, macd def calculate_kdj(high, low, close, n9, m13, m23): low_n low.rolling(windown).min() high_n high.rolling(windown).max() rsv (close - low_n) / (high_n - low_n) * 100 k rsv.ewm(alpha1/m1, adjustFalse).mean() d k.ewm(alpha1/m2, adjustFalse).mean() j 3 * k - 2 * d return k, d, j def calculate_rsi(close, period12): delta close.diff() gain delta.where(delta 0, 0) loss -delta.where(delta 0, 0) avg_gain gain.ewm(alpha1/period, adjustFalse).mean() avg_loss loss.ewm(alpha1/period, adjustFalse).mean() rs avg_gain / avg_loss rsi 100 - (100 / (1 rs)) return rsi def detect_divergence(price_low, indicator, window30): price_min price_low.rolling(windowwindow).min() indicator_min indicator.rolling(windowwindow).min() diverge (price_low price_min) (indicator indicator_min) return diverge这段代码实现了MACD、KDJ、RSI的计算和背离检测。需要注意的是Python中的ewm函数与通达信的SMA在权重计算上略有差异但整体逻辑一致。实际使用时可以根据回测结果微调参数。5.3 回测验证与参数敏感性分析公式写好后一定要做回测验证。我通常用以下步骤选取样本选择不同市场环境下的股票包括牛市、熊市、震荡市每类至少20只。设定回测周期至少覆盖3年以上的数据包含完整的牛熊转换。统计信号胜率统计信号出现后5日、10日、20日的涨跌情况。参数敏感性分析调整LLV周期、BARSLAST窗口等参数观察胜率变化。根据我的回测经验三背离共振信号在以下条件下胜率最高信号出现在大盘企稳或反弹初期信号出现时成交量萎缩到地量信号出现在重要支撑位附近周线级别也出现企稳信号在这些条件下信号后20日的胜率可以达到60%以上盈亏比超过2:1。当然这只是历史回测数据不代表未来表现。注意回测时一定要用前复权数据否则除权除息会导致价格跳空影响背离判断的准确性。通达信下载数据时可以选择前复权Python中可以用baostock或akshare获取前复权数据。6. 实战案例拆解与经验总结6.1 一个完整的信号触发过程以某只消费股为例2023年10月到11月期间该股经历了一波下跌。10月中旬RSI12率先跌破35出现底背离信号。随后KDJ的J值跌破20也出现背离。最后MACD的DIF在零轴下方出现背离。三个信号在15个周期内先后出现触发三背离共振。信号出现当天该股收盘价创出30周期新低但成交量萎缩到前期高点时的三分之一。第二天该股放量上涨突破前一日高点确认反转。随后该股在20个交易日内反弹了约25%。这个案例中三背离共振信号提前约3个交易日发出了预警给了充足的准备时间。如果只等第二天放量确认再进场虽然少赚了一些但确定性更高。6.2 失败案例的复盘与教训不是所有信号都能成功。2023年8月某只科技股出现三背离共振信号但随后股价继续下跌了15%。复盘发现当时大盘正处于加速下跌阶段市场整体情绪极度悲观个股的背离信号被系统性风险淹没。这个教训告诉我三背离共振信号必须结合大盘环境使用。如果大盘处于加速下跌阶段任何个股的背离信号都要谨慎对待。我后来在公式中加了一个大盘过滤条件{ 大盘过滤上证指数20日均线向上或走平 } INDEX_MA20:MA(INDEXC,20); INDEX_FILTER:INDEXCINDEX_MA20 OR INDEX_MA20REF(INDEX_MA20,1); XG:FINAL_SIGNAL AND INDEX_FILTER;这个过滤条件可以过滤掉大部分大盘加速下跌阶段的假信号。6.3 我个人的使用心得用了几年这个公式最大的体会是背离信号是“必要不充分条件”。它告诉你下跌动能在衰减但不告诉你什么时候会反转。所以信号出现后不要急于进场要等价格确认。另外不同品种的背离信号可靠性差异很大。大盘蓝筹股的背离信号可靠性高因为参与资金多指标不易被操纵。小盘股的背离信号可靠性低因为少量资金就能影响价格指标容易失真。最后背离信号在周线级别上的可靠性远高于日线。如果日线和周线同时出现背离那才是真正值得重仓的机会。日线单独出现背离只适合短线操作。这个公式后续还可以扩展比如加入成交量背离、OBV背离等形成更多维度的共振。但维度越多信号越少需要根据自己的交易频率和风格来平衡。
返回列表