「启动」这个词本身不是公式能判断的东西,这是写通达信公式启动信号之前要先接受的一件事。它说的是价格从一段盘整转成向上走的那一下,而公式只能判断「某个数值在这一根上是否越过另一个数值」。写公式做的事,是把这句描述翻译成若干个可判断的越过关系。
下面按「翻译 → 定阈值 → 判读 → 边界」讲一遍。语法以通达信金融终端个人版为准,函数在不同版本里的可用性与参数会有差别,动手前先在自己软件里试算。
一、把「启动」翻译成越过关系
通达信公式启动信号的翻译,可以落在三个可写的关系上:
| 说法 | 可翻译成 | 写法方向 |
|---|---|---|
| 价格起来了 | 当前价越过了某个参照 | 收盘价上穿均线或前高点 |
| 量起来了 | 当前量越过了近一段均量 | 成交量上穿均量线,或达到均量的若干倍 |
| 持续了一段 | 上述状态连续成立了若干根 | 连续判断或计数 |
三个关系里,前两个各自只有一条越过关系,第三个是把前两个的结果再数一遍。翻译的时候把它们分开写,每一段单独可测;合成之后再调,出了问题不容易定位。
{ 三段分开写,各自可测 }
价越 := CROSS(CLOSE, MA(CLOSE, 20));
量越 := CROSS(VOL, MA(VOL, 5));
{ 合成:两个越过同时成立 }
启动 := 价越 AND 量越;
条件: 启动, COLORRED;
CROSS 判的是这一根相对上一根的越过,不是「在上面」。用 CROSS 与用 > 得到的是两种输出:前者只在越过的那一根亮,后者只要在上面就持续亮。先想清要哪一种,再选函数。二、阈值怎么定:先看分档,再看分布
通达信公式启动信号里凡是带倍数的条件,都要先定倍数卡在哪一档。这里要区分两类数字:一类是设定值,比如均量倍数取 1.5;另一类是规则值,比如涨跌幅分档取 10%。两者都不是从数据里算出来的结论,写多少取决于你要把条件卡在哪一档。
{ 设定值:均量倍数与周期数都是设定 }
均量 := MA(VOL, 5);
量越 := VOL > 均量 * 1.5; { 1.5 是设定值 }
{ 规则值:涨跌幅分档属于规则,不是统计结论 }
涨停价 := ZTPRICE(REF(CLOSE,1), 0.1);
定倍数的办法可以分两步。先按自己的观察把范围收窄到一个小区间,再在这个区间里逐档试,看信号数量与位置随倍数怎么变。这样做比一上来就精确到小数点后两位有用,因为不同标的的成交量基数差别很大,一套倍数硬套到全部标的上,会出现有些标的几乎不出信号、有些标的天天出信号的情况。
三、交叉与持续:两种判读方式
通达信公式启动信号写完之后,判读上要分清输出的两种形态:
| 输出形态 | 由什么写法得到 | 怎么判读 |
|---|---|---|
| 单根亮起 | 用 CROSS 或在条件里加「上一根不成立」 |
亮的那一根是越过的位置 |
| 连续亮一段 | 用 > 或用 EVERY 判连续 |
亮的那一段是状态持续的位置 |
两种形态对应两种用法。想找出「刚起来的那个位置」用第一种,想描述「一直在上面的那段」用第二种。把它们混在一份清单里,后面的观察就没法统一:一份清单里既有单点又有区间,逐条看的时候口径不齐。
四、失效情形:条件成立不等于那一段出现
通达信公式启动信号的输出是满足条件的位置,这里有几处必须写清的边界:
- 成立是事后的:公式用的收盘价、成交量在收盘后才固定,历史区间上看起来成立的位置,在当时那一刻未必成立
- 复权口径影响结果:除权除息会让均线与前高点都发生变化,公式挂载的图表口径要与你看图的口径一致
- 停牌与数据不足:停牌段没有 K 线,
MA与CROSS在这附近取到的数失真;上市初期数据根数不足,均线还没形成 - 依赖当前根的写法:用了只有在数据结束时才知道的信息,会让历史看起来更顺,但在当时算不出同样的结果
ISLASTBAR 一起输出,看两者是否同步出现;同步出现说明公式依赖了末根信息,这样的输出在历史区间上不能用来判断当时那一刻的结果。五、验证的次序
- 逐段输出:价格越过与量能越过各画一次,确认各自亮在哪些位置
- 合成输出:用
AND合起来,看合成后亮法落在哪一类 - 换函数对照:把
CROSS换成>再跑一次,看两种输出的差别,确认自己要的是哪一种 - 数信号数量:在同一段固定区间里数一次,改一行就再数一次
- 查末根依赖:把信号与
ISLASTBAR一起输出 - 换区间复跑:换一段含盘整与反转的区间,看输出形状有没有变化
次序里第三步容易被跳过,但它往往是差异最大的一步。
阈值与周期的关系也值得再确认一次。周期数变大之后,均线的位置会变得更平滑,价格越过它的次数会减少;倍数变大之后,量能条件更难成立。两者都是「把条件收紧」,但它们收紧的是不同的东西:一个收紧的是参照线本身的位置,一个收紧的是越过的高度。同时调两个,你就说不清输出的变化是哪一个带来的。改的时候一次只动一个,这是排查的基本要求。
把公式接到一个固定的观察流程里,效果会比单次调试更好。
还有一处容易被忽略:条件里的时间参照。用 CROSS 写的越过关系,与它前一根的取值强相关;把周期从日线换到更细的周期,同样的写法会给出数量级不同的输出。这不是公式的问题,是「一根」在不同周期下代表的时间长度本来就不同。换周期时把这一点重算一次,前后两次的数量才有可比性。
公式写完之后,建议留一份对照记录:同一段区间、同一组参数,
另一件值得留意的事是同一个意图可以有不止一种写法。价格越过均线,既可以写成 CROSS(CLOSE, MA(CLOSE,N)),也可以写成「当前在均线上方且上一根在均线下方」这样两句比较的组合。两种写法在多数位置给出相同结果,但在均线取值相等的那一根上会分叉。写的时候选一种并记住它的边界,不要在不同位置混用两种。
顺便提一句周期与参数的双重影响。周期变了,均线的平滑程度变了;参数变了,均线的位置也变了。两者叠加时,输出数量的变化可能比单改一项大很多。调整的时候一次只动一项,另一项固定,这样每一步的因果链是清楚的。
把 CROSS 版本与比较符号版本的输出各数一次,两者之间的差值记下来。这个差值就是你选择写法所带来的直接影响,后面调阈值时用它作参照,比凭印象调整可靠。
每次都用同一段区间、同一组参数、同一个复权口径跑一遍,记下信号数量与位置,连续记几周就能看出条件在不同市场状态下的表现差异。这个记录本身不构成判断,它是你后来调整阈值的依据。
同一个「起来」的意图,用 CROSS 与用 > 写出来的输出,数量能差一个量级。先把这个差异看清,后面关于阈值与周期的调整才有意义。
本文讲的是条件翻译、阈值设定与失效边界,只作技术研究口径,不构成对任何标的的判断。条件与参数的取值属于设定,不同设定对应不同的清单,这属于公式的设定,不属于行情的结论。
站内还有 量价形态与信号拆解 的其他条目,通达信公式编写教程 里讲条件表达式与函数的用法,指标回测与风险验证 里讲怎么核一段历史区间,可对照查看。
