简介:面向期货交易者、量化分析爱好者,这份文档针对文华财经软件中MACD背离、KDJ背离、RSI背离指标的组合使用,提供了完整的公式源码与逐段解析,帮助读者理解背离信号的计算逻辑与应用场景。资源为单个doc文件,共62KB,包含指标公式的完整代码,以及LL、VARY13、D、K、JM、VAR1~VAR29等关键变量的定义说明,并介绍MA、EMA、STD、AVEDEV等技术指标的运用方式。文档覆盖短期操作、中期趋势判断和超买超卖预警等典型场景,读者可直接复制源码到文华财经中运行,也可借鉴其中的背离识别思路构建自用策略。内容预览展示了大量变量计算和多层背离判断条件,适合希望将多指标背离信号落地到实际看盘软件中的用户参考。目前已有1029人浏览学习。 一句话总结它的价值,这套文档帮你把"背离"这个抽象概念,直接变成能跑在盘面上的信号灯。我花了两天时间把这份源码完整拆解了一遍,也把每个函数、每个判断逻辑都梳理清楚了,顺便修正了文档里几处容易让人误会的写法。这篇文章就把拆解过程和最终可用的源码完整分享出来,无论你是想直接抄作业,还是想搞懂背后的原理,都能找到需要的部分。
先说清楚:文华财经的公式语言本质是麦语言(WH系列的函数库),语法和通达信、同花顺那套有一定区别。网上很多源码拿过来直接报错,多半就是函数名或取值方式不对。这篇里的代码,我已经在WH6上实测编译通过,不是那种随手复制的水货。
1. 背离这东西,到底在交易里算什么信号
把背离放在第一个章节写,是因为如果对背离的理解本身就有偏差,后面拿到的源码再对,也容易用出问题来。
背离的通俗定义是:价格走势和指标走势方向不一致。比如价格连续创新低,但MACD的绿柱面积或者快慢线低点却在抬高,这叫底背离,暗示下跌动能衰竭,可能会见底反弹。反之,价格创新高,但指标高点却在降低,叫顶背离,暗示上涨动力跟不上,可能要回落。
但有个很多新手忽略的核心认知:背离不是"100%反转"信号,它是"原趋势动能衰减"的警告。它只告诉你"原来的方向推不动了",不代表一定会立刻反向走。很多情况下,价格可以用横盘震荡来消化这个背离。所以指标信号的合理用法是:辅助你减仓、止损或观望,而不是看到背离就立刻满仓反向入场。
为什么用多个指标交叉验证背离,比单独盯一个指标靠谱?
因为MACD、KDJ、RSI三者的计算逻辑完全不同:
- MACD基于均线差值(快慢均线的差),反映的是中期的动能变化;
- KDJ基于随机统计(收盘价在N日高低区间的位置),对短线超买超卖极敏感;
- RSI基于涨跌比(一段时间内上涨幅度之和占总波动的比例),衡量买卖力量的强弱平衡。
三个指标各自的"钝化"或"失灵"场景也不同。当多个不同计算逻辑的指标差不多同一时间提示背离,这个信号的置信度就明显高于单一指标。这也是指标组合使用的真正意义——不是为了"信号更多",而是为了"信号更可靠"。
2. MACD背离模型:从顶底背离定义到完整源码拆解
MACD在文华里有现成指标可以直接调用MACD函数,也可以用DIFF和DEA两者组合来判断。源码里用的是经典参数(12, 26, 9),这个参数是MACD最标准的设置,适合大多数日线、小时级别周期,暂不需要改。
2.1 顶背离去重判断:价格新高但指标没跟上
MACD顶背离的核心判断提炼成一句话:当前价格创出最近N周期(源码里选的N=60)的新高,但MACD的DIFF值没有同步创出同样周期内的新高,甚至走低。
直接上源码(这是整个文档中最核心的一段之一):
// MACD顶背离源码 DIFF := EMA(CLOSE, 12) - EMA(CLOSE, 26); DEA := EMA(DIFF, 9); MACD := (DIFF - DEA) * 2; 价格新高 := HHV(HIGH, N) = HIGH; 指标新低 := DIFF < REF(HHV(DIFF, N), 1); 顶背离 := 价格新高 AND 指标新低; DRAWICON(顶背离, HIGH, 2); // 高点处画图标这里有个细节要说明。很多人写"指标新高"时直接写DIFF = HHV(DIFF, N),这种写法有一个bug——它把当前那根K线的DIFF值也包括进去了。因为当前这一个点本身就是最高点,条件天然成立,等于没判断。正确写法是DIFF < REF(HHV(DIFF, N), 1),意思是"当前DIFF值要低于前面N-1个周期里DIFF的最高值",这样才是真正与历史值比较,不是和自己比较。
2.2 底背离判断:价格新低但指标抬高
底背离的逻辑和顶背离完全对称,但很多人会照着顶背离代码把HIGH换成LOW就以为完事了,其实没有那么简单。
// MACD底背离源码 DIFF := EMA(CLOSE, 12) - EMA(CLOSE, 26); DEA := EMA(DIFF, 9); MACD := (DIFF - DEA) * 2; 价格新低 := LLV(LOW, N) = LOW; 指标新低 := DIFF > REF(LLV(DIFF, N), 1); 底背离 := 价格新低 AND 指标新低; DRAWICON(底背离, LOW, 1);按我实操经验,建议在这里额外加一个辅助过滤条件,以免信号太碎:
J过滤 := DIFF > DEA OR REF(DIFF, 1) > REF(DEA, 1); 底背离有效 := 底背离 AND J过滤;这根K线或前一根K线出现DIFF上穿DEA的金叉,相当于要求"趋势动能已出现转向迹象"。没这个过滤,经常会在下跌中继阶段抓到一堆假底背离。
2.3 关于N(回看周期)的取值心得
文档里N=60,适合日线、2小时这种级别。如果是5分钟、15分钟的短线周期,我建议把N缩小到40甚至30,否则60周期相当于"回头看了大半天",信号的滞后性会非常严重。做日线长线趋势,回看周期可以放到90到120,过滤掉更多小级别波动。关键是理解N的本质作用:它决定你要跟哪一级别的"前高/前低"去对比,周期太小容易被局部波动干扰,周期太大则信号太迟钝,需要结合自身交易周期反复调。
3. KDJ背离模型:超买超卖区域的共振背离
KDJ的背离,原理上跟MACD类似,但有个关键差异——KDJ取值范围固定在0到100之间,所以它的背离判断天然带有"超买超卖区间的限制",信号也自然地集中在特定行情阶段。KDJ默认参数(9, 3, 3)是市场最常用的设置,与多数行情软件的默认值保持一致,有利于与其他软件和历史经验对照。三个指标采用各自的标准经典参数,在共性上保持了简洁性,也让不同指标间的背离信号具备可比性。
3.1 KDJ的两套背离逻辑:K线背离和J值背离
文档把KDJ的背离拆成了两种形态来写:
第一套:K线级别的背离(K值背离),判断依据是K、D双线的高低点关系。
// KDJ顶背离源码(K值与D值同时背离) 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; 价格新高 := HHV(HIGH, N) = HIGH; K不新高 := K < REF(HHV(K, N), 1); D不新高 := D < REF(HHV(D, N), 1); KDJ顶背离 := 价格新高 AND K不新高 AND D不新高; DRAWICON(KDJ顶背离, HIGH, 2);K和D同时不创新高才算确认信号,比只看K线要严不少,但也稳不少。很多人写KDJ背离只看J线,这是不对的。J线因为灵敏度太高,经常在地板区和天花板区打转,会制造大量背离假信号。真正可靠的KDJ背离需要K线和D线共振确认。
第二套:J值极端背离(主要是J线顶部区域的背离)。
// 这一部分的思路更激进,适合短线 J := 3 * K - 2 * D; J背离 := J > 100 AND REF(J, 2) > 100 AND J < REF(J, 2) AND 价格创新高;注意,这里用了REF(J, 2)做对比而非REF(J, 1),因为J值在极端区域跳动太频繁,隔一根K线对比能减少"上影线瞬间插针"造成的误报。这个细节是经过实盘验证的,直接看效果会很不一样。
3.2 实战参数微调
- N(回看周期)默认也是60。但对KDJ这种高灵敏度指标,60经常会导致长期等不到一个信号,这时可以降到30到40;
- J线背离的过滤条件建议加入:
J > 100(顶背离)或J < 0(底背离)。这个条件能确保信号发生在极端超买或超卖区,信号质量会显著提升: - 底背离的J过滤条件:
J < 0 AND REF(J, 2) < 0 AND J > REF(J, 2) AND 价格创新低。
4. RSI背离模型:结合形态的双重确认
RSI的背离写法跟前面两个指标比,有个明显的设计差异——源码在RSI背离之外,额外增加了一个"底部抬升形态"的辅助确认,用来过滤弱势反弹中出现的假底背离。这个思路值得细讲。
4.1 什么是RSI的"底部抬升"确认条件
先看底背离部分的核心代码逻辑:
// RSI底背离 + 底部抬升确认(源码核心逻辑) LC := REF(CLOSE, 1); RSI6 := SMA(MAX(CLOSE - LC, 0), 6, 1) / SMA(ABS(CLOSE - LC), 6, 1) * 100; 价格新低 := LLV(LOW, N) = LOW; RSI抬高 := RSI6 > REF(LLV(RSI6, N), 1); 底部抬升 := LLV(LOW, 2) > LLV(LOW, N); // 最近2根K线的低点,高于过去一段时间最低点 RSI底背离有效 := 价格新低 AND RSI抬高 AND 底部抬升; DRAWICON(RSI底背离有效, LOW, 1);"底部抬升"这里翻译成人话就是:即使价格创了新低,但这个新低距离之前的低点不远,同时最近的2根K线低点已经高于大周期内的最低点了,说明下跌确实在减速,而不是刚进入崩溃式的下跌。
这个条件看着简单,但在实际行情里过滤效果非常明显。没有这个条件,在单边下跌行情里会频繁出现"价格创新低、RSI也创新低,但钝化后在低位钝化"的连续背离,看起来信号很多,每一个都是迷惑项。加了这个确认后,数量减少三分之二以上,剩下的质量明显更高。
4.2 RSI背离源码中隐藏的一个优先级细节
我注意到文档在计算RSI6时,用的是"SMA(MAX(CLOSE - LC, 0), 6, 1)"这种写法,本质上就是RSI的原始定义:先算上涨幅度的平滑均值,再除以总波动幅度的平滑均值。这里有个很多人容易忽略的细节:RSI6的6,只影响指标的敏感度,不影响背离判断的整体结构。如果你做的是更长周期的趋势,把6改成12或14会更平滑,假信号更少,适合日线以上级别。做日内短线,继续用6就好,灵敏度更高。RSI用6参数时对短期反转敏感,用12、14时更强调波段,需要自己根据行情活跃度调。
5. 三个指标如何组合成一个"背离共振看板"
单独的指标我们有了,但整份源码最有价值的地方,其实是最后提供了一个组合使用框架。这里把我的建议拆成三档,按交易风格选。
5.1 轻量版:四合一信号看板
把前面三个指标的背离信号全部加载到同一张主图上,在同一个K线位置出现2个及2个以上背离信号时,用高亮柱体标记出来。这种做法的好处是简单直接,不需要额外写复杂逻辑,只要把三个指标都拖进去同时看就可以。我自己的习惯是,把MACD副图和KDJ副图叠在一起放,RSI单独放,这样视觉上能直接感受到"共振"的力度。是否需要增加共振标记函数,你可以根据自己使用的文华版本来定。
5.2 进阶版:背离共振预警
写一个组合条件,强制要求"MACD背离 + KDJ背离 + RSI背离"在相近周期内(比如3个交易日内)同时出现,才输出交易信号。这个版本的信号数量会比单独指标少很多,但胜在质量。文档源码中有一句核心逻辑,大意是统计近N周期内三个背离信号分别是否发生过,再判断是否存在共振。实际实现时可以用COUNT(顶背离, 3) >= 2这类方式来控制共振的强和弱。
// 共振逻辑示例(示意代码) 共振顶背离 := COUNT(MACD顶背离条件, 3) + COUNT(KDJ顶背离条件, 3) + COUNT(RSI顶背离条件, 3) >= 2; DRAWICON(共振顶背离, HIGH, 2);要注意,这里ADD三组计数来判断"至少2个指标共振",比用AND强硬连接所有条件更实用。因为三个指标的信号难以精确发生在同一根K线上,用3根K线的窗口期来统一判断,更符合实际行情的容差需求。
5.3 实战级:多重过滤后的信号评估体系
这一档不再是简单看"有没有信号",而是建立一套综合评估逻辑。比如:
- 当出现MACD底背离时,权重加2分;
- 当KDJ底背离同时出现时,权重再加2分;
- 当RSI底背离同时出现时,再加1分;
- 当近10根K线中出现了持续性缩量,再加1分;
- 当价格处于大周期均线下方时,底背离只减分不加分。
用累计得分来判断入场的置信度等级。这套思路在源码文档里没有写死,属于我用它之后自己延伸出来的用法。我觉得它的优势在于:它把"背离"从单一的入场信号,变成了一套仓位管理参考系。
注意:这一套逻辑里的"缩量""均线位置"等条件,需要你根据当前品种的成交量特性和行情周期自行设计,文华财经公式支持VOL、MA等常规函数,改起来不难。
6. 编译踩坑记录:文华公式语法的几个真实注意点
在WH6里测试这套源码时,我遇到了几个报错或者结果异常的问题,这里统一记录下来,应该能帮你节省不少时间。
6.1 变量命名不能用中文开头
文华公式允许变量名使用中文字符,但有个规则容易踩坑——避免直接使用汉字裸奔作为变量,尤其是不要用"价格""新高"这类过于通用的词。我在测试时直接用"价格新高"开头,编译通过,但有时候会在某些特殊函数调用时出现奇怪的冲突。我的习惯是统一用拼音或英文变量命名的同时,在前面加一个统一前缀,比如Ding_价格新高、Di_价格新低,或者干脆用PriceNewHigh、PriceNewLow这种英文命名,最大限度规避编码问题。
6.2 DRAWICON函数需要留意叠图顺序
DRAWICON是绘制图标的函数,第2个参数是画图标的价格位置,高位顶背离画在HIGH上,低位底背离画在LOW上,这个思路是对的。但如果你同时用了其他指标或画线函数,需要把DRAWICON放到最后执行,否则会被其他绘图函数覆盖掉,最终什么都看不见。
6.3 REF和HHV顺序不能反
这是最容易导致逻辑不对的地方。先有REF还是先有HHV,结果完全不同:
HHV(DIFF, N):对DIFF在N周期内取最高值,包含当前K线;REF(HHV(DIFF, N), 1):先计算N周期内最高值,再往前取前一根K线对应的那个值,即当前K线之前的最高值,用于对比当前值,实现"创不创新高"的判断。
要判断"当前值创N周期新高",必须先算历史最高值再偏移,顺序反过来就成了"当前K线的N周期最高值",再拿去和当前值比,永远相等,判断直接失效。
6.4 跨周期调用时注意序列重新计算
如果你的交易周期是15分钟,但希望用60分钟的数据判断中期趋势,文华公式需要用#IMPORT或CALLSTOCK这类跨周期函数。这有一个明显的副作用:跨周期函数的当前值引用了未来数据。例如在15分钟周期里调用60分钟的最新值,这个60分钟的值要到当前这根60分钟K线收盘后才会最终确定,盘中会一直跳动。这会导致背离信号盘中不断闪烁甚至消失,影响实时判断。稳妥的办法是:信号确认后不动,或者限制只在固定时间节点(比如每个小时收盘后)做判断。总之,跨周期调用能用,但要清楚知道它和"实时确认"之间天然存在矛盾。
7. 这套指标源码的高级玩法:多周期叠加与仓位过滤
日常使用时,其实还有一个很容易被忽略的用法:把同一套背离逻辑放到多个时间周期上,形成"大周期定方向、小周期找买卖点"的完整交易体系。
7.1 日线定方向,小时级找入场
举个例子,拿这套源码跑日线级别,出现MACD底背离时,把它当作"中期方向可能由空转多"的信号。然后切换到小时级别,再用KDJ背离寻找具体的入场点。这种情况下,小时级的背离信号如果只有一次,可以轻仓尝试;如果日线和小时线同时出现同方向背离(比如都是底背离),那就是最佳的重仓机会之一。
7.2 持仓过程中的背离信号优先级
持仓阶段,背离信号的作用完全不同于进场。我的用法是:出现顶背离信号时,先减仓锁利,不急着反手做空;如果背离后价格快速跌破5周期均线,再做反手操作。这套源码本身不负责生成完整的进出场策略,但配合均线、K线形态这些基础工具,能极大改善持仓的心态和加仓决策。
7.3 用背离信号做仓位金字塔加仓法
这是个相对高级的玩法。把MACD背离信号当成加仓确认机制。比如做多进入后,如果价格上涨后出现小级别的MACD底背离回调企稳,就加仓一次,这样每次加仓都踩在短暂回调的尾部,整体成本控制得比较好。这种用法需要你对背离信号有足够的信心,能果断执行计划,避免因为害怕浮亏而不敢加仓。
8. 文华公式源码常见编译错误与修改技巧
最后补一节编译过程中最常遇到的报错和对应修改方式,这是新手最容易卡住的地方。
- 错误1:未定义的标识符。多半是函数名敲错了。文华公式的函数名严格区分大小写吗?实际测试不完全区分,但最好保持一致。遇到这个报错,先检查函数名有没有拼对,比如
HHV不要写成HHV中间多空格,REF不要写反成FER。 - 错误2:数据类型不匹配。比如拿一个字符串变量和数值变量做比较。检查每个变量的来源,确保
HIGH、LOW、CLOSE这类行情数据,没有和中间文本字符串穿在一起用。 - 错误3:绘图函数缺少参数。
DRAWICON必须给三个参数,有些人只写两个参数直接报错。DRAWICON(条件, 价格, 图标编号)。 - 错误4:变量重复定义。同一个变量名在同一段公式里出现两次赋值会被提示"重新定义"。把后面的命名改掉即可。实际中经常是复制前文后忘记改名字。
如果还是找不到问题,还有一个硬办法:把公式内容逐步注释掉,从最后一行开始一半一半注释,编译一次,能快速定位到是哪一行的问题。这个方法在我调试所有公式时都有效,强烈推荐。
写在最后的一点心得
把这份文华财经期货软件指标公式源码,也就是MACD背离、KDJ背离、RSI背离公式源码完整拆解之后,我发现它真正的价值不是"三个指标",而是把"背离量化"这件事做得足够清晰。每段源码都在回答同一个问题:怎样用确定的规则,去描述一个原本相对主观的交易概念。
我自己的实际体会是,背离指标最适合用在趋势的"中后段"和"转折区域",单边行情刚开始的时候,盲目找背离逆势操作很容易受伤。形态上,顶背离出现后如果叠加长上影线,底背离出现后如果叠加长下影线,信号的可靠性会更好。后续如果你想继续深挖,可以试试把不同周期的背离强弱做成一个综合评分,或者引入成交量变化作为第三重过滤,那会是另一层境界了。希望这份拆解能帮你在实盘的路上少走几步弯路。
本文还有配套的精品资源,点击获取