公式语法基础
同花顺公式本质是对一组「价格序列」做计算——每根 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(金叉) |
BARSLAST(X) | 上一次 X 成立到当前的周期数 |
BARSCOUNT(X) | X 从第一个有效值到当前的周期数 |
COUNT(X, N) | 过去 N 周期内 X 成立的次数 |
EVERY(X, N) | 过去 N 周期内 X 是否一直成立 |
EXIST(X, N) | 过去 N 周期内 X 是否至少成立一次 |
BETWEEN(A, B, C) | A 是否在 B 和 C 之间 |
RANGE(A, B, C) | A 是否在开区间 (B, C) 内 |
例:金叉后 5 天内:
金叉 := CROSS(MA(CLOSE, 5), MA(CLOSE, 20));
五天内金叉 := EXIST(金叉, 5);
历史与统计
HHV(CLOSE, 20) { 20 日内最高价 }
LLV(CLOSE, 20) { 20 日内最低价 }
SUM(VOL, 5) { 5 日成交量之和 }
MA(CLOSE, 10) { 10 日移动平均 }
详见 技术指标函数。
引用与联动
REF(X, N):取 X 的 N 周期前的值。#CALL:跨合约 / 跨周期引用(同花顺部分版本支持)。"INDEXC":引用大盘指数收盘价(带引号的字符串形式)。
注释
{ 这是花括号注释,可跨行 }
// 这是双斜杠注释,到行尾
两种都支持,推荐 { },与通达信、文华财经一致。
常见陷阱
:vs:=:写错会让本应画线的指标不显示,或本不该画线的中间变量把图搞乱。- 未来函数:任何引用了「未来」数据的写法(如某些
ZIG、PEAK、TROUGH)在回测里会神准但实盘无效。新手避开这些函数。 - 序列对齐:所有运算都按 K 线对齐,不同周期的数据混用要先
REF/#CALL拉到同一周期。 - 空值:上市首日
REF(CLOSE, 1)取不到值,需用BARSCOUNT判断是否有足够历史。
语法核心就是这些。下一章 行情与数据函数 把同花顺特色的五档盘口、大单统计、ETF 数据等函数列全。