早上打开软件,副图上某根 K 线的信号在;下午再打开,同一根 K 线的那个位置空了。这不是偶发故障,也不是软件不稳定。通达信公式信号时有时无,背后是一套可以推演的机制:公式读的是本地数据,而本地数据会在几个确定时点被重新计算,计算结果也就跟着重排。

下面按触发点、变化范围、与漂移的分界、验证顺序、处理边界展开。文中提到的目录与菜单(T0002、PriGS.dat、盘后数据下载)以通达信金融终端个人版为准,券商定制版可能不同。全文只讨论数据与计算这一层,不涉及具体标的的判断。

一、同一个信号,两次打开不一样

先把现象描述准确。”时有时无”至少包含三种互不相同的表现,混在一起讨论会得出错误结论。

  • 同一根历史 K 线,两次打开读数不同:说明该位置被重新计算过。这是本文的重点。
  • 信号只在最右边一根出现,收盘后消失:最右侧那根 K 线尚未收盘,价格字段还在变动,参与判断的值不等于收盘后的值。
  • 信号在一只品种上有、另一只品种上没有:两只品种的本地数据完整度不同,参与计算的 K 线根数不同,这不是”时有时无”,是数据差异。

分清楚是哪一种,后面的处理路径才成立。第二类的处理在第四节,第三类的处理是补数据,只有第一类需要往后查重算机制。

二、重算的四个触发点

本地数据不会自己变化,它在你做完下面某个动作之后被重算。这四个动作都在常规使用中出现,不需要刻意去做,这也是通达信公式信号时有时无会在某一天突然出现的原因。

触发动作 入口 重算的内容
盘后数据下载 系统 → 盘后数据下载 补齐或覆盖本地历史 K 线,缺失的根被填上
除权除息数据更新 随盘后数据一起更新 复权价整体重算,价格字段取值改变
切换复权方式 K 线图上的复权设置 价格序列在不复权、前复权、后复权之间切换
重新登录行情或切换主站 登录界面与主站设置 本地历史数据被来自不同服务器的数据刷新

此外还有一种不经过数据的重算:修改公式源码后重新编译。这属于自己主动改动,容易识别。

这四个动作有一个共同特征:变化是整段一起发生的,不是逐根发生的。做完动作再读一次,读数停在新的值上不再变动。这与未来函数造成的变化明显不同,后者的历史值会随着每一根新 K 线的到来被再次改写。

三、重算之后,哪些量会变

重算影响的是数值,不是全部数值。把”会变”与”不会变”分开,能省掉一部分无用的核对。

对价格序列做等比缩放的复权处理,不改变均线之间的大小关系。MA5 大于 MA10 这类比较,在前复权与后复权之间结论一致,因为两条均线被同一个比例缩放。基于差值的判断同理:EMA(C,12) 减 EMA(C,26) 得到的差值会按比例缩放,但正负号不变。所以”均线依次排列””两条线谁在上方”这类形态判断,在复权方式切换后一般保持稳定。

会变的是三类:

  • 与价格数值相关的判断:例如价格高于某个固定数值、整数关口、固定价差。复权切换后价格水平整体改变,这类条件是否成立会变。
  • 除权日附近的比值:不复权数据里,除权当日与前一日之间会出现缺口,用 C/REF(C,1) 计算的涨跌幅在这一天会得到一个异常值。使用复权数据后缺口被填上,同一根上的涨跌幅是另一个数。
  • 参与计算的 K 线根数变化:补数据后,原先缺失的根被填上,长周期统计量(如 60 根均线)在数据起点附近的值随之改变。

把这三类与前面”不会变”的部分分开,核对时就知道该看哪些位置。用形态类条件写的公式,重算之后信号位置保持不变;用价格阈值或涨幅写的公式,重算之后信号位置可能整体移动。

四、漂移与重算的分界

两件事都表现为”值变了”,分界线只有一个:变化是由你的操作引起的,还是由时间推进引起的。

重算
  触发条件:执行了补数据 / 更新除权 / 切换复权 / 重连行情
  变化时点:动作完成之后一次性发生
  之后表现:稳定,不再变化,直到下一次触发

漂移(未来函数)
  触发条件:新增 K 线,无需任何操作
  变化时点:每一次数据推进都可能发生
  之后表现:只要还在推进,历史值就一直可能被改写

未定型(最右一根)
  触发条件:盘中行情推送
  变化时点:持续变化,收盘后停止
  之后表现:收盘后固定,此后不再变化

用一句话概括:需要你做点什么才变的,是重算;你什么都没做它也会变的,是公式读到了后面的数据。这句话可以直接用在任何一次判断上。

五、三种情形的现象对照

把三种情形并排放,是判断通达信公式信号时有时无时用到的主线索。先确定变化范围,再确定变化是否由自己的操作引起,两列信息合起来就能定位到具体来源。

情形 变化范围 识别方法 处理方向
数据重算 整段区间同时变化 做一次盘后数据下载或切换复权,对比读数 固定数据与复权设置,在确定的设置下使用
未来函数 历史上多处位置,且持续变化 隔一段时间再读一次,仍在变 源码里的 ZIG、PEAK 类调用,删除或替换
最右一根未定型 只有最右侧一根 左侧历史 K 线读数稳定 把判断移到已收盘的 K 线上

六、验证:按时间顺序走五步

  1. 记录基线:选定品种、周期、复权方式,用十字光标读出三个历史位置上每个输出的数值,写下来。
  2. 不动,等一段:什么都不做,隔一段时间重新打开软件再读一次同样三个位置。读数变了,说明与你的操作无关,查源码里的未来函数。
  3. 做一次复权切换:在三个复权方式之间各读一次。三次读数彼此不同、但每种设置下稳定,说明差异来自数据口径而非公式。
  4. 补一次数据:执行一次盘后数据下载,再读一次。变化集中在数据起点附近,说明是补齐 K 线造成。
  5. 看最右一根:确认变化是否只发生在最右侧。是这一类的话,前面四步都会显示左侧稳定。

七、可以固定下来的情形

属于重算的那一类,处理方式是让计算基准固定下来。具体做法有三条:把复权方式固定成一种并在使用中保持;在判断条件里避开价格数值与固定阈值,改用形态关系;对于必须用到涨跌幅的条件,确认数据包含完整的除权信息,避免在缺口位置产生异常值。

属于最右一根未定型的那一类,处理方式是改变判断的取值位置。把参与判断的价格字段往后挪一根,用已经收盘的那一根做基准,盘中刷新就不再影响读数。通达信里对应的写法是用 REF 把取值延后:

{ 盘中会反复变化:用到当根的收盘价 }
当根条件:=C>REF(C,1);

{ 改用上一根:基准已收盘,盘中刷新不再影响 }
延后条件:=REF(C,1)>REF(C,2);

{ 注意:延后只是换一根取值,不等于消除未来函数的影响 }

八、无法消除的情形

含 ZIG、PEAK、TROUGH、PEAKBARS、TROUGHBARS、ZIGBARS 这类调用的公式,其历史标记会随新数据改写,这一点来自算法本身:转折点要等后面走出来才能确认。改参数、换周期、调整写法都不能绕开,因为要让函数给出转折点,就必须让它看后面的数据。

另有一种间接情形:公式本身不含未来函数,但引用了另一个含未来函数的指标。这种情况下变化出现在被引用的部分,容易误判成本公式的问题。排查时要把引用的链条一起看,通达信的函数集里没有区分这一点,需要自己核对源码。

九、边界

通达信公式信号时有时无这件事,能处理的部分和不能处理的部分分得很清楚:数据口径与判断位置是可以固定的,未来函数的时间性质是固定的对立面。分不清这两者的时候,人会倾向于反复重装软件、反复重装公式,而这两件事对上面任何一种情形都不产生作用——软件里没有可以关掉重算的开关,也没有可以关闭未来函数特性的选项。

因此判断顺序建议固定成一句话:先确认变化范围,再确认变化是否由自己的操作引起,最后才去看源码。顺序反过来,就会在一个本来就是正常的公式里找错。

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

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