通达信指标公式编写的顺序,决定了后面要返工几次。常见的做法是打开编辑器就开始敲第一行,想到哪写到哪,编译报错了再补一句。这样写出来的公式,到了验证阶段会陷入一种局面:线条形态看着像回事,但没有任何办法说明它算的到底是不是你要的东西。

通达信指标公式编写可以拆成五个前后咬合的环节:需求定稿、字段与周期确认、变量分层、条件与绘图、验证。这五步里前两步是纸面上的工作,不碰编辑器。跳过这两步直接写第三、四步,返工量会成倍上升。文中写法以通达信 PC 版的公式系统为准,不同版本与券商定制版在函数签名、字段命名与参数上限上存在差异,请以你所用客户端帮助文档里的说明为准。

一、把需求写成一句可验证的话

第一步不是写公式,是把需求写清楚。判断标准是这句话能不能落到某个具体的数据位置上:「当价格与近期均线的关系从一种状态切换到另一种状态时,在该根上给出标记」。这种表述里的每一个成分都能对应到字段与函数,写完之后可以直接检查是否实现。

反过来,「做一个判断强弱转折的指标」就不是可验证需求。强弱指哪个量、转折指从什么到什么、标记打在价格的哪个位置,全都没有确定。按这种表述写出来的公式,写完也没法判断对不对。

需求写法 能否落地 缺什么
价格与均线关系切换时做标记 能 只差确认用哪条均线与周期
做一个趋势判断指标 不能 趋势的定义、输入字段、输出位置都未定
昨日量超过近五日均量时输出 能 只差确认均量窗口与阈值倍数
写个看着专业点的副图 不能 没有可检验的输出

把需求写成可验证的一句话要花几分钟,但这几分钟决定了后面所有步骤是否有终点。

二、字段与周期:在写第一行之前确认

确认两件事:这个需求要用哪些字段,以及公式挂在哪个周期上运行。这两项一旦定下来,后面所有语句的取数方式都跟着确定。

字段确认要具体到名字。价格类字段、成交量类字段、股本类字段的取值口径各不相同,同一个语义在不同的字段上会得到不同量级的结果。周期确认要考虑到公式会挂在哪类图上,日线上验证过的窗口参数直接搬到分钟图上,含义会整体偏移。

{取数方式在开头统一声明,后续语句都引用它}
{好处是周期与字段改了只需要改这一处}
本周期收盘:CLOSE;
本周期量:VOL;
流通股本:CAPITAL;

把取数集中到开头还有另一个作用:验证阶段要替换字段做对照时,改一处就够,不必在整段源码里找。

三、变量分层:通达信指标公式编写里最容易被省掉的一步

变量按依赖关系分成几层:基础取数层、中间计算层、条件判断层、输出层。分层的意义在于,验证时可以逐层输出,把错误限制在某一层内。

不分层写出来的公式,所有计算压在一两行里,验证时只能看最终输出,中间过程完全不可见。一旦结果不对,无法判断是取数错、计算错还是条件错。

{分层示例:每层只依赖上一层}
{第一层:基础取数}
价:CLOSE;

{第二层:中间计算}
快线:EMA(价,12);
慢线:EMA(价,26);

{第三层:条件判断}
差值:快线-慢线;

{第四层:输出与绘图,放在最后}

分层还有一个副作用:源码可读性提高之后,改动某一条线的参数时,影响范围一眼可判断。这在公式维护阶段价值很大。

四、条件与绘图分开写

条件判断的结果是一个布尔值,绘图的输入是价格位置与图形类型。这两件事应当分两步做,不要在一次函数调用里同时完成。

{先得条件,再用条件驱动绘图}
{条件层}
条件:差值>0 AND 前值<=0;

{绘图层:把条件落到价格位置上}
{绘图函数按对应版本帮助文档的参数顺序填写}
{思路是:以条件为第一个输入,以价格为位置输入}

分开写的好处是条件层可以单独输出成副图线(真值显示为 1,假值显示为 0),一眼就能看出条件在哪几根上成立。这与直接看绘图结果的差别很大,绘图结果受颜色、线宽与坐标范围影响,不容易数清根数。

把条件与绘图合并在一处,会让「条件判断错」与「图形绘制错」这两种问题的表现混在一起。分开之后,条件层用一根 0/1 的线就能验证,剩下的问题全部落到绘图层。

五、验证:按层往上,不要直接看成品

验证顺序与写作顺序相反,从最底层往上。先把基础取数层的每个变量单独挂到副图,确认数值范围合理;再加中间计算层,确认与手工计算的若干根一致;再加条件层,数一数条件成立的根数与预期是否相符;最后看绘图结果。

  1. 基础取数层:把每个变量单独输出,观察数值量级是否符合字段定义。
  2. 中间计算层:取最近三五根,手工按公式的算式算一次,与图上数值逐个对照。
  3. 条件判断层:把条件单独输出成 0/1 线,数清成立的根数。
  4. 输出与绘图层:观察线条位置、颜色与形状,与需求描述逐项核对。
  5. 边界数据:把图拉到历史早期,观察在没有数据或数据异常的区段上是否出现异常值。

第五步容易被忽略。上市初期的若干根上数据可能不完整,以这些根为窗口的计算会取到异常值。测过的例子是:一条以较长窗口求均值的线,在图表最左端会有一段明显偏离的线段,那不是公式写错,是那一段没有足够的历史数据。

六、验证通过之后要做的两件事

第一件是把参数提取出来。凡是反复要调整的数值,都应当从算式里抽成可调参数,而不是硬编码在语句中。这样调整时不必进入编辑器改源码。

{把硬编码的常量提成参数}
{原写法:把窗口长度写在语句里}
{改后:窗口长度作为参数声明,在调用界面调整}

{参数声明处:}
N := 5;

{语句里统一引用 N}
均量 := MA(VOL, N);

第二件是补注释。通达信公式的注释用花括号包裹,可以与语句写在同行,也可以单独成行。注释的用途是记录这一层的口径与假设,例如「这里的窗口与上方均线保持一致」「该字段单位是手,与下方金额字段不可互换」。几个月后再看这段源码,注释比代码本身更难重建。

七、通达信指标公式编写中的两类返工

第一类返工来自需求没写清,写到最后发现要的东西和最初的描述不一致。这类返工的时间成本最高,因为多数语句要重写。避免方式就是第一步那句话。

第二类返工来自字段与周期口径混用。同一个算式里混入两种周期口径,编译能过、结果不对。判断办法是把算式里每一个变量标注上它对应的周期,看有没有不一致的。相关写法可以对照 通达信公式编写教程 一栏;编译期与运行期错误的分开定位方式,见 报错与卡顿排查 一栏;公式是否值得保留的验证口径,见 指标回测与风险验证 一栏。

判断自己是否走在这个顺序上,有一个简单的自检:写第一行代码之前,能不能用一句话说出这个公式「在哪一根上、因为什么条件、输出什么」。说得出来,顺序就是对的;说不出来,先回去补第一步。

通达信指标公式编写不是把函数名连起来的过程,而是把一个模糊需求逐步收敛成一段可验证语句的过程。前两步在纸面上做,第三步之后才动编辑器,返工量会明显下降。到这里,这份流程走完一遍,下一段源码就可以按同样的顺序推进。

文中函数名与语法按通达信 PC 版公式系统的常见写法描述;不同版本与券商定制版在函数签名、字段命名与参数上限上存在差异,具体请以你所用客户端帮助文档为准。本文只讨论公式语法与编写方法,不构成任何投资建议。

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