选股结果里少了自己觉得该有的东西,先别急着改公式。通达信公式选股漏选这件事,来源分在六个位置,公式的写法只占其中一个,而且是该放到最后动手的那一个。
六个位置按「数据、口径、入口」三层排开:本地有没有这一段数据、公式与图取的价和取的时点是不是同一个、范围与周期有没有把品种挡在外面。下面先给一张对照总表,再逐类讲怎么确认自己碰到的是哪一类。排查口径以通达信金融终端个人版为准,不同版本的菜单名称与位置会有差异,操作前先核对自己软件里的那一处。
| 六类原因 | 典型现象 | 验证动作 |
|---|---|---|
| 本地数据缺失或不完整 | 同一段区间上,某些品种整段没有结果 | 用计数行看这一段的有效根数够不够设定的值 |
| 复权方式不一致 | 图上看得见的位置,公式判不成立 | 切换复权方式,看同一根 K 线的收盘价读数会不会变 |
| 停牌、上市不足、无成交 | 漏掉的品种集中在新上市或者长期停牌的品种上 | 把公式里最长的周期调小一档重跑,看漏掉的品种是否出现 |
| 条件叠加与比较关系写反 | 结果数量少到个位数,或者边界上的一批整批不见 | 逐条统计命中数量,看哪一条把结果砍到零 |
| 取值时点写错之后的错位 | 名单上有记录,图上同一位置找不到对应 | 把该条件单独挂到主图上,核对信号落在哪一根 K 线 |
| 选股范围设置 | 漏掉的品种集中在某一个市场或者某一类归属上 | 把范围临时放开到全市场,重跑一次 |
一、本地数据缺失或不完整
本地数据这一层造成的通达信公式选股漏选,在结果名单上与条件类的原因不好区分,只能靠计数行去验。
条件依赖多少根历史数据,本地就要有多少根。本地日线数据放在安装目录的 T0002 目录里,按市场分开存放,数据没下载到位的品种在图上就是一段空白。公式在空白段上算不出值,那一段的判断也就不成立,结果里自然没有它。
三种情形会走到这一步:整体只下载了最近几天,考察区间起步早于本地数据的起点;下载时只勾了部分市场,另一部分市场的数据从来没有进过本地;某个品种长期没有打开过,本地没有它的日线。
验证动作是把公式里的一条条件改成统计有效根数的一行,挂到主图上,看返回的数值与设定的根数是不是一个数。
{ 这一段的有效根数够不够,用计数看 }
有效根数: COUNT(CLOSE > 0, 250);
{ 返回小于 250,说明这一段里有取不到数据的根 }
另一个可以看的位置是系统菜单下的盘后数据下载,按市场勾选之后下载,下载完成回到选股界面重跑一次。这个入口的名称在不同版本里可能是「盘后数据下载」或者「数据下载」,位置与措辞以自己软件里的那一处为准。
二、复权方式不一致
公式算的是它拿到的那一列收盘价,图上看的是切换过复权方式之后的那一列。两边的取价口径不同,同一根 K 线读到的数字就不同,跨过除权日附近的比较会把条件推向相反的一边。
验证动作是在主图上切换复权方式,看同一根 K 线的收盘价读数会不会变。会变的话,把复权设置切到与公式一致的口径,再跑一次选股,看漏掉的那一条是否出现。出现了,属于这一类。切到前复权、后复权、不复权三档各看一次,哪一档下公式判成立,就说明公式取的是那一档的价格。
还有一处容易漏掉:公式取价的口径取决于软件的复权设置,这个设置与图表上的显示设置各自独立,两处指向同一个口径时结果才可对照。习惯用前复权看图的人,如果公式是在不复权口径下写的,跨越除权日的那几条就会对不上。
三、停牌、上市不足与无成交的那几根
三种情况落在同一件事上:某一段 K 线上取不到值,或者取到的值不能参与比较。上市不足 N 根的品种,最左侧那一段本来就没有均线值;停牌期间的 K 线缺失或被跳过,考察区间里就少了一截;一字板没有成交的根上,成交量会是零或者一个极小的数,涉及量能倍数的条件在这些根上失效。这一层的通达信公式选股漏选有一个共同点:漏掉的品种都落在某一段取不到值的区间上。
验证动作是把公式里最长的那个周期调小一档再跑一次。周期调小之后,最左侧取不到值的区间变短,如果漏掉的品种出现了,属于取值区间不够这一类。这一步只在调小周期之后重跑,不改其他条件。
停牌与上市日期可以从图上的日期轴上看:把光标移到该品种的第一根 K 线,看它离考察区间的起点有多远,差多少根就是最左侧空白段的长度。至于一字板引起的无量,判断办法是把量能条件临时去掉,只留价格条件重跑一次,漏掉的品种如果出现,说明那一根上确实没有成交量支撑原来的比较。
四、条件叠加与比较关系写反
多个条件用 AND 连起来,命中集合取交集,每加一条规模就缩一次。三条强条件叠在一起,命中数量可能只剩个位数,看上去像公式失效,实际是条件收得太紧。这一类的通达信公式选股漏选,动的是条件本身,与数据无关。括号可以改变连接的顺序,需要按组判断时用括号把同一组圈起来,不依赖软件默认的优先级。
比较关系写反是另一类:把大于写成了大于等于,恰好取等的那一批被多算进来;把小于写成了小于等于,边界上的那几根被挡在外面。这一类不报错,公式能顺利跑完,只能靠把两个数一起输出到副图,看谁大谁小来确认。
验证动作是逐条统计命中数量,把每一条的命中数与最终结果数量放在一起看。
{ 逐条统计,看哪一条把结果砍到零 }
条件一: CLOSE > MA(CLOSE, 20);
条件二: VOL > MA(VOL, 5) * 1.5;
条件三: CLOSE > REF(CLOSE, 1);
数量一: COUNT(条件一, 250);
数量二: COUNT(条件二, 250);
数量三: COUNT(条件三, 250);
某一项的命中数量比其余两项小一个量级,它就是决定规模的那一条;把这一条单独挂到主图上,逐根核对它成立的位置与图上看到的是不是同一批。
五、取值时点写错之后的错位
REF 的第二个参数是往前数的根数。取一根与取两根对应的是两个不同的位置,写成两根之后,条件成立的位置整体挪了一格,结果里少了当前这一根,多了前面那一根。这类错位从名单上看不出来,只有把信号挂到图上才会暴露。
另一类错位来自引用后续数据的写法。这类写法在算历史位置时用到了之后才出现的数据,信号的位置会随之后的行情变化而移动。验证动作是把考察区间截到某个日期,在这一段上重跑一次并记下信号位置;再把区间往后延长一段重跑,看原先那几个信号的位置有没有变。位置变了,说明公式里有取值时点的问题。
REF 用错根数的验证动作更直接:把该条件单独写成一条输出线挂到主图上,确认信号落在哪一根 K 线上,与预期的那一根对照,差一根就把参数改回去。改完再跑一次,位置对齐了才算改对。
六、选股范围设置把品种挡在外面
范围设置这一处容易被漏掉。市场勾选只勾了沪深两市,北交所的品种就不会进结果;板块归属没有把目标板块包含进来,结果里也只有范围内的那一部分;特殊处理品种如果被规则排除在外,条件再成立也不会出现。
验证动作是把范围临时放开到全市场,包含各市场与各板块,重跑一次,看漏掉的品种是否出现。出现了,说明条件本身算得出来,问题在范围这一层,回去把范围调成自己真正要看的那一档。反过来查也可以:从结果里取一条,看它属于哪个市场、哪个板块,再回到范围设置里对照勾选项。
还有一处与范围有关:范围里如果带了自选股或者某个板块的限定,条件成立但不在这个限定里的品种同样不会出现。排查时把限定临时去掉,是区分「条件没算出来」与「范围没包含」的直接办法。
六类原因按「数据、口径、入口」三层排一遍:数据层看本地有没有这一段,口径层看公式与图取的价、取的时点是不是同一个,入口层看范围与周期有没有把品种排除在外。通达信公式选股漏选量的是结果与设定之间的差,差在哪一层,逐层过一遍就能定位。
本文讲的是选股结果少东西时的排查口径,只作技术研究口径,不涉及也不构成对任何标的的判断。
站内还有 通达信公式报错与卡顿排查 的条目,通达信选股公式与预警 里讲条件书写与结果复核,指标回测与风险验证 里讲结果怎么验证,可对照查看。
