把同一只品种、同一个公式、同一根历史 K 线,在两个不同的时间点分别读一次数值,读数不一样。这就是观察通达信公式漂移最直接的方式:不需要额外工具,也不需要背函数表,只需要把两次读数记下来做对比。凡是能被这样复现出来的差异,都属于可定位的问题,不属于玄学。

下面把这类差异按来源分成三类,给出各类的判断依据、对照表和自查顺序。文中提到的函数名与目录(ZIG、PEAK、T0002、PriGS.dat)以通达信金融终端个人版为准,券商定制版的函数集与菜单可能不同。全文只讨论计算机制,不涉及具体标的的判断。

一、漂移是能被复现的现象,先固定观察方法

定位通达信公式漂移之前,先建立一次可对比的读数。做法是把公式挂到副图上,用十字光标定位到某一根历史 K 线,把该根上每个输出的数值抄下来,写清品种、周期、复权方式和日期。之后无论做什么操作,都回到同一根 K 线上再读一次。

这个动作有两个作用:一是把”感觉不一样”变成”数值从多少变成了多少”;二是后面的三类来源,区分依据恰好就是”在哪一次操作之后读数变了”。没有这个基线,只能凭印象判断。

二、第一类来源:公式引用了未来函数

未来函数指的是计算时需要用到当前 K 线之后的数据才能得出结果的那类函数。它的特点是:每一次新增数据,过去已经走过的位置都会被重新计算,而且结果可能改变。

通达信函数集里属于这一类的有 ZIG、PEAK、TROUGH、PEAKBARS、TROUGHBARS、ZIGBARS。它们的共同点是都在寻找转折点或极值点,而一个点是不是转折点,只有等后面的走势走出来才能确认。这就解释了为什么同一根 K 线昨天标着转折、今天再看标记挪到了别处。

{ 一类转述写法:用 ZIG 找转折 }
波谷:=ZIG(3,5)<REF(ZIG(3,5),1) AND REF(ZIG(3,5),1)>REF(ZIG(3,5),2);

{ 一类转述写法:用 PEAK 系列定位高低点 }
高点位置:=PEAKBARS(1,5,1);

{ 这两类写法在新增 K 线后,历史标记都可能被改 }
{ 判断依据不是"看起来像",是读数是否随新数据变化 }

未来函数的这一特性是算法固有的,不是版本缺陷,也不存在把它”修好”的写法。要用这类形态,就得接受它的历史标记会变。

三、第二类来源:计算依赖了会被重算的数据

第二类与函数无关,与数据有关。公式本身没有引用未来数据,但它依赖的那份行情数据被重新计算过了,于是结果跟着变。

会触发数据重算的操作有四类,都能在界面里看到:

  • 盘后数据下载:入口在系统菜单里,系统 → 盘后数据下载。补下载之后,原先缺失或不全的历史 K 线被补齐,依赖这些 K 线的计算结果随之改变。
  • 除权除息数据更新后重新复权:除权信息更新后,复权价整体重算,同一根 K 线的价格字段取值变了。
  • 切换复权方式:不复权、前复权、后复权三种设置下,价格字段是三个不同的序列。
  • 重新登录行情或切换主站:连接不同服务器后,本地历史数据被刷新,个别根上的数据来源不同。
第二类漂移有一个便于识别的特征:变化不是逐根发生的,而是在你做完上面某个动作之后整体出现。同一根 K 线的读数在动作之前稳定、动作之后也稳定,只是这两个稳定值不一样。这与未来函数那种”每新增一根就动一次”的表现明显不同。

四、第三类来源:信号落在还没有定型的那根 K 线上

第三类不是漂移,但容易被当成漂移来排查,所以单独列出来。盘中最后一根 K 线还没有收盘,它的收盘价、最高价、最低价都在变动,任何用到 C、H、L 的条件判断在这根上都可能反复成立与不成立。

表现是:信号在盘中出现,收盘后消失;或者反过来,收盘后才出现。这只发生在图表最右边那一根上,左侧的历史 K 线读数不变。判断方法就是看变化的范围——只动最后一根,属于这一类。

处理方式是把判断移到已经收盘的 K 线上。通达信里常见的写法是用 REF 把参与判断的值往后挪一根:

{ 直接用当前根:盘中会反复变化 }
原始条件:=C>REF(C,1);

{ 改用上一根:判断基准已经定型 }
稳定条件:=REF(C,1)>REF(C,2);

{ 只取已经收盘的那一根参与判断,读数不再随盘中刷新变化 }
用 REF 挪一根只解决”最后一根未定型”这一类问题。如果公式里同时存在未来函数,挪一根并不能消除未来函数的影响,它只是把标记延迟了一根,标记本身仍然会随新数据移动。两类原因要分开处理,不要把前者当成后者的解药。

五、三类来源的对照表

来源 变化范围 什么时候变 触发动作 能不能消除
未来函数 历史上多处位置 每次新增 K 线都可能变 无需操作,随时间推进自动变化 不能,只能不用这类函数
数据重算 整段区间一起动 完成重算动作之后一次性变 补数据、更新除权、切换复权、重连行情 能,固定住数据与复权设置
最后一根未定型 只有最右侧一根 盘中持续变,收盘后固定 无需操作,随行情推送变化 能,判断改用已收盘的 K 线

这张表是排查通达信公式漂移的主线索。先确定变化范围,再看变化发生在什么时点,两类信息合起来就能定位到具体来源,不需要逐个函数去猜。

六、自查步骤:从哪一根 K 线开始查

  1. 固定基线:记下品种、周期、复权方式、K 线日期与该根的每个输出值。
  2. 看范围:只有最右一根变了,归入第三类,处理方式见第四节。
  3. 做一次刷新动作:切换一次复权方式再切回来,重新读数。读数回到原值,说明是复权设置差异;读数停在新的值,继续下一步。
  4. 对比历史左侧:任意挑五根间隔较大的历史 K 线分别读数,与基线对比。左侧也变了,归入第二类或第一类。
  5. 查函数:在公式源码里搜索 ZIG、PEAK、TROUGH、PEAKBARS、TROUGHBARS、ZIGBARS 六个名字。命中了就是第一类。
  6. 逐个注释验证:把可疑语句注释掉,只保留其余部分再读数。信号随之消失,说明它就是变化来源。

七、含有未来函数的常见写法

第一类来源在公式源码里有固定的痕迹,认识这几个痕迹,比记函数表更实用。

  • 带 ZIG 的字样,包括 ZIG 与 ZIGBARS。
  • 带 PEAK 与 TROUGH 的字样,包括它们的 BARS 版本。
  • 形如”在某个低点出现之后条件成立”的转述写法:源码里用 BARSLAST 或 LLVBARS 定位到最低点,再用最低点之后的条件做判断。这类写法本身不是未来函数,但如果定位到的那个”最低点”是用 ZIG 或 PEAK 类函数找出来的,整个链条就带上了未来属性。
  • 跨公式引用:自己写的公式没有未来函数,但引用了另一个含未来函数的指标,结果同样会漂移。查的时候要把被引用的指标一起看。

八、把结果固定下来的边界

能固定下来的部分不多,但边界清楚:数据重算这一类的处理方式是固定住数据与复权设置,判断改用已收盘 K 线这一类的处理方式是把条件往后挪一根。这两条都能让读数在设定不变的前提下稳定。

不能固定的是未来函数。它靠后续数据确定之前的位置,这个性质写进了算法本身,改写法、加参数、挪周期都不能绕开。遇到含这类函数的公式,能做的判断只有两个:接受历史标记会变化,或者不使用它。

所以对通达信公式漂移这件事,结论是一句判断:先分清它是”数据被重算了”还是”公式在看后面”。前者是设置问题,可以固定下来;后者是算法性质,只能接受或者放弃。把这两种混在一起讨论,讨论到最后也不会有结论。

本文讲的是公式计算机制与验证方法,不涉及具体标的的判断。站内还有 报错与卡顿排查 的其他条目,指标回测与风险验证 里讲含未来函数的写法怎么在历史行情里核对,量价形态与信号拆解 里讲信号条件的拆法,可对照查看。

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