通达信选股公式源码挑选的第一个动作不该是从头往下读语句。打开一段没有注释、变量名是 A1 到 Z9 的源码,读到哪里不懂就卡住,是效率最低的一种读法。更省力的顺序是先找这段源码的输入与输出:它拿了哪些字段,最后画了什么线出来。输入输出定下来,中间那堆变量的作用范围就缩小了,逐段推断才有可能。
这里说的挑选,不是挑一段拿来用的源码,而是拿到一段源码后判断它值不值得用、以及它能不能被看懂。判断依据有四项可以逐个核。文中写法以通达信 PC 版的公式系统为准,不同版本与券商定制版在函数签名与字段命名上存在差异,请以你所用客户端帮助文档里的说明为准。
一、先看输入与输出,再看中间
读源码的顺序应当是:找输出线、找输入字段、再看中间计算。输出线在语句里带冒号,是公式画到图上的那条线;输入字段是 CLOSE、VOL、CAPITAL 这一类直接取行情或股本的内置字段。
{输出线与输入字段,是读源码的两个坐标}
输出线:表达式; {冒号 = 画线}
中间量:=表达式; {等号 = 不画线的中间变量}
{输入字段一般在算式的最底层出现}
快:EMA(CLOSE,12);
慢:EMA(CLOSE,26);
把输出线与输入字段列出来,就得到这段源码的骨架:它把哪几个原始数据,经过哪些加工,最后呈现成一条什么形态的线。骨架清楚了,中间那些命名随意的变量才能在骨架里找到位置。
| 先找的东西 | 怎么认 | 找到之后有什么用 |
|---|---|---|
| 输出线 | 语句里带冒号,会画到图上 | 确定公式的最终产出是什么 |
| 输入字段 | CLOSE/VOL/CAPITAL 这类内置名 |
确定它的数据来源与量级 |
| 参数声明 | 公式头部可调的那几个数值 | 确定哪些数字会被改动 |
| 绘图调用 | 画柱、画图标、写文字类函数 | 确定视觉产出与可读性 |
二、通达信选股公式源码挑选的第一项判据:口径是否写明
第一项判据是源码有没有把口径写清楚:用的窗口长度是多少、字段是哪个、有没有跨周期引用、复权怎么处理。这些信息有的写在注释里,有的只能从算式里推。
拿不出这些信息的源码,用起来会有一类特定风险:它在原作者用的数据上表现正常,换到你的数据上会得到量级不同的结果,而你不知道差异从哪来。
三、第二项判据:变量命名能不能推断用途
变量命名是可读性的直接指标。用 快线、均量、信号 这类名字,比用 AA、BB1 好读得多。这一点在挑选源码时价值很高,因为可读性决定了后续能不能改动。
{命名可推断的源码}
均价线:MA(CLOSE,20);
当前量:VOL;
量能比:当前量/MA(当前量,5);
{命名不可推断的源码:同样的计算,读起来要逐行反推}
AA:=MA(CLOSE,20);
BB:=VOL;
CC:=BB/MA(BB,5);
两段源码的计算完全相同,但第一段可以直接改动窗口参数,因为你知道每个变量在算什么;第二段要先把每个名字对应回含义,才能动手。
四、第三项判据:有没有结构性冗余
结构性冗余指同一条计算被重复写了两遍、或者一个中间变量声明之后没有被任何语句引用。这类源码是在多次修改中累积出来的,可读性与可维护性都不好。
{冗余示例:同一个中间量在两处重复计算}
{第一段}
快线1:EMA(CLOSE,12);
判断1:CLOSE>快线1;
{第二段:同一个均线又算了一遍}
快线2:EMA(CLOSE,12);
判断2:CLOSE>快线2;
{清理后:算一次,两处引用}
快线:EMA(CLOSE,12);
判断甲:CLOSE>快线;
判断乙:CLOSE>REF(快线,1);
发现冗余的办法是查变量使用次数:一个中间变量声明之后,在后续语句里出现的次数是一,说明它只被用了一次,可以考虑合并;出现零次,说明它是残留。
五、第四项判据:参数有没有提取出来
参数化的源码,把窗口长度、阈值这些会调整的数值放在了公式头部的参数位,调用时能在界面上直接改。参数写死在算式里的源码,每次调整都要进编辑器。
| 写法 | 调整成本 | 对挑选的影响 |
|---|---|---|
| 窗口长度作为参数声明 | 调用界面直接改 | 可反复试验,适合留下 |
| 窗口长度写在算式里 | 每次进编辑器改源码 | 试错成本高,改动意愿低 |
| 阈值带说明 | 知道改动的边界 | 能判断改动是否安全 |
| 阈值无说明 | 只能试 | 容易改出无效范围 |
通达信选股公式源码挑选这一项上,参数化程度的高低,直接决定了这段源码是「只能看」还是「能改着用」。前者用一次就搁置,后者可以持续调整。
六、把四项判据合成一张核对表
拿到一段源码,按下面四项逐个核。四项都过的,值得留下来细读;有两项不过的,读它的时间成本可能高于自己重写。
- 口径是否写明:窗口长度、字段名、跨周期引用、复权处理有没有交代。
- 命名能否推断:变量名读起来能不能还原出它的含义。
- 有没有结构性冗余:同一计算是否重复,中间变量是否被引用。
- 参数是否提取:会调整的数值在参数位还是在算式里。
这四项是按投入产出排的序。第一项不过的,后面三项再好也不值得读,因为读懂了也无法判断它算得对不对。
七、读懂之后的第一件事是复算
源码读懂之后不要直接改成自己的用法,先做一次复算:取最近一两个数据点,按源码的算式手工算一遍,与图上数值对照。这一步能发现三类问题:算式里有用错单位的地方、窗口参数的写法与理解不一致、以及绘图函数的位置参数与预期不符。
{复算示例:把源码的核心算式抄出来单独跑}
{与原源码对比同一个数据点上的取值}
参考线:MA(CLOSE,20);
测试输出:参考线;
{手工算法:把最近 20 个收盘价加起来除以 20}
{与图上 参考线 的最后一个数值比对}
复算之后再改动,改动范围会缩小。这一步的时间是几分钟,但能省掉后面反复试错的过程。相关写法可以对照 通达信公式编写教程 一栏;源码能不能改成自己的版本所涉及的信息安全核对,见 指标资源选择与会员 一栏;改动后需要做的验证项,见 指标回测与风险验证 一栏。
通达信选股公式源码挑选的实质,是把「这段源码能不能被我说清楚」当作第一判据。说得清输入输出、说得清口径、说得清参数在哪,这段源码才有改动价值;说不清的话,读与改的时间加起来超过重新写一遍。
文中函数名与语法按通达信 PC 版公式系统的常见写法描述;不同版本与券商定制版在函数签名、字段命名与参数上限上存在差异,具体请以你所用客户端帮助文档为准。本文只讨论源码读法、口径核对与资源取舍,不构成任何投资建议,也不对任何第三方源码的效果作评价或保证。
