通达信多头选股公式的难点不在函数,而在”多头排列”这四个字本身没有被定义清楚。它是一句形态描述,机器不认识形容词。写公式的过程,本质上就是把这句描述翻译成几个能算出成立或不成立的比较式;翻译得含糊,公式照样能编译通过,只是返回的清单会离你的本意很远。
下面按条件拆解、参数设定、公式写法、选股器设置、结果复核、失效场景六步走一遍。文中提到的菜单与目录以通达信金融终端个人版为准,券商定制版的名称可能不同。全文只讨论条件怎么写成表达式、结果怎么核对,不构成任何参与与否的建议。
一、把”多头排列”拆成三件可计算的事
描述性说法与计算式之间有一一对应的关系。先把对应关系列清楚,再动手写,能省掉后面反复调整的功夫。
| 形态描述 | 可计算的形式 | 需要注意的地方 |
|---|---|---|
| 短中长期均线依次排列 | MA5 大于 MA10,MA10 大于 MA20,MA20 大于 MA60 |
三条不等式必须同时成立,用 AND 连接 |
| 价格站在均线之上 | 收盘价大于最短周期均线 | 用收盘价还是最高价,会改变条件的严格程度 |
| 排列方向向上(可选) | 最短周期均线大于它上一根的值 | 加上这一条会把横盘中的排列排除掉 |
三条里前两条是必要的,第三条按需要决定。少写第三条,横盘整理阶段只要均线顺序偶然成立就会被选中;加上第三条,条件成立的位置会明显减少,但也更容易漏掉刚转向的那一段。这两种取法没有对错,只有取舍,选定之后要清楚自己选的是哪一种。
二、条件与参数:四个周期从哪里来
通达信多头选股公式里用到的周期,建议做成参数而不是写死在源码里。参数在公式编辑器的参数表里定义,填四列:参数名、缺省值、最小值、最大值。
| 参数名 | 缺省值 | 最小值 | 最大值 | 作用 |
|---|---|---|---|---|
| N1 | 5 | 3 | 20 | 最短周期均线 |
| N2 | 10 | 5 | 30 | 次短周期均线 |
| N3 | 20 | 10 | 60 | 中周期均线 |
| N4 | 60 | 30 | 250 | 长周期均线 |
做成参数之后有两个直接好处:一是可以不改源码就换一组周期试算,二是参数表里的最小值与最大值会限制输入框的可填范围,避免把 N4 填成 5 造成长短期均线取到同一条线。缺省值是打开公式时输入框里预先填好的数,不是你使用的数,改完要确认编辑器里读取的是哪一组。
三、完整公式与写法要点
下面是上面三条的完整写法。中间变量用 := 赋值,最后一行用 : 输出,这一处写反了会报输出过多或变量未定义。
MA1:=MA(C,N1);
MA2:=MA(C,N2);
MA3:=MA(C,N3);
MA4:=MA(C,N4);
{ 均线依次排列:三条不等式同时成立 }
排列:=MA1>MA2 AND MA2>MA3 AND MA3>MA4;
{ 价格站在最短周期均线之上 }
站上:=C>MA1;
{ 排列方向向上:把横盘中的偶然排列排除 }
向上:=MA1>REF(MA1,1);
多头: 排列 AND 站上 AND 向上;
几处容易写错的地方:
- 均线函数必须带周期参数,
MA(C)会直接报操作数与函数参数不匹配。 AND两侧都要是能判断成立与否的表达式,写成MA1>MA2>MA3这种连写,编译器按从左到右依次比较,结果不是你以为的那个意思。- 中间变量名不要与函数名或内置变量重名,重名会被判为定义重复。
- 用
REF取上一根的值时,图表最左边那一段没有上一根可取,那几根上条件不成立,这是正常现象。
四、挂进条件选股器:三处设置加一项数据检查
公式写通只是前半段,通达信多头选股公式真正跑出清单要靠条件选股器。这一层有三处设置和一项数据检查,任何一处不对,返回都可能是空列表。
4.1 公式类型
这套源码的最后一行是逻辑输出,所以归条件选股分支。把它放在技术指标分支里编译也能过,但条件选股器里找不到它。
4.2 选股周期
选股器有自己的周期设置。公式里的 MA(C,N) 取的是当前周期的收盘价,选股器设成分钟周期时,参与比较的每一根 K 线的含义都变了,条件成立的位置也随之改变。要在别的周期上使用,需要写清周期后缀,格式是指标名.语句名#周期:
"KDJ.J#DAY"(9,3,3); ← 在别的周期里取用日线的 J 值 "MACD.DIF#WEEK"(12,26,9);
4.3 选股范围与日期
范围参数决定在哪些板块、哪个市场里找。范围没选或选错,返回空列表是正常结果。另有一项是选股基准日期:默认按最新交易日判断,也可以指定到历史某一天跑,复核时用得到。
4.4 数据完整性
参与计算的数据来自本地。需要用到的周期数据没有下载齐,或者该品种有过长期停牌,参与计算的 K 线根数不足,条件同样成立不了。补数据的入口在系统菜单里:系统 → 盘后数据下载。
五、结果复核:对不上时查四个方向
- K 线根数不够:N4 取 60 时,上市时间短、或者中间长期停牌的品种算不出长周期均线,条件不会成立。把 N4 临时调小到 20 再跑一次,如果这些品种出现了,就确认是这个原因。
- 复权口径:公式在什么复权设置下调的,复核时就要用同一个设置。前后复权之间,价格数值会变,除权日附近的涨幅也会变。
- 除权与复牌造成的跳空:不复权数据里,除权当日价格会出现缺口,均线的相对位置在缺口前后被打断,这一段的条件成立与否与走势无关。
- 选股日期与范围:基准日期设成了历史某一天、或者范围只勾了部分板块,返回的清单与你预期的时间段不一致,两者要先对齐再比对。
六、失效与误判场景
均线类条件的失效点来自均线本身的构造方式,与公式写得对不对无关。
- 均线滞后:均线是过去若干根的算术平均,转向之后均线要过一段时间才跟上。用均线顺序定义的多头,成立时那段行情可能已经走完一部分,不成立时那段行情可能刚刚转向。
- 震荡区间反复穿越:价格在窄区间内来回运行时,短周期均线会反复穿过中长周期均线,条件在交界处反复成立与不成立,清单会明显变长。
- 数据起点附近的假信号:取上一根值的语句在图表最左边取不到值,这一段的条件判断没有依据。
- 停牌与复牌:停牌期间不产生 K 线,复牌后的第一根会把停牌前后的价格直接连起来,均线在这一处的形态与连续交易的品种不可比。
这些都是条件本身的边界,不是需要修复的错误。写公式时能做的,是知道它们在什么位置会出现,复核时把这几段时间单独看。
最后留一个问题给复核环节:当条件全部写对、选股器也跑通之后,返回的这份清单,和”这些条件在历史上是否真的成立过”,是不是同一件事?前者公式能回答,后者要你把同一段条件放回历史行情里再跑一遍才看得出来。
本文讲的是公式语法与选股器操作,不涉及具体标的的判断。站内还有 选股公式与预警 的其他条目,指标回测与风险验证 里讲条件写完之后怎么在历史行情上复核,报错与卡顿排查 里讲编译提示的逐条对照,可对照查看。
