ARTICLE · 1087861
通达信指标公式源码,K线MACD同图看短线背离
「短线同步副图」是一套只有 24 行的副图公式。名字是重新起的——原文那个名字用词偏满,不太适合直接出现在公开内容里——内核一行没动。它做了一件听起来有点怪的事:把 K 线画进 MACD 的副图里。
常规的看盘方式是——K 线在主图、MACD 在副图,两套坐标系各自独立。想看背离,得在上下两个图之间来回对时间轴,一根一根数。这套公式换了个办法:把 K 线整体平移一个位置,搬进 MACD 的副图,让当天的 K 线和当天的 MACD 色带落在同一根垂直线上。
装好之后,副图会变成这样:纵向分布的是 MACD 的三色带子,中间有一根根空心的小 K 线穿过去。同一个时间点上,那根 K 线的高低形态和它正对的色带,属于同一个交易日。
先做个速览
• 类型:单件,副图(没有主图,也没有选股公式)
• 用到的数据:开、高、低、收四个价格,加上系统 MACD 指标
• 输出:一副被平移过的 K 线(六层空心线)、三色 MACD 带、两条取反向的参考线、一个条件图标
• 一句话:把 K 线按「相对当日四价均值」重新定位,塞进 MACD 副图,让当天的价格形态和动能指标垂直对齐

一、这套公式做了一件反常的事
K 线画进副图,第一个障碍是量纲。价格是几十上百,MACD 的快线(DIF)是零点几到几块,差两三个数量级。不做处理直接画,K 线会占满整个画面,把色带压成一条线。
公式的解法在第 1 到第 8 行:先把价格减去当天的四价均值。
VAR1Z:=(C+O+L+H)/4
这是开盘、最高、最低、收盘四个价格的算术平均。注意它不是成交均价——成交均价要按成交量加权算,这里只是四个价格的中点,作用是给当天找一个「重心」。
减完之后,价格就从「几十元」变成了「偏离重心多少元」,量级是几毛甚至几分,和 MACD 的快线落到同一个数量级,两者才能共用一套纵坐标。
举个数看得更清楚:一只 50 元左右的股票,当天振幅 3%,那么四价相对重心的偏离幅度大约在 ±0.4 元;同一时间它的 DIF 通常在 ±1 元以内。两者相差不悬殊,画在一起高度还算协调。这也是这套公式能成立的前提。
二、关键在那四个看着像系统函数的变量
第 2 到第 8 行定义了七个输出,全部标了 NODRAW:
开:O-VAR1Z,NODRAW;
高:H-VAR1Z,NODRAW;
低:L-VAR1Z,NODRAW;
收:C-VAR1Z,NODRAW;
上影线:IF(C>O,高-收,高-开),NODRAW;
下影线:IF(C>O,开-低,收-低),NODRAW;
收开线:IF(C>O,收-开,开-收),NODRAW;
这是整个公式最容易看错的地方。开、高、低、收 这四个名字读起来像是通达信的系统函数(系统里对应的是 OPEN、HIGH、LOW、CLOSE),但这四行把它们重新定义成了自己的变量,值是各自的原始价格减去 VAR1Z。
后面第 9 到第 14 行画 K 线时用到的 收、开、高、低,引用的就是这四个自定义变量,不是原始价格。如果误当成系统价格去读,就没法解释为什么 K 线画在副图里既不夸张、也不溢出——那正是因为它们已经被换算成了偏离量。
另一件事:上影线、下影线、收开线 这三行也定义了,但后面从头到尾没有被引用过一次。它们算出来就放在那儿了,属于多写的部分,去掉不影响运行。
三、六行 STICKLINE 画出一根 K 线
STICKLINE(C>=O,收,开,2,1),COLORLIRED;
STICKLINE(C>=O,高,收,0,1),COLORLIRED;
STICKLINE(C>=O,低,开,0,1),COLORLIRED;
STICKLINE(C<O,收,开,2,1),COLORLIGREEN;
STICKLINE(C<O,高,开,0,1),COLORLIGREEN;
STICKLINE(C<O,低,收,0,1),COLORLIGREEN;
STICKLINE 的五个参数依次是 (条件, 上端取值, 下端取值, 宽度, 是否空心)。空心参数写 1 表示只描边框、里面不填色。
阳线(C>=O)三行:
• 实体:从 收 到 开,宽度 2
• 上影:从 高 到 收
• 下影:从 低 到 开
阴线(C<O)三行:
• 实体:还是从 收 到 开(此时 收 小于 开,通达信会自动按上下关系画)
• 上影:从 高 到 开
• 下影:从 低 到 收
阳线的上影连到收盘、阴线的上影连到开盘,这是对的:阳线实体的顶边是收盘价,阴线实体的顶边是开盘价;下影线同理,分别连到开盘和收盘。判断条件用的 C>=O 是系统价格,但画的位置用的是偏离量,两者同一天、同一个减数,等价,不冲突。
六层全部用空心(参数 1)是有讲究的:空心 K 线不遮挡后面的色带,两者重叠时都看得见。宽度那栏,实体给 2、影线给 0——0 在通达信里表示画最细的线。
这里有个理解要点:K 线的「零点」(纵坐标 0 那根水平线)对应的是当天的四价均值,不是某个固定价格。所以 K 线在图上会每天自动重新定位——今天均值是 50.2,今天这根 K 线就以 50.2 所在的位置为零;明天均值变成 49.8,基准也跟着挪。这一点直接影响怎么用,放到第七节细说。
四、MACD 那半段,和标准 MACD 柱不是一回事
MACD:MACD,NODRAW;
MARD:SMA(MACD,3,1),NODRAW;
第一行是跨指标引用。 冒号后面那个 MACD 不是变量名,而是去调用通达信里的系统 MACD 指标,取它的 MACD 输出线(也就是 DIF 快线)。写法上冒号前后同名,读起来很容易以为是自己定义自己。
这里有个使用前提:系统 MACD 指标得存在,而且最好保持默认参数。如果以前改过或删过它,这里引用的东西就跟着变了,而公式里看不出任何提示。
第二行不是标准的 DEA。 标准 MACD 的信号线 DEA 是 DIF 的 9 日平滑,这里用的是 3 日(SMA(X,3,1) 的权重是 3)。周期只有标准的三分之一,所以 MARD 跟得非常紧。
后果是:MACD-MARD 这个差值比标准的 MACD 柱(DIF 减 DEA)敏感得多,穿越零轴频繁、摆动幅度也大。你在图上看到的红蓝切换,比行情软件里那根 MACD 柱要快一拍到两拍。别把它当标准 MACD 柱来读。
再看第 17 行:
IF(MACD>MARD,MACD,DRAWNULL),COLORRED,NODRAW;
IF(...,DRAWNULL) 是通达信里常见的「条件画线」写法——条件成立就画值,不成立就不画。但句末又加了 NODRAW,意思是这条输出不画线。两个指令互相抵消,结果是这行什么都没画出来。从写法看,作者本来大概是想留一条只在快线上穿时出现的红线,加了 NODRAW 之后就废了。
真正在画的是接下来三行,注意它们和常见 MACD 柱的区别:
STICKLINE(MACD>MARD, MACD, MARD, 3, 0) 画的是从 MARD 到 MACD 的一段色带,不是「从零轴到差值」的柱子。所以这个副图里的三色带是悬空的,跟着两条线的位置走,而不像行情软件那样从零轴上下来回翻。这个差别看代码时很容易漏掉,看图时感受却很直接:色带整体会上下漂移,不锚在零轴上。
五、三种颜色怎么读
三行按顺序执行,后面的会盖住前面的:
第 1 行MACD>MARD
红;快线在 3 日线上方
第 2 行MACD<MARD
蓝;快线在 3 日线下方
第 3 行MACD>MARD AND MACD<0
黄;快线在 3 日线上方,但快线本身还在零轴下方
第 1 行和第 2 行条件互斥,不会打架。第 3 行的条件包含在第 1 行里,所以凡是「快线在零轴下方、同时又上穿了 3 日线」这一段,红色会被黄色覆盖——这大概就是作者的本意:把零轴下方的短线上穿单独挑出来标黄。
注意第 3 行判断的是 MACD<0(快线本身在零轴下方),不是「色带在零轴下方」。因为色带是从 MARD 画到 MACD、并不贴零轴,用色带位置来定义上下本来也没意义。所以黄柱的准确含义是:DIF 还在零轴下方,但已经上穿了它自己的 3 日线。
配色上有两点要注意:
• K 线用浅红和浅绿,色带用红、蓝、黄。「下跌」这件事在 K 线里是浅绿、在色带里是蓝色,同一张图上有两套颜色语言,看的时候要分开认。
• COLORLIRED、COLORLIGREEN 这两个颜色常量不是所有通达信版本都支持,遇到不支持的版本会回落到默认色,K 线颜色就不是浅红浅绿了。
最后是那个图标:
DRAWICON(MACD-MARD>0.1,(MACD+MARD)/2,1);
两线差值超过 0.1 就画一个标记,位置在两条线的正中。这个 0.1 是一个固定数字、不是比例,所以它对每只股票的效果完全不同:
• 50 元左右的股票,DIF 的日波动常在 0.5 元以上,差值经常超过 0.1 → 标记出得很密
• 5 元左右的股票,DIF 的日波动可能只有 0.05 元,差值很难摸到 0.1 → 标记几乎不出现
这不是公式写错,是拿固定数字当门槛的自然结果。要用的话得按自己的持仓价位去调,见第八节。
六、K 和 D 这两条线最容易误读
K:-MACD,COLORYELLOW;
D:-MARD,COLORWHITE;
这两行有两个容易踩的坑。
第一个坑是名字。K、D 在股票软件里默认让人想到 KDJ 的那两个值。但这里跟 KDJ 一点关系都没有,它们就是 MACD 快线和它的 3 日线。
第二个坑更要紧:它们是取负的。 前面有个负号,所以:
• K 往上走 = 快线往下走 = 动能转弱
• K 往下走 = 快线往上走 = 动能转强
方向是反的。 按「线往上就是好」的习惯去读,会读反。
为什么要取负?看颜色和位置就明白了——这两条是黄色和白色,如果按原值画,会和同样用黄白配色的色带混在一起,位置也和 K 线挤在一块。取负之后它们沉到零轴下方,画面清爽很多。这是为了避让做的处理,不是算法需要。
七、七条使用边界
第一,它不产生任何买卖信号。 整套 24 行没有一行输出可用条件,也没有选股公式。它的作用就是把两个东西画在一起给你看,判断留给你。想拿它做筛选或提醒,得自己另外写条件。
第二,坐标系每天重置。 K 线是「价格减当日四价均值」画出来的,零点跟着当天的均值走。这意味着这个副图看不出跨日形态——W 底、头肩底、平台整理这类需要多根 K 线组合的结构,在这个图上都成立不了,因为每根 K 线都被平移到了各自的基准上。它只能看单日的内部结构,以及单日 K 线与当日色带的相对关系。
第三,VAR1Z 不是成交均价。(C+O+L+H)/4 是四个价格的简单平均,没有按成交量加权。成交集中在某一端的日子,它和真实成交均价会有明显差距。
第四,0.1 那个阈值要吃透。 它是一个固定数字,不同价位的股票表现天差地别,用之前先看看自己的票在什么价位。
第五,MARD 是 3 日不是 9 日。 画出来的是「快线减它的 3 日线」,比标准 MACD 柱灵敏得多。如果你的判断经验是基于标准 MACD 柱建立的,直接套用会有偏差。
第六,跨指标引用有前提。 第一行依赖系统 MACD 指标存在且参数正常。换电脑、换软件版本,或者导入别人的公式包覆盖了系统指标,都可能让它取到不一样的值。
第七,几处冗余。上影线、下影线、收开线、倍数 定义了但从未被引用;第 17 行因为 NODRAW 而失效。这些不影响运行,但读代码时容易被绕进去。
好消息:没有未来函数。 全部取值都是当日值,SMA 是递推平滑、不含未来数据,STICKLINE、IF、DRAWICON 都是当日判定。回看历史时图形是稳定的。
公式源码(副图)
公式原来的名字用词偏满,这里统一用「短线同步副图」这个中性说法,源码按原文完整保留。
VAR1Z:=(C+O+L+H)/4;
开:O-VAR1Z,NODRAW;
高:H-VAR1Z,NODRAW;
低:L-VAR1Z,NODRAW;
收:C-VAR1Z,NODRAW;
上影线:IF(C>O,高-收,高-开),NODRAW;
下影线:IF(C>O,开-低,收-低),NODRAW;
收开线:IF(C>O,收-开,开-收),NODRAW;
STICKLINE(C>=O,收,开,2,1),COLORLIRED;
STICKLINE(C>=O,高,收,0,1),COLORLIRED;
STICKLINE(C>=O,低,开,0,1),COLORLIRED;
STICKLINE(C<O,收,开,2,1),COLORLIGREEN;
STICKLINE(C<O,高,开,0,1),COLORLIGREEN;
STICKLINE(C<O,低,收,0,1),COLORLIGREEN;
(公式太长,展示不便,获取信息见文末)
免责声明:本指标公式仅供技术分析与学术交流,所有数据均为模拟测试结果,不构成任何投资建议或决策依据。使用者应独立判断并承担风险,严禁用于违法违规用途。如涉及侵权,请及时联系删除,本平台概不承担由此引发的任何责任。
资料免费获取方式如下
1. 进入公众号主页发消息回复关键词:短线同步副图,获取主图、副图与选股三段公式文件。
2. 文件仅用于个人技术学习,不提供个股解答,也不建任何形式的群。
历史文章链接