通达信公式没有源码,不等于完全无法判断。能看的部分有三层:输出线、周期行为、历史末端的变化。这三层都是用行为去反推内部,看不到的那部分只能承认看不到。问题在于把「看不到源码」直接等同于「只能听介绍」,于是要么全信,要么全不信,两种做法都跳过了中间那段可以自己动手验证的部分。
先把话说清楚:本文讲的是验证方法,不是判断好坏的标准。同一套方法用在不同公式上,结论可能相反,具体怎么用取决于你要拿这支公式做什么。
一、先分清「没有源码」是哪一种
看不到源码有几种不同的情形,可验证的余地差别很大。
| 情形 | 能看到的 | 不能做的 |
|---|---|---|
| 加密导出件(导入后源码区为空) | 图上的线、参数表里开放的参数 | 逐句读、改语句、在中间插输出 |
| 编译后的二进制包 | 同上,另加运行时的输出 | 确认内部用了哪些函数 |
| 只给截图与说明的「指标」 | 只有别人给的图 | 在本机复现,任何一项都无法验证 |
| 系统内置指标 | 部分版本可查看源码,部分只读 | 改动内置定义 |
第一种与第二种还能装进本机跑,第三层要特别小心:没有文件,就没有任何一项可以自己观察的东西,后面几节的方法一条都用不上。判断一支公式能不能验证,第一步就是确认手里有没有可导入的文件。
导入之后,在公式管理器里点开那条公式,看编辑区是空的还是灰的,看参数表里哪些项可以改。这两个信息决定了后面的验证能做到多细。
二、输出线层:数量、量级、越界
通达信公式没有源码时,第一层能读的是输出。把公式挂到副图上,数一数有几条线,再逐条看取值范围。
数量。副图上画出来的线的条数,等于这支公式的输出个数。NODRAW 的输出不画线,但仍然是一个输出,在公式管理器的测试输出区里能看到它的值。数一遍线条数、再数一遍测试输出区的行数,两个数对不上,说明有输出没挂上或者被隐藏了。
量级。每条线的取值落在什么范围,能反推它在算什么。价格类的值在个位到几十之间,百分比类的值在 0 到 100 之间,比值类的值在 0 附近,成交量类的值可能上万。量级不对,说明取数的对象不对,或者单位换算漏了一步。
越界。有些线会跑到正常范围之外,比如百分比类的线跑到 -20 或者 130。越界有两种来源:一种是把两条线的差放大,例如把差值乘上一个系数;另一种是用外推公式,例如用两个平均值的线性组合去估计斜率。越界本身不是错误,但它限定了这支公式的用法——按固定阈值去卡一条会越界的线,阈值会时不时失效。
{ 看不到源码时,先用这几项读输出 }
{ 1. 输出条数:副图线条数 与 测试输出区行数 对齐 }
{ 2. 每条线的量级:价格 / 百分比 / 比值 / 成交量 }
{ 3. 越界情况:是否有负值、是否超过 100 }
{ 4. 是否有 NODRAW 输出:有则不画线,但算过 }
三、周期层:换周期之后数值怎么变
同一支公式挂在日线、周线、分钟线上,数值的变化方式能说明它取的是哪一层数据。
如果它只做当前周期的计算,换周期后数值会按新周期的 K 线重算,形状相似但幅度不同:周线的波动范围比日线大,分钟线的波动范围比日线小。这种变化是连续的,切换周期时不会出现整条线突然变成另一段数值区间。
如果它内部引用了另一个周期的数据,换周期后会出现一种特征:某些线的数值固定在另一个周期的刻度上,不随当前周期变化。比如在分钟图上,某条线始终停留在日线的水平,说明它引用的是日线数据。这类写法不是错误,但它带来的一个后果要注意——分钟图上那条线在一天之内是平的,不会告诉你日内发生了什么。
切换周期还有一个自检点:把同一支公式在日线与周线上分别导出一段数值,比一比同一日期的读数。两次读数一致,说明取数不依赖当前周期的 K 线根数;两次读数不同,说明计算里用到了根数或窗口长度,跨周期时参数的物理含义已经变了。
四、历史末端:重绘与未来取值的痕迹
看不到源码,最需要确认的一件事是它有没有用未来数据。这件事没法靠读源码确认,只能靠观察历史值会不会变。
做法很直接:在某一天收盘后,把这条线在该日的数值抄下来,连同前后几根 K 线的值一起记;过几个交易日,再把同一日的数值调出来,与前一次记录对照。两次一致,说明该日之后的数据没有参与该日的计算;两次不一致,说明后来发生的事改写了当时的读数,也就是重绘。
重绘的机制在通达信里对应几类函数:ZIG 这类找拐点的函数,拐点要等到后面的价格走出来才能确认;REFX 这类向前取值的函数,取的是尚未发生的值;BACKSET 这类回填函数,会把后面的状态写回到前面。用了这几类里的任何一个,历史末端的读数都会随新数据变化。站内 公式报错与卡顿排查 里讲过漂移与重算的区别,那里的判断方法在无源码的情况下同样适用。
五、对照验证:同一段数据两处比
通达信公式没有源码时,还有一种不需要源码的办法,是拿同一段数据在两处做对照。
第一处是对照已知公式。如果这支公式宣称算的是某个标准指标,就在同一只标的、同一周期上把系统自带的同名指标挂出来,两条线并排看。形状一致、数值量级一致,说明它算的是同一件事;形状差得远,说明它换了算法,或者用了几条线的组合,这时候不要再用「这就是某某指标」去理解它。
第二处是对照另一台机器。同一份文件导入到另一个版本上,看输出线数量、参数表项数、数值量级是否一致。版本差异造成的差别,在源头上是数据接口与函数支持范围的变化,与公式写得对不对无关。两处一比,能分掉一部分「换台电脑就不对」的怀疑。
两处对照都有前提:标的、周期、复权方式要一致。复权方式不一致时,价格类的数值整体不同,形状却相似,很容易被误当成算法差异。
六、看不到的那部分,只能承认
三层验证做完,能确认的边界大致如下:能确认它输出了几条线、量级对不对、有没有越界、跨不跨周期、会不会重绘;不能确认它内部用了哪个窗口、怎么组合、参数之间的换算关系,也不能确认它在别的品种或别的行情阶段会怎么表现。
这个边界不影响使用,影响的是说法。可以说「这条线在切换周期后卡在日线水平,说明它引用的是日线数据」,这是观察到的;不能说「它内部用了二十日均线」,除非能看到源码或作者说明了写法。前者可以复现,后者无法核对。
再看这一层:通达信公式没有源码时,验证的着力点从「读代码」转到「读行为」。行为能读到的部分不少,读不到的部分也有明确的边界。真正需要警惕的不是「没有源码」这件事本身,而是把观察到的一层当成全部——看到三条线就说懂了算法,看到一条平滑的线就说没有重绘。
反过来问一句:一支公式值得你花多少时间做这三层观察,取决于你要用它做什么。只是挂在图上看个大概,前两层够了;要写进复盘记录、要跨版本对比、要在别的标的上复用,第四节的末端比对就不能省。
