通达信公式编写100例这一类资料,真正的价值不在「100 例」这个数字上。它是把常见需求做成了一批现成的表达式,而你要做的是从里面认出哪一条最接近自己的需求,再把它改到能用。跳过这一步直接抄,抄到手的大概率是一条语法没错、条件却不对的语句。
下面按「怎么挑 → 怎么拆 → 怎么改 → 怎么验」讲一遍。语法以通达信金融终端个人版为准,涉及函数在不同版本里的参数个数与可用性会有差异,动笔前先在自己软件里试算一次。
一、先分清「例子」和「模板」是两回事
通达信公式编写100例里的条目可以分成两类,混在一起看容易走错路:
| 类型 | 特征 | 怎么用 |
|---|---|---|
| 示例型 | 演示某个函数或某个语法的用法,条件本身很随意 | 照抄语法骨架,条件部分全部替换成自己的 |
| 模板型 | 给出了完整的需求到表达式映射,只是参数留空 | 核对需求是否一致,再替换参数 |
| 片段型 | 只写了判断的一条分支,没有完整的输出 | 补齐输出与边界判断再用 |
判断一条例子属于哪一类,看它有没有输出语句。有 `:` 或 `:=` 的完整赋值链,通常是模板型;只有一行条件判断没有输出的,多半是片段型。示例型的特征是注释里写着函数名,正文说的其实是那个函数在干什么。
二、需求拆分:一句话要拆成可写的条件
拿到的需求通常是一句自然语言,而公式只认数值之间的比较。这中间要过一道翻译。以「连涨三天之后出现缩量」为例,拆开是三个可写的部分:
{ 需求:连涨三天之后出现缩量 }
{ 第一段:连续三根收涨 }
连涨 := CLOSE > REF(CLOSE,1)
AND REF(CLOSE,1) > REF(CLOSE,2)
AND REF(CLOSE,2) > REF(CLOSE,3);
{ 第二段:当前成交量小于前一根 }
缩量 := VOL < REF(VOL,1);
{ 合成输出 }
条件: 连涨 AND 缩量, COLORRED;
拆的时候有三个位置最容易出分歧。「连续三天」是含当天还是不含当天,写法差一根 K 线;「缩量」的参照是前一根还是前若干根的平均,取值不同结果不同;「之后」是必须紧接还是允许间隔若干根,这决定了两个条件要不要用 AND 直接相连。这三个分歧没有标准答案,取决于你要圈的是哪一种形态,但必须先选定一个再写。
三、把例子改成自己的:三处必须要动的地方
拿到一条接近的通达信公式编写100例条目之后,动的地方通常集中在这三处:
- 字段名:例子里的
CLOSE、VOL换成你真正要比较的字段。常见的有开高低收、成交量、成交额,以及换手率等由这几个字段派生出来的量 - 参数值:例子里写死的阈值换成你的设定。注意阈值是设定值,不是统计结论,写多少取决于你要把条件卡在哪一档
- 周期数:
REF或MA后面的数字,例子给的几根要按你的需要改,改完检查一下最左侧的数据够不够取
{ 改前:例子给的原样 }
条件: C > MA(C,5);
{ 改后:字段、参数、周期各动一处 }
均线 := MA(CLOSE, 20);
条件: CLOSE > 均线 AND VOL > MA(VOL, 20);
{ 注意:MA 的周期数变了,最左侧取不到值的区间也跟着变长 }
三处里最容易被忘掉的是周期数。把 MA(C,5) 改成 MA(C,20) 之后,公式最左侧取不到均值的区间从 5 根变成 20 根,这一段如果没有输出,有些写法会直接画出断点。回看图表时先扫一眼最左边,比在右侧反复试要快。
四、语法能过不等于逻辑成立
通达信公式编写100例里的条目,抄过来编译能过,是因为语法本身是对的。语法对与逻辑对是两件事。下面几种情况,公式编译通过、也能输出,但输出的不是你要的那件事:
| 现象 | 问题出在哪 | 怎么发现 |
|---|---|---|
| 输出全是 0 或全空 | 条件在任何位置都不成立,可能某个比较永远为假 | 把条件拆成两半分别输出,看哪一半恒为假 |
| 输出全为 1 | 条件恒成立,通常是 AND 写成了 OR |
逐项输出各子条件,看是不是有一项覆盖了全部位置 |
| 只在一根上有输出 | 与 ISLASTBAR 之类的当前根判断混在了一起 |
把该判断单独输出一次,确认它出现在哪些位置 |
| 输出与实际形态不符 | 参照的字段或周期选错了 | 主副图同屏对照,逐根核对 |
IF 或 AND 的条件链里只要有一项在整段区间都不成立,整条链就不会亮。排查的办法是把链子拆开,一项一项输出看,而不是重写整条公式。五、上机验证的四步
- 编译:先在公式编辑器里编译通过,记下它报出的行号与提示原文(不同版本措辞会有差异)
- 单条件输出:把每个子条件单独画出来,确认各自亮在哪些位置,先排除掉恒真或恒假的项
- 合成输出:把子条件用
AND或OR合起来,看输出位置与你的预期是否一致 - 换区间复跑:换一段含不同形态的历史区间再跑一次,确认输出变化符合预期
四步里第一步的提示原文值得记下来。同一个问题在不同版本里的提示措辞不一样,记下你这一次看到的原文,下次再遇到同样的提示就能直接对号,不用重新猜。
六、把用过的例子管起来
通达信公式编写100例这种体量的资料,用过一遍之后如果没有整理,下次还是从头翻。整理的办法不必复杂,在公式管理器里按用途建几个分支,把改好的公式放进去,名字里带上它解决的问题。这样下次遇到同类需求,先在分支里找,找不到再回资料里翻,找例子的时间会短很多。
分支的划分按你自己的使用习惯定就好。可以按形态分,也可以按用途分,关键是同一类公式放在同一处,名字能让人一眼看出它做什么。名字里带上参照的周期与字段,比只写「公式一」「公式二」有用得多。
七、这份资料不能替你做的那件事
通达信公式编写100例给的是写法的参考,它不能替你决定条件要卡在哪一档。同一条「连涨三天」,阈值取三天还是五天,参照收盘价还是均价,都是设定。资料里给的那一组只是一个例子,不是推荐值。把它当成推荐值照搬,等于把别人设定的条件当成自己的标准,用起来会别扭。
本文讲的是选题资料的挑选与复用方法,只作技术研究口径,不构成对任何标的的判断。条件与参数的取值不同,输出的清单也会不同,这属于公式的设定,不属于行情的结论。
站内还有 通达信公式编写教程 的其他条目,指标原理与参数 里讲参数取值怎么定,报错与卡顿排查 里讲编译与运行出错怎么读提示,可对照查看。
