用公式选股,卡住的地方不是不会写代码,而是没把话说清楚。”找个强势的、有资金进的、回调差不多的”,这句话人听得懂,公式听不懂。公式只认能算出数值、能比大小的条件。

所以「通达信公式选股」这件事的完整链条是六步:把需求写成可比大小的条件,把条件翻译成函数,写成一条能测试通过的公式,在选股器里跑一遍,需要盯盘就配上预警,最后复核结果为什么和想的不一样。下面按这个顺序走。

一、把需求写成”可比大小的条件”

先做一次翻译练习,这也是通达信公式选股的第一步。左边是你平时怎么说,右边是公式接不接得住。

口语描述 能不能翻译 原因
最近放量了 能 “放量”可以量化成:今天成交量大于前一天的 1.5 倍
均线开始向上 能 短周期均线上穿长周期均线,是个明确的交叉事件
创了阶段新高 能,但有坑 必须写清楚比的是谁的前 N 日高点,否则会变成每天都成立
主力在吸筹 不能直接翻 没有公开数据能直接算出”吸筹”,只能用换手率、量比这类口径去近似描述
感觉要启动了 不能翻 这是判断,不是条件。硬把它写成公式,本质只是把主观判断换了个说法
回调差不多了 不能翻 “差不多”没有阈值,必须先定成具体数字

规律很清楚:能落到”某个数值大于、小于或穿越另一个数值”的,都能翻译;带形容词、带判断、带预期的,都翻译不了。凡是翻译不了的,写进公式也只会得到一条测不出对错的条件。

二、把条件翻译成函数

下面这张表是实际写公式时最常用的几组。写法可以直接抄,但更值得看的是说明那一列。

想表达的意思 写法 说明
5 日均线上穿 10 日均线 CROSS(MA(C,5),MA(C,10)) CROSS 判断的是一瞬间的穿越动作,不是”在上面”。昨天金叉、今天仍在上方,CROSS 就不再成立
相比昨天放量 1.5 倍 V>REF(V,1)*1.5 REF(V,1) 取前一天的成交量。写成 V>MA(V,5)*1.5 就是”相对 5 日均量”,两种口径结果不同,别混用
今天涨停 C=ZTPRICE(REF(C,1),0.1) ZTPRICE 直接算涨停价,比手写 1.1 倍更稳,可以避开四舍五入误差。ST 用 0.05,创业板与科创板用 0.2
突破前 20 日最高价 C>REF(HHV(H,20),1) 关键是外面那层 REF。写成 C>HHV(H,20) 会因为 HHV 已经包含今天,变成几乎永远成立
换手率在 3% 到 8% 之间 V/CAPITAL*100>3 AND V/CAPITAL*100<8 CAPITAL 是流通股本(手),V 也是手,相除口径一致。用 FINANCE 类函数时要注意单位是股还是手
量比大于 2 DYNAINFO(17)>2 量比属于即时行情函数,盘后取值与盘中不同,回看历史时这条基本失效
剔除 ST NOT(NAMELIKE('S')) 名称里带 S 的一并排除。要更严格可以再加 CODELIKE 判断
剔除科创板 NOT(CODELIKE('688')) 科创板涨跌幅规则不同,混在一起算会污染结果
写条件之前先确认一件事:这条条件描述的是”当下状态”,还是”刚刚发生的变化”。CROSS 这类是变化,MA(C,5)>MA(C,10) 是状态。两者混用,选出来的结果会不一样。

三、写成一条完整的选股公式

把上面的条件拼起来,就是一条完整的通达信公式选股公式。写完之后注意四条硬规则:

  1. 中间变量用 := 定义,不会输出成线
  2. 最后一行必须是逻辑表达式,不能再带 : 输出,也不能有绘图函数
  3. 每句以半角分号结尾,注释用花括号或双斜杠
  4. DRAWICON、DRAWTEXT、STICKLINE 这类绘图函数在选股公式里没有意义,写了也不报错,但容易让人误以为公式在工作

下面是一条完整示例。它的意思很朴素:均线呈多头排列、相比前一天放量、并且突破前 20 个周期的高点。

{
  示例:多头排列 + 放量 + 突破前 20 周期高点
  建议先单独测每一条,确认无误再合并
}
MA5:=MA(C,5);
MA10:=MA(C,10);
MA20:=MA(C,20);

多头:=MA5>MA10 AND MA10>MA20;          { 均线呈多头排列 }
放量:=V>REF(V,1)*1.5;                  { 相比前一天放量 1.5 倍 }
突破:=C>REF(HHV(H,20),1);               { 突破前 20 周期高点,注意外层 REF }

去ST:=NOT(NAMELIKE('S'));
去科创:=NOT(CODELIKE('688'));
有量:=V>0;                             { 排除当日无成交的品种 }

多头 AND 放量 AND 突破 AND 去ST AND 去科创 AND 有量;

写完不要一上来就测整条。先把中间变量逐条单独输出,各跑一次,确认每一行得到的品种数量在合理范围;都正常了再拼成最后一行。这样出问题时能立刻定位到是哪条条件写歪了。

四、在通达信里跑条件选股

  1. Ctrl+F 打开公式管理器,在左侧选中「条件选股公式」分支,点「新建」
  2. 填名称,把上面这段源码粘进编辑区,点「测试公式」,通过后点「确定」保存
  3. 回到主界面,进「功能 → 选股器 → 条件选股」
  4. 在「条件选股公式」下拉列表里选中刚建的公式,点「加入条件」
  5. 设置选股范围(沪深 A 股、某个板块,或自选股)
  6. 点「选股入板块」或直接执行,把结果存进一个自建板块,方便后续复盘
跑之前先把本地数据下全。数据不全导致结果偏少,是这类问题里出现频率最高的原因,而软件不会提醒你”数据不够”。

五、预警怎么设,以及它为什么不响

条件选股是”我现在手动跑一次”,预警是”盘中帮我盯着”。设置入口一般在「功能 → 预警系统 → 条件预警设置」,不同版本名称略有差异。在预警设置里新增一条,选公式、选监控范围、设定触发后怎么提示即可。

预警不响,多半是这几种情况:

  • 公式建在了「技术指标公式」分支下,不是「条件选股公式」,预警列表里根本选不到它
  • 预警只在盘中运行,收盘后不再触发
  • 没有把目标范围加入监控列表,公式在跑,但没盯着任何品种
  • 分钟级数据没有下载,盘中计算依赖的数据不完整
  • 触发条件设得过严,当天确实没有品种满足

六、结果复核:为什么选出来的和想的不一样

条件写对了、也跑通了,通达信公式选股的结果仍然可能和你预期不符。分两个方向查。

结果比预期多

  • 复权设置的影响。前复权和不复权算出来的价格不同,条件成立与否也会不同
  • 没有剔除次新股。上市初期的波动结构与老股不一样,容易集中命中
  • 条件之间用了 OR。OR 会把范围放大得很快,写完回头确认每一处连接词
  • 描述”状态”的条件被当成了”变化”。状态型条件每天都会有一批品种满足

结果比预期少

  • 本地历史数据没下全,这是第一嫌疑
  • 阈值定得过严。比如放量 2 倍和放量 1.5 倍,命中数量差别很大。先把阈值放宽确认公式是通的,再逐步收紧
  • 用了即时行情函数(DYNAINFO 类)。这类函数在盘后回看历史时取值不可靠
  • 少写了括号,逻辑和你以为的不一样。写完从头读一遍括号配对

七、未来函数自检

未来函数指的是引用了”当前 K 线之后”的数据。含未来函数的公式在回看历史时表现很好看,实盘却对不上,因为它用到的那部分数据在当时还不存在。

常见的嫌疑函数有 REFX、REFXV、BARSNEXT、BACKSET,以及 ZIG、PEAK、TROUGH 这类不定周期函数。几个自查方法:

  1. 在源码里搜这几个关键词,命中就重点看那段逻辑
  2. 挑一个历史日期把当时的选股结果记下来,隔一段时间再用同样的条件回看同一天。如果结果变了,就要怀疑
  3. 观察信号会不会”消失”。当根 K 线出现、下一根又没了,说明它依赖了后续数据
不含未来函数,只代表公式在时间上是自洽的,不代表这个条件有效。这两件事要分开看:前者是技术检查,后者需要另做验证。

八、这套流程的边界

走完这六步,你能得到的是一份”条件成立”的品种清单。条件成立和结果好坏是两件不同的事。通达信公式选股只能保证计算过程符合你写的口径,不能保证这个口径本身有任何预测能力。

所以拿到一批结果之后,值得做的不是直接采信,而是回头问三个问题:这个条件在历史上长期成立的比例是多少?它成立之后的一段时间里,价格分布和随机情况有没有明显差别?换个时间段、换个市场环境,结论还站得住吗?这三个问题属于回测与验证,和写公式是两码事。

相关内容在站内已分栏目归档:通达信选股公式与预警(条件筛选、预警设置与结果复核的合集)、通达信公式编写教程(语法、函数与调试)、指标回测与风险验证(未来函数自检、样本选择与结果解读)、通达信指标原理与参数(参数改一个值会改变什么)。

本文只讲公式语法、计算口径与软件操作,不涉及任何具体标的,也不构成任何操作建议、不承诺任何收益。文中的示例公式仅用于说明写法,请自行按数据完整性与版本差异核对结果。

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