通达信主力公式里的「主力」,不是一个能直接观测到的量。行情软件能拿到的原始数据只有每一笔成交的价格、数量和时间,没有任何一个字段写着这笔成交的参与方是谁。所以所谓主力,实际上是使用者用成交数据构造出来的代理变量,不同公式指向的可以是完全不同的东西。
把这一点先摆正,后面关于参数与取值的问题才讲得清楚。本文拆解三类常见的构造口径,说明每一类在数学上算的是什么,以及口径不同会带来哪些后果。文中以通达信金融终端个人版的函数与数据字段为准。全文只作公式原理的讨论,不涉及任何标的的判断,也不给出方向性结论。
一、主力是代理变量,不是观测量
代理变量的意思是:想测量 A,但 A 测不到,于是改用与 A 有某种关联的 B 来近似。B 可以被算出来,B 与 A 的关联强度则取决于假设,而不取决于公式写得漂不漂亮。
这一点决定了几件在实务上要紧的事。第一,两个都叫「主力」的公式可以给出方向相反的曲线,因为它们的代理变量不同,谁也不算错。第二,公式的输出值本身没有单位,曲线的高低只有与自己的历史区间比较才有意义。第三,把参数改一改,曲线的形态就会变,参数是口径的一部分,不是精度调节旋钮。
| 说法 | 实际所指 | 能否直接验证 |
|---|---|---|
| 主力在某价位附近活动 | 该价位附近成交量较集中 | 可以,用成交分布核对 |
| 主力正在流入 | 按某口径算出的净额为正 | 只能核到口径,核不到参与方 |
| 主力已经离场 | 按某口径算出的净额转负 | 同上 |
二、三类常见的构造口径
把市面上叫「主力」的公式归一下类,算法基本落在三类里。每一类算的都是可以复算的东西,区别在于用哪些字段、如何加权。
- 按单笔成交额分档。设定一个金额阈值,把超过阈值的成交记为「大单」,统计大单在两个方向上的成交金额之差。这里的核心假设是:单笔金额大与参与方规模大相关。阈值取多少,直接决定结果,且这个阈值没有标准答案。
- 按主动方向统计。以成交价与买卖盘口的关系判断该笔成交是主动成交还是被动成交,再按方向累计金额。核心假设是主动方向能反映意愿强弱。逐笔数据可得性与盘口快照频率会影响这一步的精度。
- 按量价加权合成。不区分单笔大小,直接用价格变动与成交量的组合构造指标,例如以涨跌方向对成交量加权后做累计。核心假设是价格变化方向已经隐含了资金意愿。
{ 第三类的典型骨架:方向加权累计 }
DIR:=IF(CLOSE>REF(CLOSE,1),VOL,IF(CLOSE<REF(CLOSE,1),-VOL,0));
ACC:=SUM(DIR,N);
主力线:ACC;
这段代码只用两个字段:收盘价与成交量。它算的是「按涨跌方向加权的成交量累计」,没有任何一步涉及参与方身份。把它称作主力线,是把一个统计量换了一个通俗名字。
三、参数怎么定,取值怎么读
三类口径里都有 N 这个累计周期参数。N 决定了曲线对近期变化的敏感程度:N 小,曲线随单日量能变化而频繁转向;N 大,曲线平滑,代价是转向滞后。参数本身没有正确值,要选的是与使用场景匹配的平滑度。
{ 参数表声明,界面可直接改 }
N: 20 (5, 250, 1)
DIR:=IF(CLOSE>REF(CLOSE,1),VOL,IF(CLOSE<REF(CLOSE,1),-VOL,0));
主力线:SUM(DIR,N);
零轴:0;
取值怎么读,要解决的是量纲问题。上面这段的输出是成交量单位的累计值,数值大小取决于该品种的成交量级别,不同品种之间不可比。可行的读法是两件事:一看曲线与零轴的位置关系,二看曲线与自身历史区间的位置。跨品种比较数值高低没有意义。
通达信主力公式的参数还有一处容易被忽略:阈值类参数的单位。按单笔成交额分档的那一类,阈值可以按金额定,也可以按手数定,还可以按与当日均量的倍数定。三种写法在同一段行情上会圈出不同数量的成交,最终曲线自然不同。核对时要把阈值连同它的单位一起记录,只记数字没有意义。
四、口径不同会带来三个后果
做通达信主力公式的对比与选用时,下面三个后果是绕不开的。
| 后果 | 具体表现 | 应对 |
|---|---|---|
| 曲线方向可能相反 | 两个都叫主力的公式在同一段区间上一个向上一个向下 | 先看两者的构造假设,而不是比较数值 |
| 参数改动会改形态 | N 从 20 改到 60,曲线的转向点整体后移 | 把参数当作口径的一部分记录 |
| 跨品种不可比 | 不同成交量级别的品种数值差一个量级 | 只做自身历史区间的比较 |
第一项最容易被当成「其中一个算错了」。判断办法是把两段源码各自拆到最底层,看它们用的是同一类字段还是不同类字段。同类字段、不同参数,属于口径同一而平滑度不同;不同类字段,属于口径不同,两者本就不该一致。
还有一个常被跳过的步骤是确认数据可得性。按主动方向统计的那一类需要逐笔成交或较高频率的盘口快照,本地未下载这部分数据时,公式可能取到空值或退化成一个近似值。检查办法是把公式挂在分钟周期上跑一遍,看输出是否随周期缩短而变得细碎;输出完全不随周期变化的,多半没有真正用到逐笔数据。
五、验证方法与适用边界
验证一段通达信主力公式,能做的是复算,不是验证「主力」这件事。具体三步:把源码里用到的字段逐个列出来,确认每一个字段都能在软件的数据字典里找到;把参数代入一组具体数值,手算一根 K 线的输出;把公式输出与手算值对上。
手算样本的取法有讲究。取一段成交量已知、K 线根数不超过十根的区间,把每一根的量价数据抄下来,按源码的运算顺序逐步算一遍。根数少是为了让每一步都能对上,区间太长反而看不出错在哪一步。
三步走完,能确认的是公式如实算出了它声称的统计量。这之后仍有一层无法跨越的边界:从统计量到「主力在做什么」之间的那一步,是假设,不是推导。假设是否成立,取决于市场结构,只能观测,不能由源码证明。
通达信主力公式的合理用法,是把它当成一个口径明确、参数可核对、能复算的统计指标来用。它的价值在于取值过程透明,而不在于名字带来的解释力。
本文只讨论公式的构造口径与验证方法,不涉及具体标的的判断,也不构成对任何公式效果的承诺。站内还有 指标原理与参数 里讲参数含义与取值口径的条目、指标回测与风险验证 里讲未来函数与样本区间核对的条目、公式编写与语法函数 里讲字段与函数用法的条目,可对照查看。
