通达信MACD面积公式要解决的问题只有一个:把柱体在一段窗口里累积成一条线。通达信的函数表里没有叫「面积」的函数,能拿来用的只有 SUM 和 ABS 这两个基础件,面积是它们组合出来的中间结果。这意味着面积的口径不是软件给的,是写公式的人定的:窗口取多少根、正负要不要相抵、单位怎么归一,三处口径不同,算出来的数就完全不同,两条面积线放在一起比也没有意义。

一、先定柱高:面积的上游是 MACD 柱本身

MACD 系统的写法是三行:DIF 是两条指数均线的差,DEA 是 DIF 的指数均线,柱体是 DIF 与 DEA 之差乘以 2。这个 2 不是装饰,它直接决定面积的量级。柱高乘了 2,同一窗口的面积就是没乘 2 的两倍。把一段源码搬到另一个平台之前,第一步不是改函数名,是把柱体那一行抄下来对一遍。

DIF:=EMA(CLOSE,12)-EMA(CLOSE,26);
DEA:=EMA(DIF,9);
柱:=2*(DIF-DEA);

柱高的符号跟着 DIF 与 DEA 的位置走:DIF 在 DEA 之上,柱为正;DIF 落到 DEA 之下,柱为负。面积的口径分歧就从这里开始,因为「累积」这两个字对正负号有三种处理方式。

二、三种面积算法,回答的是三个不同的问题

把柱体在 N 根里加起来,写成 SUM(柱,N),正负会自然相抵。一段先正后负的行情,净面积可能接近零,可这段时间柱体摆动得很厉害。这是净面积的特点:它衡量的是净方向上的累积,不是波动的总量。

要看波动总量,就把每根柱先去掉正负号再累加,写成 SUM(ABS(柱),N)。这条线不会因为正负抵消而回落,它的形状更接近「这段时间柱体有多活跃」。代价是丢了方向,一条持续为正的柱体和一条正负交替的柱体,按总量口径算出来的面积可能一样大。

第三种是正负分账:正柱单独累加,负柱翻正后单独累加,输出两条线。回答的是「多方累积与空方累积各有多少」,代价是输出线从一条变成两条,副图里要留位置。

要回答的问题 写法 副作用
这段时间净累积多少 SUM(柱,N) 正负相抵,剧烈摆动可能被抹平
这段时间柱体总量多大 SUM(ABS(柱),N) 丢失方向,正负结构看不见
多空两侧各累积多少 分两条线累加 输出线多,副图拥挤

三种写法没有优劣,只有适配。做强度排序用总量口径的面积,看拐点前后的能量转手用正负分账,看趋势的净推力用净面积。一篇文章里同时挂三条,图上会糊成一片,选一种写清楚口径更实际。

三、公式骨架:四到五个输出线怎么排

下面的骨架把三种口径都写出来,实际使用时删掉不用的那几行。输出线用冒号,中间量用冒号加等号,这一点写错就会多出一条线,或者干脆不显示。

DIF:=EMA(CLOSE,12)-EMA(CLOSE,26);
DEA:=EMA(DIF,9);
柱:=2*(DIF-DEA);
均价:=MA(CLOSE,20);
净面积:SUM(柱,20);
总能量:SUM(ABS(柱),20);
多方:SUM(IF(柱>0,柱,0),20);
空方:SUM(IF(柱<0,-柱,0),20);
强度:总能量/(均价*20);

最后一行是归一化,把面积除以「窗口均价乘根数」,得到一个不带价格单位的比值。这一步在跨品种比较时省不掉,原因在下一节。

骨架里的 20 是窗口,别写死在公式正文里。把它提到参数表,写成 N(默认 20,最小 2,最大 250),换窗口只改参数不动判据,改动前后也能对上账。

四、面积的量纲:两只票的面积天生不可比

柱体的单位是价格单位,面积的单位是价格单位乘以根数。一只三十元的票和一只五元的票,即便柱体的相对形态一模一样,前者的面积也是后者的数倍。直接把两条面积线放在同一张副图上比高低,比的是价格,不是强度。

归一化有两种做法。除以窗口均价,得到「面积相当于多少个平均价位」;再除以根数,得到「平均每根的柱高」。前者保留窗口长度的信息,后者把窗口长度也抹掉了。做同一窗口的横向排序,用前者;做不同窗口的纵向对照,用后者。

归一化 表达式 适用
不归一 SUM(ABS(柱),N) 单只票的时间序列自查
除以均价 面积/MA(CLOSE,N) 同窗口、不同标的横向排序
除以均价与根数 面积/(MA(CLOSE,N)*N) 不同窗口长度的纵向对照

还有一种更省事的处理:把面积再除以同期柱体的总量以外的量,比如同期振幅。它的好处是把波动率的影响也压掉,坏处是引入了一个与面积无关的变量,口径又多了一层。写进公式之前想清楚要拿这条线做什么,比事后解释更重要。

五、跨平台搬运:三处会改掉面积的地方

把通达信MACD面积公式搬到另一个平台,有三处会改掉结果,按影响从大到小排:柱高系数、指数均线的起点、函数名与参数顺序。

第一处是柱高系数。柱体写成 DIF-DEA 与写成 2*(DIF-DEA),面积正好差一倍。这条差异不会报错,公式照样输出,图上照样有曲线,只有把两条线叠在一起才看得出来。搬运后的第一件事,是把柱体那一行与本机的系统 MACD 指标对照。

第二处是指数均线的起点。EMA 是递推量,第一根的值取什么,会影响其后若干根。有的实现用首根收盘价作初值,有的用前若干根的简单均值作初值。差异在头几十根里明显,窗口拉长之后逐步收敛。用长窗口算面积,这段收敛期可以忽略;用短窗口,起点差异会进入结果。

第三处是函数名与参数顺序。SUM、ABS、IF 这几个在多数国内软件里同名同序,但跨到 MT4 一类以 MQL 写的平台,函数体系整个换掉,SUM 要自己用循环写,ABS 换成 MathAbs,IF 换成三元表达式。这时候「面积公式」已经不是一个可以逐行翻译的东西,只能按算法重写。

搬运后的核对顺序建议固定成三步:先比柱体一行的系数,再比同一窗口同一标的的面积原值,最后比归一化之后的排序。三步里前两步对不上,第三步不用看。

六、边界:复权、停牌与数据起点

复权会改价格,价格改柱体,柱体改面积。同一段窗口,不复权与后复权算出来的面积不同,除权日附近尤其明显:除权当天价格跳下一档,DIF 与 DEA 同时被拉低,柱体出现一个与行情无关的凹陷。面积窗口跨过除权日,凹陷就被累加进去。处理办法是把公式挂在前复权图上跑,或者在窗口里避开除权日。

停牌不改价格,改根数。停牌期间没有K线,SUM 累加的是「最近 N 根有数据的K线」,不是「最近 N 个自然交易日」。同一个窗口,停牌过的票覆盖的时间跨度更长。做横向排序时,这一点会被误读成强度差异。

数据起点不足是另一类。SUM(X,N) 需要 N 根历史,前 N-1 根没有完整的窗口,返回值无效或为空。通达信里这类空值在图上表现为断线,在排序里表现为缺失。把窗口从 20 改成 60 之后,可用的历史区间跟着缩短,回看的起点要同步前移。

周期切换会同时改三样东西:根数含义、柱高量级、EMA 的递推速度。日线的 20 根大约是一个月,周线的 20 根是五个月,两条面积线的窗口长度根本不是一回事。跨周期对照面积,先把窗口换算成同一段时间,再谈数值。

七、验证:三段对照把口径钉住

第一段是手工复算。选最近五根,把柱高逐个抄下来,正负分开加,与公式输出的多方、空方两条线在最后一根上的取值对照。数值对得上,说明累加与符号处理没写错;对不上,先查 IF 的两个分支,再看窗口是不是从当根开始算。

第二段是系数对照。把柱体一行改成 DIF-DEA,其余不动,重算同一段窗口。面积应当整体缩小到原来的一半。不是一半,说明面积公式里还有一处隐含的系数,比如重复乘了 2,或者归一化的分母里也带了柱高。

第三段是排序对照。取同一窗口、同一板块内的一批标的,分别按面积原值与归一化后的强度排序,看两个名单的差异。差异大的那批,基本都是价格水平相差悬殊的标的,这正是归一化要处理的部分。

三段做完,面积的口径就固定了:柱高系数、窗口长度、正负处理、归一化方式,四项写进参数表与注释。以后换标的、换周期、换平台,改的是这四项的值,不是判据本身。

通达信MACD面积公式的价值在于把「柱体堆了多少」变成一条可以横向比的线,它不判断方向,也不判断未来。拿它当强度尺,先归一再比较;拿它当能量表,先分正负再看累积。口径写在公式里,读图的人才知道自己在看什么。

面积随价格水平漂移这一条,在跨品种比较时无法回避。看到两只票的面积差三倍,先确认是不是价格差了三倍,再去解释强度差异。

站内还有 通达信指标原理与参数 的条目,讲 MACD 三条线的参数含义;通达信公式编写教程 讲 SUM 与 IF 的嵌套写法;通达信主图副图指标 讲把多个中间量输出到副图的办法;跨平台对比与公式转换 里还有别的搬运对照清单。

本文只作技术研究口径,内容是公式算法与取数口径的说明,不涉及也不构成对任何标的的判断。文中窗口与系数均为示例设定,按自己的分析需要调整。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。