公式语法基础

通达信公式本质是对一组「价格序列」做计算——每根 K 线都算出一个值,画出来就是指标线。 本章把语法拆成几个最小零件:赋值、输出、参数、运算符、条件、注释。掌握这些,绝大多数公式都能读懂、改写。

赋值 := 与输出 :

最关键的一组区别:

MA5 := MA(CLOSE, 5);     { 赋值:算出来存到 MA5,不画线 }
MA20: MA(CLOSE, 20);     { 输出:算出来,并画一条线 }
  • := 只计算、不画线,给中间变量用。
  • : 计算且画线,给最终要看到的指标线用。
  • 每条语句以 ;(英文分号)结尾。

一条公式里可以有多个 :=,也可以有多条 : 输出(画多条线)。

参数

在公式编辑器的参数区定义可调参数(名 / 最小 / 最大 / 缺省),代码里直接用名字引用:

{ 参数:N 1 100 20 }
MAN: MA(CLOSE, N);     { N 在使用时可调,无需改代码 }

参数让你的公式更通用——同一个均线公式,调参就能切换周期。

数据:开高低收量

行情数据是公式的原料:

写法含义
CLOSE / C收盘价
OPEN / O开盘价
HIGH / H最高价
LOW / L最低价
VOL / V成交量
AMOUNT成交额

这些都是「序列」——每根 K 线一个值。要取历史值用 REF,如 REF(CLOSE, 1) 是昨日收盘。

运算符

算术:  +  -  *  /
比较:  >  <  >=  <=  =  <>
逻辑:  AND  OR  NOT        (也支持 &&  ||  ! )

比较和逻辑运算的结果是「条件」:成立为 1,不成立为 0。

条件:IF

{ 阳线收盘价高于开盘价,否则取开盘价 }
实体 := IF(CLOSE > OPEN, CLOSE, OPEN);

IF(条件, 成立时取A, 否则取B) 是最常用的条件函数(三元)。复杂的多分支可以用嵌套 IF

通达信也支持语句式 IF 条件 THEN 语句;,新手阶段用函数式 IF(...) 已经够用。

常用判断函数

函数含义
CROSS(A, B)A 上穿 B(金叉)
EVERY(条件, N)过去 N 周期条件全成立
EXIST(条件, N)过去 N 周期条件至少成立一次
COUNT(条件, N)过去 N 周期条件成立次数
BARSLAST(条件)距离上次条件成立的周期数
HHV(X, N) / LLV(X, N)过去 N 周期 X 的最高/最低

注释

{ 这是注释,大括号包起来,可以跨行 }

注释不参与计算,用来解释代码。

一个综合小例子

把上面的零件拼起来——「均线多头排列 + 放量」条件:

MA5  := MA(CLOSE, 5);
MA20 := MA(CLOSE, 20);
多头 := MA5 > MA20;                 { 短期在长期之上 }
放量 := VOL > MA(VOL, 5) * 1.5;     { 量大于 5 日均量 1.5 倍 }
结果: 多头 AND 放量;                { 同时满足 → 输出 1 }

结果 为 1 表示「多头排列且放量」,为 0 表示不满足。这正是条件选股公式的核心思路。

小结

  • := 赋值不画线,: 输出画线;语句以 ; 结尾。
  • 参数在编辑器参数区定义,代码里直接用。
  • 行情数据用 CLOSE/OPEN/HIGH/LOW/VOL,历史用 REF
  • 条件用比较/逻辑运算 + IFCROSS/EVERY/EXIST/COUNT 是高频判断函数。
  • 注释用 { }

能看懂上面「多头+放量」这段,你的语法就过关了。接下来认识具体函数: 行情与数据函数