把公式写进公式管理器、参数填好,打开选股界面挂上去跑一遍,名单里却没有自己在图上看到的那几条,断在哪一步?问「怎样利用通达信公式选股」,要查的位置不在公式的写法上,而在从条件到结果之间那条链路上:条件能不能被判定、挂到哪个入口、用哪一段数据去算。这三处有一处没对齐,结果就会偏。
下面按实际操作顺序讲六个环节:把想法翻成条件、条件在公式里的承载方式、入口上的三项设置、结果复核、数量偏多偏少的调整,以及本文不继续往下走的原因。语法与界面项以通达信金融终端个人版为准,不同版本的入口位置与措辞会有差异,操作前先核对自己软件里的那一处。
一、把想法翻译成可判定条件
可判定的意思是:这句话交给公式去算,能算出一个明确的结果,成立或者不成立。不可判定的意思是,这句话里有一个词在本地数据里找不到对应的字段,公式算到那里就无处落脚。
「收盘价高于二十日均线」是可判定的,把两个数取出来比大小即可。「走势强」不可判定,因为「强」字没说明跟谁比。要把它变成可判定的,得先补上参照物:是比前一根高,还是比均线高,还是比同期的某个基准线高。补完参照物再写成比较关系,才轮到语法的那一步。
下面这张表把同一类意图分成三种处理方向:能直接判定、补上参照物之后能判定、本地数据里没有对应字段因而无法判定。
| 想法 | 能不能做成可判定条件 | 对应的写法方向 |
|---|---|---|
| 量能比前一段时间大 | 能,把比较对象与倍数说清即可 | 当日成交量与 N 日均量的比值,写成一行比较关系 |
| 价格站到某条均线上方 | 能,均线周期提成参数 | 收盘价与均值的比较,周期不写死在正文里 |
| 走势强 | 补上参照物之后能 | 先定「跟什么比、看几根」,再落到数值比较 |
| 有资金进场 | 没有直接字段,只能替代 | 换成本地能算的量价替代量,并在注释里注明这是替代口径 |
| 主力在悄悄收货 | 不能,属于事后解释性说法 | 不作为条件,避免把解释当成判据 |
表里最后两行的处理方式是同一个道理:本地日线数据里有的字段才能被算。拿不到对应字段的说法写进公式,只能靠别的量替代,替代量算出来的东西和原话之间有一段距离,这一点要在公式注释里写明。
二、条件在公式里的两种承载方式
把条件写进公式时,有一处区分要先弄清楚:冒号还是冒号加等号。前者产生一条输出线,后者只产生一个中间变量。
{ 中间变量:写完只在公式内部参与计算 }
量比 := VOL / MA(VOL, 20);
{ 输出线:名字后面接一个冒号 }
放量: 量比 > 1.5;
{ 全是中间变量时,公式没有可读的输出 }
临时条件 := CLOSE > MA(CLOSE, 20);
差别落在结果字段上。输出线会生成一条可以被外部读取的结果,条件选股这类入口读的就是它:某根 K 线上这条输出成立,该品种被记入结果。中间变量只在公式内部流转,入口读不到它。一段公式里如果所有判断都写成了中间变量,最后没有一条输出线,条件选股就缺少可判断的对象,跑出来的结果自然是空的。
实际操作里这两种写法配合使用:中间过程写成中间变量,最终要交给入口判断的那一条写成输出线。怎样利用通达信公式选股,落到这一层只剩一句话:入口只认输出线。
输出线的名字也要留意。名字不要与函数名或者系统保留字重合,避开 CLOSE、VOL、HIGH 这类名称。名字重合时,公式可以顺利通过语法检查,取到的值却与预期不符,排查起来要花时间。改名的代价很低,先避开省事。
三、挂到选股入口时要设的三件事
公式写得对,入口上的设置不对,结果一样不对。把公式挂上去之前,下面三项各确认一次。
第一项是选股范围。范围里包含哪些市场、哪些板块,要不要把退市整理与特殊处理品种一起纳入,都要逐项看过。范围开大了,结果里会混进自己并不打算看的东西;范围开小了,正好落在范围之外的那一部分不会出现在结果里。
第二项是计算周期。公式里的周期是根数,不是自然天数。同一段 MA(CLOSE, 20),挂到日线上是二十根日 K 线,挂到分钟周期上就是二十根分钟 K 线。入口上的周期下拉项与公式设定的含义对不上,算出来的东西与预期差得很远。
第三项是数据完整度。条件依赖多少根历史数据,本地就要备好多少根。本地日线数据放在安装目录的 T0002 目录里,按市场分开存放。日线齐不齐有两处可以看:一处是系统菜单下的盘后数据下载界面,看该市场的日线是否下载过;另一处是把公式挂到主图上,看最左侧那一段是不是空白,空白段的长度与公式里最长的那个周期是同一量级。数据完整度不足时,条件在最左侧那一段上取不到值,判断自然不成立。
这三项都在界面上,确认一次花不了多少时间。怎样利用通达信公式选股卡在「公式写对了却没有结果」,卡住的位置就在这三项里。
四、结果复核:把选出来的名单拉回公式
跑出结果之后先别急着用。复核的第一步是把结果与条件对起来,确认每一条被记入的记录,成立的是哪一条条件。
做法是把中间过程临时改成输出线,逐条挂到主图上,看被记入的那根 K 线上到底是哪一条条件成立。也可以把逐条命中数量统计出来,看哪一条条件的命中数量与最终结果接近:
{ 逐条统计,看谁在决定结果规模 }
条件一: CLOSE > MA(CLOSE, 20);
条件二: VOL > MA(VOL, 5) * 1.5;
命中一: COUNT(条件一, 250);
命中二: COUNT(条件二, 250);
四个数放在一起看,数量与最终结果接近的那条条件,就是决定结果规模的那一条。复核的第二步是换一组参数再跑一遍。把均线周期从 20 改到 60,把量能倍数从 1.5 改到 2,结果数量会跟着变;变的方向与幅度是否对得上自己的预期,比结果本身更能说明公式有没有写偏。
第三步是换一段区间再看。同一组条件,在前一段与后一段上的命中数量如果相差很大,说明条件对区间敏感,使用前要把这件事记下来。区间敏感不等于公式写错了,它意味着换一段区间跑出来的结果,不能与本段的直接放在一起比。
五、结果偏多或者偏少时的收窄与放宽
怎样利用通达信公式选股走到这一步,能动的只有两处:条件之间的连接方式,以及阈值的大小。两处的影响方向相反,动手之前先想清楚要往哪一边走。
连接方式上,用 AND 把两条条件连起来,命中集合取交集,规模变小;用 OR 连起来,命中集合取并集,规模变大。括号可以改变连接的顺序,需要按组判断时用括号把同一组圈起来,不依赖软件默认的优先级。
阈值上,把比较关系往严的一侧调,结果变少;往松的一侧调,结果变多。这里有一处容易忽略:把「大于」改成「大于等于」属于放宽,看上去只差一个等号,命中集合里会多出恰好取等的那一批。写条件时要想清楚取等的那些算不算在内,写完再回看一遍。
调整的顺序从宽到窄更好用:先只挂一条条件跑一次,记下数量;再逐条加上去,每加一条记一次。这样能看出每一条条件的贡献,也能避开一次性收窄到底、结果归零之后无法判断是哪一条的问题。
这一节的调整对象是条件的宽松程度,与任何标的的判断无关。把结果数量调到好看,也不改变公式只是在做数值比较这一件事。
六、接下来要做的三步
看完这一篇,落到手上的动作是三步。第一步,把自己想筛的东西逐条写下来,每一句后面标上「跟什么比、看几根、阈值取多少」,写不出来的那几句先划掉。第二步,打开公式管理器,确认自己的公式里有一条输出线承担最终判断,中间过程写成中间变量,并把输出线的名字改成不与函数名冲突的写法。第三步,挂到选股入口时,把范围、周期、数据三处各看一遍,跑出结果之后换一组参数再跑一次,把两次的数量记在旁边。
这三步做完,怎样利用通达信公式选股就有了一条可重复的过程:条件在公式里,输出线在入口上,数据在本地备齐,结果复核过一次。后面再改条件,按同样的顺序走一遍即可,不必每次重新想从哪里下手。
本文讲的是条件书写、入口设置与结果复核的操作口径,只作技术研究口径,不涉及也不构成对任何标的的判断。
站内还有 通达信选股公式与预警 的条目,通达信公式编写教程 里讲语法基础,指标回测与风险验证 里讲结果怎么验证,可对照查看。
