通达信同花顺公式对比这件事,卡点集中在名字上:函数名、参数顺序、周期标记。同一段均线思路,在通达信里写成 MA(CLOSE,N),换到另一个平台可能就是 MA(收盘价, 周期数) 或 SMA(数据序列, 周期);顺序变了、名字变了,编译器就会在第一个函数处停下。逻辑没搬过去,是因为语法没搬过去。
下面把跨平台改写要核对的四类差异列出来:函数命名、参数顺序、跨周期引用、文件与导入方式。本文只讨论公式语言本身的可移植性,不评价任何平台的数据质量,也不涉及具体标的的判断。文中以通达信金融终端个人版的写法为参照,其他平台的函数名以各自软件自带的函数说明为准,本文不逐条列出未经核对的对照表。
一、四家平台的公式语言有共同底座
国内主流行情软件的公式语言在设计上接近同一思路:把开盘、最高、最低、收盘、成交量、成交额这几条按时间排列的数据序列作为输入,用函数对序列做运算,最后输出一个序列或一个条件值。这个底座是共同的,所以一段公式的结构可以直接看懂。
差异出在表达这层结构所用的词。同样是求若干周期内的最大值,有的平台叫 HHV,有的叫 HIGHEST;同样是取前一期的值,有的用 REF,有的用 REFX 或 REF1。名字不同带来的问题不只是要改字符,还在于改错之后编译器未必报错,而是算出一列看起来正常、实际含义已经变了的值。
| 差异类别 | 表现 | 不改会怎样 |
|---|---|---|
| 函数命名 | 同一算法在不同平台用不同缩写 | 编译停在第一个未知函数 |
| 参数顺序 | 周期数与数据序列的前后位置不同 | 能编译,但算的是别的东西 |
| 跨周期引用 | 引用其他周期的写法各成体系 | 取到空值或取到当前周期值 |
| 文件与导入 | 导出文件的扩展名与导入入口不同 | 文件进不去公式管理器 |
二、函数命名差异要靠平台自带的函数表核对
做通达信同花顺公式对比时,可行的做法不是凭记忆换名字,而是打开目标平台的函数说明,按用途反查。把源公式里用到的函数逐个抄下来,在旁边写上它的用途(求均值、求最大值、取历史值、求条件成立次数),再在目标平台的函数表里按用途找对应项。
按用途找比按名字找可靠,原因是同一个名字在不同平台可能指不同的东西。举个可以自己核对的例子:有的平台里 SMA 是简单移动平均,另一些平台里 SMA 是带权重参数的平滑平均。若按名字直译,参数表就会对不上:多出来的那个权重参数在源公式里并不存在。
{ 源写法:两参数 }
A:MA(CLOSE,20);
{ 目标平台若用三参数平滑平均,直译会缺一个参数 }
{ 需按目标平台的函数说明补齐或改用其简单平均函数 }
B:SMA(CLOSE,20,1);
三、参数顺序是能编译但算错的一类
参数顺序的问题比函数名更隐蔽。函数名错了会立刻停住,参数顺序错了照样能跑,只是结果变了。判断办法是找一个能手工验算的短样本:写一段只含一个函数的公式,用几根收盘价已知的 K 线手算出期望值,再和公式输出对一遍。
验证的顺序建议从小到大:先单独验证一个函数,再验证一行表达式,最后整段跑通。每加一层都保留一个可手算的对照点,出错时能立刻定位到刚加的那一层。
参数顺序核对完之后,通达信同花顺公式对比还要多看一眼函数的返回值形态。有的函数返回一条与输入等长的序列,有的返回一个标量,还有的在数据不足时返回空值。把返回标量的函数放进需要序列的位置,公式可能编译通过,但后续引用它的表达式会全部退化成同一个数。
| 核对层 | 可手算的对照点 |
|---|---|
| 单个函数 | 取 3~5 根 K 线的收盘价,手算均线或极值 |
| 单行表达式 | 把中间变量单独输出,比对数值 |
| 整段公式 | 与源平台的输出序列逐根比对 |
四、跨周期引用没有统一写法
引用其他周期的数据是跨平台改写里最难平移的一处。通达信里可以用带周期标记的引用写法取日线或周线的值,其他平台则各有各的函数或参数。这类语法在不同平台之间几乎没有相同的形态,只能按目标平台的说明重建。
重建时要连带核对两件事:一是取不到数据时的返回行为(是空值、0,还是沿用当前周期值);二是引用是否引入了未来数据。跨周期引用在回看历史时,若引用了尚未走完的周期,改写了历史信号,就属未来函数的一类。核对方法是把同一根 K 线在盘中与收盘后各算一次,看数值是否改变。
还有一处要实测的是数据起点。跨周期引用的历史深度受目标平台本地数据量的限制,本地只下载了较短区间时,公式在更早的 K 线上会返回空值。把公式输出与本地数据的起始位置对照一次,就能分清是写法问题还是数据问题。
五、文件与导入方式各成一套
通达信的公式导出文件与安装目录(T0002 目录下的公式库文件、PriGS.dat、gs_bak 备份目录)构成一套体系,其他平台并不通用。把通达信导出的公式文件直接放进别的软件里,目标软件不会识别。
导入通不过时,先分清是文件问题还是格式问题。文件问题指扩展名或封装类型不被目标软件接受,表现为列表里根本看不到;格式问题指文件能进去但内容是加密的或用了别的语法,表现为能看到名字、打开却没有可读的源码。这两类的处理方式完全不同。
通达信同花顺公式对比在文件这一层没有可平移的做法,因为各家的公式库结构与封装方式都自成一体。可行的路径是在目标平台上按原逻辑重新录入,再用可手算的样本验证一遍,而不是试图转换文件本身。
六、哪些内容不该直接搬
可平移的是算法结构:均线、极值、条件计数、历史取值这些通用运算,换个名字就能用。不宜直接搬的有三类,判断依据是它们在目标平台上有没有语义对等的实现,而不是名字看起来像不像。
- 平台专有的数据接口。依赖本机扩展数据、自定义板块或特定数据源函数的写法,目标平台没有对应物,重建的意义不大。
- 带未来函数的峰谷类算法。ZIG、PEAK、TROUGH 这类函数在不同平台的返回口径不一致,改写之后两边的历史信号会对不上,比对失去意义。
- 依赖周期粒度的常数。源码里写死 250、60 这类数字的,换到周期设置不同的平台上含义会变。
改写完成后建议留一份对照记录:源平台的输出序列、目标平台的输出序列、两边的参数表。记录留存的用处是数值出现差异时能立刻定位到是哪一步引入的,不必重新从头核对一遍。
通达信同花顺公式对比落到操作上,是一条先易后难的顺序:先核函数名,再核参数顺序,再核跨周期引用,最后处理文件与导入。前两步能用手算样本验证,第三步需要两边的输出序列并排比对,第四步取决于目标平台接受的格式。
本文只讨论公式语言的语法差异与改写核对方法,不涉及具体标的的判断,也不构成对任何公式效果的承诺。站内还有 公式编写与语法函数 里讲函数用法的条目、公式安装与导入 里讲导出文件与安装目录的条目、公式报错与卡顿排查 里讲编译提示原文的条目,可对照查看。
