公式管理器里点「导入公式」,选中一个文件,点确定,公式就进去了。整个过程没有一步在做校验:文件从哪来、里面是文本还是二进制、是否与已有公式重名,软件都不问。风险就产生在这一步。
通达信公式导入风险可以拆成四层,一层比一层难察:文件形态(后缀)、是否含可执行内容、源码是否可见、是否覆盖了已有公式。下面按这个顺序讲,每一层都给出可以当场做的检查动作。
一、先看后缀:同一句「导入公式」,背后是四种形态
公式文件的后缀不止一种,含义差别很大。列在下面这张表里,看后缀就能先做一次粗筛。
| 后缀 | 形态 | 导入后能看到什么 | 需要留意的点 |
|---|---|---|---|
.tn6 |
公式包,可含多条公式 | 源码与参数 | 包里可能有同名公式,导入即覆盖 |
.tne |
加密导出件 | 只有公式与参数界面,看不到源码 | 无法测试、无法改参数以外的内容 |
.exp |
文本导出件 | 源码,可以用文本编辑器打开 | 编码不对会显示成乱码 |
.dll |
动态链接库 | 函数名的调用结果 | 二进制可执行,不属公式文本 |
判断方法很直接:把文件拖到记事本或者任意文本编辑器里。能读出可辨认的公式语句,说明它是文本形态;打开是一片乱码或者只有几个不可读字符,说明它是二进制。这一条动作不需要任何工具,却能把四类里的两类先分开。
文本形态不等于安全,二进制形态也不等于不能用。区别在于你能看到什么、能验证什么。看不到源码的公式,只能观察它画出来的线;看得到源码的公式,可以逐行读、可以改、可以在公式管理器里点「测试公式」看中间量。
二、.dll 与公式包不是一类东西
公式包的导入是往 T0002 目录下的公式库文件里写记录:PriGS.dat 存公式主体,PriCS.dat 存参数,PriLoc.dat 存公式名索引。这三个文件是数据,软件读它们、解释它们,不会执行它们。
.dll 是另一种东西。动态链接库由操作系统加载,代码在里面跑,行为不受公式语法约束。通达信对 DLL 的使用有自己的接口约定,供扩展函数调用;一份来历不明的 DLL 放进目录并被加载,它做的事情就超出了「画一条线」的范围。
.dll 说这是「指标加速插件」,这句话本身就不构成可以接受的说明。还有一类常被混进公式包里的东西:说明文档里附带的批处理或者安装脚本。这类文件与公式无关,别顺手双击。
三、加密公式:看不到源码,也就没法验证
加密导出的公式,导入后可以在图上看到线,可以调参数表里已经开放的参数,但看不到源码。这一层限制带来两个具体后果。
一个是不能自查未来函数。公式里是否用了 REFX 这类向前取值、是否用了 ZIG 这类会重绘的写法,只能读源码才知道。看不到源码,图上每根 K 线都在变,也说不清是哪一行造成的。
另一个是不能核对参数含义。参数表里有一个叫「N」的项,默认 20,它到底作用在均线上还是作用在回看窗口上,源码里才写得清楚。只凭参数名去猜,调出来的结果与作者的本意可能不是一回事。
还有一层与版本相关,不属于加密本身,却常被算在同一个问题里。加密件是在某一个版本上导出的,导入到差异较大的版本上,可能出现参数名对不上、输出线少一条。这类情况不弹报错,只在图上表现为线变少了、数值量级不对。核对办法是把参数表逐项与本机输出区对照,缺哪一项就说明这一版对不上。
站内 指标资源选择与会员 里讲过源码透明度为什么被放在选购检查的第一位,那是从选择角度讲的;从导入角度讲,加密文件的可验证性缺失是同一个事实的另一面。
四、同名覆盖:最容易踩、也最容易防
同名覆盖是通达信公式导入风险里最隐蔽的一层,表现为「导入成功,原来的公式却没了」。导入时遇到同名公式,软件的做法是替换而不是并存。替换掉的是原来那份,包括它的参数设置。如果被替换的那份是你自己改过参数、调过语句的版本,改动就没了。
能防的地方有两处,都在导入之前做。
第一处是改名字。把对方给的公式在导入前先确认它的内部名称,与本机已有列表比对一遍;重名的,先把本机那份导出留档,或者给新导入的这份换个名字。公式名在公式管理器的编辑界面里可以直接改。
第二处是整体备份。公式库那几个文件在 T0002 目录下,整个目录复制一份到别处,就是一份可以直接换回去的备份。软件自身也维护了备份目录 gs_bak,需要恢复时按官方说明把对应的库文件取回来即可。
T0002\PriGS.dat 公式主体(加密存储) T0002\PriCS.dat 参数 T0002\PriLoc.dat 公式名索引 T0002\gs_bak\ 软件自带的备份目录
这四个位置记下来,遇到「导入之后原来的公式不见了」这类情况,就不必从头猜。搬回去的顺序是先把当前目录整体另存,再从备份里取回对应的文件,取回之后重启客户端。
五、导入前后的检查清单
把上面四层收成一张按顺序执行的清单,每一步都有明确的判断结果。
- 看后缀:
.tn6、.tne、.exp属公式文件;.dll属可执行文件,另外对待。来源不明的二进制不导入。 - 看能否读源码:文本编辑器能打开,就逐行看一遍,重点找
REFX、ZIG这类会用到未来数据或者会重绘的写法。 - 看是否重名:与本机公式列表比对,重名的先留档再导入,或者改掉新公式的名字。
- 备份 T0002:整个目录复制一份,记下复制的时间点。
- 导入后测试:
Ctrl+F打开公式管理器,选中刚导入的公式,点「测试公式」,输出区会逐行给出中间量;测试不通过的公式不要挂到图上。 - 核对输出:把公式挂到一张熟悉的票上看,输出线的量级、条数与作者描述是否一致。不一致先查周期与参数,再查是否被同名公式替换。
这六步里花时间的是第二步。语句多的公式不必逐行啃,先看三处:有没有向前取值、有没有会重绘的写法、参数是否全部提到参数表。这三处看完,基本能判断这份源码是可以拿来改的,还是只能当成一个黑箱指标挂着看。
这六步做完大概几分钟,能挡掉的是可枚举的那几类问题:形态不对、源码不可见、覆盖了原公式、导入后有语法错误。挡不掉的是公式逻辑本身是否合理,那要靠读源码与样本核对,是另一件事。
通达信公式导入风险最终落在两句话上:能读源码的先读源码,不能读源码的先备份再导入。这两条做到了,剩下的风险属于「用错了指标」而不是「装坏了软件」,性质完全不同。
延伸阅读:通达信公式安装与导入 讲导入的操作步骤与失败排查,通达信公式报错与卡顿排查 讲导入后不显示、报错的分层查法。
本文只作技术研究口径,内容讲的是文件形态、目录结构与验证方法,不涉及也不构成对任何标的的判断。
