通达信涨停选股公式最容易写错的一处,是把涨停当成固定的 10%。把条件写成「涨幅超过 10%」之后,条件确实能跑通,屏幕上也会出现一批结果,但条件命中的范围与实际的涨停范围并不重合:涨跌幅限制分档的品种会被漏掉或被多算。这一处口径没定下来,后面的参数与复核都在错的基础上做。

下面按「幅度分档、幅度怎么表达、涨停价与取整、三种条件写法、参数外置、误判场景、搭建顺序」七步讲。全文只讨论条件的写法与计算口径,不涉及任何方向判断,也不针对具体品种;文中的涨跌幅规则为公开的交易所价格计算规则,写法以通达信公式编辑器内附的函数说明为准。

一、涨停判定写不成一个固定百分比

通达信涨停选股公式里的幅度按板块与风险警示状态分档,公开规则里可以枚举出这几档:主板为10%,主板上的风险警示股为5%,创业板与科创板为20%,北交所为30%。另外,部分板块的新股在上市初期的一段时间内不设涨跌幅限制。分档存在,条件里就不能只写一个数字。

后果在两个方向上都成立。二十个百分点这一档的品种,价格走到十个百分点时就会被按十个百分点写的条件命中,条件给出的结果里混进了并未涨停的位置;五个百分点这一档的品种,价格走到5%时已经封住,但按十个百分点写出来的条件不会命中,这一批从头到尾都不会出现在结果里。

同一段条件按不同品种范围跑,得到的结果数量差异明显。核对结果之前,先确认条件里的幅度与这次跑的品种范围是一档的,否则结果偏多或偏少都解释不清。

二、适用幅度怎么在公式里表达

公式里没有可以直接读取的「板块」或「涨跌幅限制」字段,幅度要自己表达出来。可行的做法有两条,各有取舍。

做法 怎么落地 取舍
按代码段枚举 用代码前缀把品种分成几组,每组配一个幅度常量 一次跑完,但代码段规则变动时要回来改公式
幅度做成参数 把幅度放进公式参数表,按档分批跑 公式稳定不用动,但结果要分几次跑再合并

按代码段枚举的写法需要先把规则核实清楚。不同市场、不同板块的代码段规则经过多次调整,建议以你所用的数据源里实际的代码归属为准,把归属表核对一遍之后再把前缀写进条件。写成参数的做法代价更低,代价是结果需要人工合并,合并时要在记录里标明这一次跑的是哪一档。

三、涨停价的计算与取整

通达信涨停选股公式里的涨停价按前一个交易日的收盘价乘以「一加上适用幅度」得到,结果按四舍五入取至价格最小变动单位,也就是小数点后两位。取整这一步是公开规则的一部分,漏掉它,比较就会在边界上出偏差。

{ 涨停价与比较的写法 }
前收 := REF(CLOSE, 1);
涨停价 := 前收 * (1 + 幅度);
容差 := 涨停价 * 0.002;
收于涨停 := CLOSE >= 涨停价 - 容差;
触及涨停 := HIGH >= 涨停价 - 容差;
{ 容差用来吸收取整带来的不到一分钱的差 }

容差的取值要克制。它只负责吸收取整误差,量级应当停在分位附近;把容差放大到1%以上,会把「接近但并未触及涨停价」的位置也纳进结果,条件就不再是涨停条件了。核对容差是否合适,把涨停价与容差一起输出到副图,看命中的位置与最低价、最高价的关系是否落在预期的边界上。

另一种做法是把取整直接写进公式,先对涨停价做一次保留两位的处理,再做比较。两种做法结果接近,区别在于公式里多一道运算、少一个需要解释的容差参数。哪一条都行,公式里只用其中一种,不要两处都写。

四、三种条件的写法

同样是「涨停」,在条件里可以落成三种判定。三者的区别是拿哪一根价格去与涨停价比较。

判定 比较对象 命中的范围
触及涨停 当根最高价 盘中曾经达到涨停价的位置都计入
收于涨停 当根收盘价 只计入收盘时仍停在涨停价的位置
一字形态 开盘、最高、最低、收盘四价 只计入全天没有离开涨停价的位置

三种写法写在同一段代码里不会冲突,但用哪一种是必须先定的。用触及涨停写出来的结果,与用收于涨停写出来的结果,是两批不同的位置,混在同一个统计里做比较没有意义。写之前先把要回答的问题说清楚:问的是「盘中是否到达过」,还是「收盘是否停在上面」,还是「全天是否没有打开过」。

五、参数外置与分段复核

把幅度、容差、区间长度这类取值放进公式参数表,比写死在公式主体里更好核对。参数外置之后,同一段代码可以用不同的参数跑不同的品种范围,公式主体不用改。

{ 参数表建议的四项 }
幅度 —— 按这一档的涨跌幅限制取值
容差 —— 只覆盖取整误差,量级停在分位
上市天数下限 —— 过滤掉上市时间过短的品种
数据根数下限 —— 过滤掉历史数据不足、取不到前收盘的位置

复核的第一段只输出涨停价,不写比较。把涨停价与客户端里同一位置的涨幅数值对照,两边一致说明幅度与取整都对上了。这一段确认之后再往下写比较,出错时就不用回头怀疑价格本身。

六、误判场景逐条对照

场景 为什么会偏 怎么核
跨过除权除息日 前收盘价被调整,与公式取到的历史价口径不一致 按复权口径取数后重算一遍,看两边是否一致
风险警示状态变化 适配的幅度档发生变化 把这一段时期的品种范围单独跑一次
停牌后复牌 比较基准不是紧邻的前一根,而是停牌前最后一个交易日 查出该位置的数据缺口根数,确认基准是哪一根
历史数据未补充完整 REF 取不到前收盘,条件落在空值上 先补齐本地数据,再重跑条件
上市初期无涨跌幅限制 这一段时间里没有涨停价这个概念 用上市天数下限把它排除在范围之外

这张表里前两项的核对动作是一样的:把口径统一之后重算,看结果是否回到预期。后三项属于范围内该被排除的位置,靠过滤条件处理,不需要在比较逻辑里改。判断某个偏差点属于哪一类,先看它是不是处在数据缺口或规则变更的位置上。

七、按这个顺序搭条件

通达信涨停选股公式的搭建顺序可以固定下来:先定幅度与容差,再算涨停价,再做三种比较里的选一种,最后补上市天数与数据根数两个过滤器。按这个顺序走,每一段都能单独输出、单独核对,出问题时能定位到具体是哪一段。

顺序反过来会多花时间。先把比较与过滤写在一起再回头查,条件不命中时无法判断是幅度取错、容差过宽,还是被过滤器挡掉了。分开写之后的排查路径是明确的:涨停价对不上改幅度,命中范围偏大改容差,结果数量偏少查过滤器。

条件本身只是筛选与统计口径的练习,条件成立与否不代表任何方向性的结论,也不构成任何操作依据。相关的排查顺序见 公式报错与卡顿排查 一栏,结果口径的验证思路见 指标回测与风险验证 一栏;本栏 通达信选股公式与预警 里另外几篇讲的是预警设置与条件拆解,与本篇的幅度口径可以对读。

文中涨跌幅分档为公开交易规则的一般性描述,具体以交易所现行规则与所用数据源的字段口径为准;通达信不同版本与券商定制版对函数支持范围、参数表写法与比较运算的处理存在差异,请以你所用版本公式编辑器内附的函数说明为准。本文只讨论条件写法与计算口径,不构成任何投资建议。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。