用公式选股,卡住的地方不是不会写代码,而是没把话说清楚。”找个强势的、有资金进的、回调差不多的”,这句话人听得懂,公式听不懂。公式只认能算出数值、能比大小的条件。
所以「通达信公式选股」这件事的完整链条是六步:把需求写成可比大小的条件,把条件翻译成函数,写成一条能测试通过的公式,在选股器里跑一遍,需要盯盘就配上预警,最后复核结果为什么和想的不一样。下面按这个顺序走。
一、把需求写成”可比大小的条件”
先做一次翻译练习,这也是通达信公式选股的第一步。左边是你平时怎么说,右边是公式接不接得住。
| 口语描述 | 能不能翻译 | 原因 |
|---|---|---|
| 最近放量了 | 能 | “放量”可以量化成:今天成交量大于前一天的 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')) |
科创板涨跌幅规则不同,混在一起算会污染结果 |
三、写成一条完整的选股公式
把上面的条件拼起来,就是一条完整的通达信公式选股公式。写完之后注意四条硬规则:
- 中间变量用
:=定义,不会输出成线 - 最后一行必须是逻辑表达式,不能再带
:输出,也不能有绘图函数 - 每句以半角分号结尾,注释用花括号或双斜杠
- 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 有量;
写完不要一上来就测整条。先把中间变量逐条单独输出,各跑一次,确认每一行得到的品种数量在合理范围;都正常了再拼成最后一行。这样出问题时能立刻定位到是哪条条件写歪了。
四、在通达信里跑条件选股
Ctrl+F打开公式管理器,在左侧选中「条件选股公式」分支,点「新建」- 填名称,把上面这段源码粘进编辑区,点「测试公式」,通过后点「确定」保存
- 回到主界面,进「功能 → 选股器 → 条件选股」
- 在「条件选股公式」下拉列表里选中刚建的公式,点「加入条件」
- 设置选股范围(沪深 A 股、某个板块,或自选股)
- 点「选股入板块」或直接执行,把结果存进一个自建板块,方便后续复盘
五、预警怎么设,以及它为什么不响
条件选股是”我现在手动跑一次”,预警是”盘中帮我盯着”。设置入口一般在「功能 → 预警系统 → 条件预警设置」,不同版本名称略有差异。在预警设置里新增一条,选公式、选监控范围、设定触发后怎么提示即可。
预警不响,多半是这几种情况:
- 公式建在了「技术指标公式」分支下,不是「条件选股公式」,预警列表里根本选不到它
- 预警只在盘中运行,收盘后不再触发
- 没有把目标范围加入监控列表,公式在跑,但没盯着任何品种
- 分钟级数据没有下载,盘中计算依赖的数据不完整
- 触发条件设得过严,当天确实没有品种满足
六、结果复核:为什么选出来的和想的不一样
条件写对了、也跑通了,通达信公式选股的结果仍然可能和你预期不符。分两个方向查。
结果比预期多
- 复权设置的影响。前复权和不复权算出来的价格不同,条件成立与否也会不同
- 没有剔除次新股。上市初期的波动结构与老股不一样,容易集中命中
- 条件之间用了 OR。OR 会把范围放大得很快,写完回头确认每一处连接词
- 描述”状态”的条件被当成了”变化”。状态型条件每天都会有一批品种满足
结果比预期少
- 本地历史数据没下全,这是第一嫌疑
- 阈值定得过严。比如放量 2 倍和放量 1.5 倍,命中数量差别很大。先把阈值放宽确认公式是通的,再逐步收紧
- 用了即时行情函数(DYNAINFO 类)。这类函数在盘后回看历史时取值不可靠
- 少写了括号,逻辑和你以为的不一样。写完从头读一遍括号配对
七、未来函数自检
未来函数指的是引用了”当前 K 线之后”的数据。含未来函数的公式在回看历史时表现很好看,实盘却对不上,因为它用到的那部分数据在当时还不存在。
常见的嫌疑函数有 REFX、REFXV、BARSNEXT、BACKSET,以及 ZIG、PEAK、TROUGH 这类不定周期函数。几个自查方法:
- 在源码里搜这几个关键词,命中就重点看那段逻辑
- 挑一个历史日期把当时的选股结果记下来,隔一段时间再用同样的条件回看同一天。如果结果变了,就要怀疑
- 观察信号会不会”消失”。当根 K 线出现、下一根又没了,说明它依赖了后续数据
八、这套流程的边界
走完这六步,你能得到的是一份”条件成立”的品种清单。条件成立和结果好坏是两件不同的事。通达信公式选股只能保证计算过程符合你写的口径,不能保证这个口径本身有任何预测能力。
所以拿到一批结果之后,值得做的不是直接采信,而是回头问三个问题:这个条件在历史上长期成立的比例是多少?它成立之后的一段时间里,价格分布和随机情况有没有明显差别?换个时间段、换个市场环境,结论还站得住吗?这三个问题属于回测与验证,和写公式是两码事。
本文只讲公式语法、计算口径与软件操作,不涉及任何具体标的,也不构成任何操作建议、不承诺任何收益。文中的示例公式仅用于说明写法,请自行按数据完整性与版本差异核对结果。
