简介:这是一份面向通达信软件用户的选股指标公式文档,适合有一定技术分析基础、希望借助量化条件自动筛选强势股的投资者。文档以doc格式提供了完整的“精准找牛选股”源码,核心逻辑融合MACD金叉、布林带突破与量价配合,通过DIF、DEA、BOLL、UPPER、LOWER等变量构建选股模型,要求个股同时满足收盘上涨、成交量倍量放大、DIF上穿DEA且处于非高位、收盘价突破布林上轨四个条件,从而在海量标的中快速锁定具备上涨潜力的候选股票。资源共1个文件,格式为doc,整体大小仅20KB,内容精简、便于导入通达信软件使用,也方便对照源码理解选股思路。目前已有158人学习,适合用于日常复盘、条件选股与策略优化。需要说明的是,技术指标存在固有局限,建议结合基本面与市场环境综合判断,避免单一信号决策。
1. 精准找牛选股公式,关键是把“牛相”翻译成代码
在通达信里折腾选股公式的人,大多都经历过同一种挫败:从网上淘来一份“精准找牛”源码,粘贴到公式编辑器,要么提示变量未定义,要么选出来的股票堆满一屏,真正的启动股被淹没在杂讯里。问题通常不在源码本身,而在缺少一套“把盘面形态翻译成公式语言”的转换能力。这篇文章要解决的正是这件事:牛股启动前的均线结构、量能变化、平台突破和 MACD 状态,如何用通达信的指标公式函数写出来,并让它在选股器和预警里稳定跑起来。
我默认你打开过通达信的公式管理器,知道新建公式按钮在哪里,但对 TDX 公式语法还谈不上熟练。后面的内容会从最常用函数讲起,给一份可以直接粘贴的“精准找牛”源码,再讲参数怎么调、信号怎么验证。适合给那些已经看腻了“金叉死叉”描述,想把选股标准落到可执行代码上的交易者。注意一点:凡是没有明确写出“未来函数”的公式,都是在当前 K 线收盘时点计算完毕,选股结果只用于盘后复盘和次日观察,不承诺盘中实时信号。
2. 牛股启动前的共同形态,怎么转成可计算的条件
2.1 先定义“牛相”:均线、量能、平台、动能缺一不可
所谓精准找牛,本质是把牛股启动前的几个共性特征叠加起来做交集。走牛之前,市场结构上通常会出现三个可观测事实:短期均线开始向上穿过中期均线,说明持仓成本在抬高;股价在一个相对窄的平台里反复震荡,说明抛压在衰竭;成交量在某个临界点突然放大,说明有资金愿意在更高的价位接货。
这三个事实对应到通达信公式里,就是均线排列、区间高点、量比放大三个条件。公式里只用“收盘价”和“成交量”这两个最原始的数据源,不依赖任何外部数据接口。这样做的最大好处是信号可复核:你可以把公式生成的买点重新画到历史 K 线上,观察信号是否真的出现在每一段像样的拉升之前。如果公式在震荡市里频繁触发,在单边启动前反而沉默,那多半是条件顺序写反了,而不是行情没来。
2.2 通达信公式函数的最小集合:REF、HHV、COUNT、BARSLAST
写选股公式不需要背大量函数,掌握下面几个就够覆盖大部分形态定义。REF(X,N)取 N 周期前的值,是构建“平台突破”的基石;HHV(X,N)取 N 周期内最高值,用来标记平台的上沿;COUNT(条件,N)统计一个条件在 N 周期内成立过几次,适合描述“最近 5 天内出现过金叉”这类模糊条件;BARSLAST(条件)返回上次条件成立到当前的周期数,用于判断“突破发生在缩量回调之后”。
用这四个函数,就能把“股价突破近 20 日最高收盘价后的第一次放量”翻译成下面的逻辑:
平台高点:=REF(HHV(CLOSE,20),1); 今日突破:=CLOSE>平台高点; 近五日内金叉:=COUNT(CROSS(MA(CLOSE,5),MA(CLOSE,10)),5)>0; XG:今日突破 AND 近五日内金叉;这段代码的要点在第二行:REF(HHV(CLOSE,20),1)取的是“昨天往前看 20 天的最高收盘价”,而不是“今天往前看 20 天”。两者区别很关键——如果直接用HHV(CLOSE,20),今天这根 K 线的收盘价会自己跟自己比,等于拿今天的价格来验证今天的突破,任何一根创 20 日新高的阳线都会被判为突破成功,信号失真。先用REF把比较基准锁死在昨天,才真正是在测“今天突破了之前的平台”。
2.3 四种常见启动形态与判定语句
把市面上流行的选股思路归类,高频出现的形态其实只有四种:平台突破、均线粘合后向上发散、缩量回调后重新放量、MACD 零轴上方二次金叉。这四种形态对应的判定逻辑各有侧重,我在下表里给出了核心函数组合:
| 市场形态 | 判定逻辑 | 通达信核心语句 |
|---|---|---|
| 平台突破 | 收盘价突破 N 日最高收盘价,且当日收阳 | CLOSE>REF(HHV(CLOSE,N),1) |
| 均线粘合后发散 | 5 日与 10 日均线距离收窄后重新张口 | ABS(MA5-MA10)/MA10<0.02 |
| 缩量回调后再放量 | 回调日缩量,随后单日量比显著放大 | VOL<REF(VOL,1) AND VOL>REF(VOL,1)*M |
| MACD 零轴上方二次金叉 | DIF 在零轴上回踩 DEA 后重新上穿 | CROSS(DIF,DEA) AND DIF>0 |
实际操作中,我不建议一次只用一个形态做选股,因为单一条件的噪音太大。“平台突破”在上升趋势里经常连续触发,单独看几乎每个强势股都能选进来;而“MACD 二次金叉”又常常落后于股价,等信号出现时离启动点已经涨了 8 个点。把两个、三个形态条件做交集,噪音才能压下来,这也是“精准”二字的意义所在。后面第 3 章给出的源码,就是把均线结构、平台突破和量能确认三组条件拼在一起的完整做法。
3. 一份可直接运行的“精准找牛”源码与逐段逻辑解读
3.1 粘贴进通达信就能跑的源码主体
下面这份源码是我按“三道过滤”的思路写的:均线结构一道,平台突破一道,量能确认一道。前四行是参数区,后面是判定区,最后一行输出选股结果。代码支持“条件选股公式”格式,也支持作为副图指标画线观察。
{精准找牛_v1:平台突破+均线多头+量能确认} N:=20;{平台周期,默认20日} M:=1.5;{放量倍数,默认1.5倍} T:=60;{上市天数下限,过滤次新} MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); MA20:=MA(CLOSE,20); {条件一:均线多头排列} KX1:=MA5>MA10 AND MA10>MA20; {条件二:MACD零轴上方运行} DIF:=EMA(CLOSE,12)-EMA(CLOSE,26); DEA:=EMA(DIF,9); KX2:=DIF>DEA AND DIF>0; {条件三:放量突破近N日平台} 平台顶:=REF(HHV(CLOSE,N),1); KX3:=CLOSE>平台顶 AND VOL>REF(VOL,1)*M; {过滤:涨停无法买入} KF1:=CLOSE<REF(CLOSE,1)*1.095; {过滤:上市不足T日} KF2:=BARSCOUNT(CLOSE)>T; XG:KX1 AND KX2 AND KX3 AND KF1 AND KF2;粘贴到通达信公式编辑器时,注意把“新建”里的公式类型选成“条件选股公式”。如果只是想在看盘界面观察信号,就把类型选成“副图指标”,XG 那一行会输出一组红点。需要说明的是,这份源码的参数区是可调的:N 控制平台跨度,M 控制放量强度。震荡市里 M 建议保持 1.5,趋势市中可降到 1.3,避免因为放量要求过高把正常突破过滤掉。
3.2 逻辑顺序为什么是均线先、MACD 次、突破最后
三个条件的排列顺序不是随意的,它直接影响最终选股结果的“含金量”。KX1(均线多头)放在最前面,是因为它负责排除掉下跌中继形态的假反弹——股价可以在下跌趋势里出现单日放量大阳线,但 5 日、10 日、20 日均线同时呈多头排列,需要一段时间的持续修复,假反弹在这种结构里很难同时满足。KX2 让信号只发生在 MACD 的 DIF 在零轴上方的情况,隐含的意思是“趋势已经由跌转涨,回调后再次向上”,这与零轴下方的反弹有本质区别。
KX3 是临门一脚,也是最容易被散户玩坏的一脚。很多人写突破条件时,喜欢在“突破平台”之外再加上“涨幅超过 7%”这种限制,理由是只有强势才算牛。但实际回测下来,突破当天涨幅过大往往意味着次日高开低走的风险,量能和大阳线都是给持仓者出货用的。我更倾向于把放量倍数当作唯一的量能限制,让涨幅自己说话。这样选出来的票,可能是涨幅 8 个点的大阳突破,也可能是涨幅 2 个点的温和放量突破,后者往往更有持续性。
3.3 为什么没把“MACD金叉”写成唯一主条件
这里想专门说一个容易被误解的点:很多选股公式把CROSS(DIF,DEA)当作核心条件,写出来的源码也短,选出来的股在历史 K 线上看着都挺准。这是公式回看时常见的幸存者偏差——金叉发生在起涨点附近,但同样数量的金叉发生在下跌中继的反弹高点。只拿 MACD 金叉做主条件的公式,复盘成功率低得惊人。
我上面这份代码里 KX2 用的是“DIF 大于 DEA 且 DIF 大于零”,而不是金叉当天。这样选出来的股票,在金叉之后的若干天内每天都可能入选,好处是给操作留出从容的介入时间,坏处是信号持续出现会降低锐度。如果你希望每个股票只被选一次,可以把 KX2 改成COUNT(CROSS(DIF,DEA),3)>0,意思是“最近 3 天内出现过金叉”,既能拿到金叉的时效性,又不会像单日金叉那样一天就消失。
3.4 三处最常见的误用,以及对应的修正方法
第一处误用是把REF(HHV(CLOSE,N),1)的 N 设得太小。N 取 10 时,平台顶太低,任何一个小反弹都可能“突破”,噪音极大;N 取 60 时,一年可能都选不出几只票,资金利用效率太低。我一般取 20 到 30 之间,对应约一个月左右的平台整理周期。
第二处误用是忽略了涨停过滤。A 股主板涨停幅度 10%,涨停板上的股票可以突破任何平台,但你买不进去。加入KF1之后,选股结果里剩下的是真正能在次日参与交易的标的。
第三处误用是不加上市天数过滤。次新股上市初期没有足够的历史 K 线,HHV(CLOSE,20)计算出来的平台顶没有参考意义,而且次新股波动剧烈,容易让整个选股结果变得不稳定。BARSCOUNT(CLOSE)>T在源码里把上市不足 60 日的全部排除,做次新股专项策略的人可以单独把 T 调小,但不要直接删掉这行过滤。
4. 把公式装进选股器和盘后预警:参数设置与结果验证
4.1 从源码到条件选股:粘贴、命名、编译三步
在通达信里新建一个条件选股公式,最稳妥的路径是“功能”菜单下的“公式系统”,再选“公式管理器”,新建时类型选择“条件选股公式”,把第 3 章的源码整段粘贴进去,点击测试公式,出现“测试通过”后保存。这里提醒一个细节:源码里的中文注释和变量名用的都是中文冒号,如果用英文输入法从别处复制,很容易混入全角字符导致编译失败。真遇到“当前公式在 XX 行存在语法错误”的提示,先检查最近修改的那一行的标点符号。
如果你拿到的是网上下载的.tn6文件,不需要手工粘贴。通达信的公式管理器支持直接导入:找到“导入公式”按钮,选择 tn6 文件即可。需要留意的是,导入的公式类型可能是“副图指标”而非“条件选股”,导入后先看公式类型,不对就手动改一下类型再编译。很多人卡在这一步,不是因为公式本身错,而是类型选错导致“选股器里找不到这个公式”。
4.2 参数面板的三档设置:保守、均衡、激进
源码里的 N、M、T 三个参数在参数面板里可以手工调整。我按自己的使用习惯给出三档设置,方便不同风险偏好的读者直接套用:
| 参数档位 | N(平台周期) | M(放量倍数) | T(上市天数) | 适用场景 |
|---|---|---|---|---|
| 保守档 | 30 | 1.8 | 120 | 震荡市,要求更高确定性 |
| 均衡档 | 20 | 1.5 | 60 | 趋势市,信号数量适中 |
| 激进档 | 10 | 1.2 | 30 | 牛市预期强烈,抓启动早期 |
参数设置的原则是:放量倍数 M 越小,选出的股票越多,假信号的比例也会上升;平台周期 N 越大,要求的整理时间越长,错过启动的概率越高。没有一组参数能在所有行情下都最优。我的习惯是每个月月初用最近一周的行情做一次手工回看,如果信号在下跌段密集出现,就把 M 提高 0.2;如果在上涨段里连续一周选不出票,就把 M 调回 1.5。参数调整是慢功夫,不值得为某个“全网最准的选股公式”神话交学费。
4.3 用历史信号复盘替代肉眼记忆
选出股票之后,验证公式有效性的方法不是“看完觉得挺准”,而是把信号画到 K 线图上回看。具体操作是:在条件选股公式里加入一行画图标注代码,让信号出现在主图或副图上。
DRAWICON(XG,LOW,1); DRAWTEXT(XG,LOW,'找牛'),COLORRED;把这两行追加到源码末尾后,保存为副图指标,再把它加载到日线图上。这样做的意义在于——你看到的每一个红点,都对应公式当时选出来的股票和日期。复盘时重点看两类情况:一类是红点出现后 5 日内股价明显上涨的成功信号,确认公式抓到了主升段;另一类是红点出现后股价继续横盘甚至下跌的失败信号,找出这些失败信号在形态上和成功信号的区别。这种复盘方法比拉长选股列表看结果要可靠得多,因为失败样本和成功样本放在同样的时间尺度下对比,能直接暴露公式的过度拟合倾向。
4.4 盘后选股与盘中预警的配置差异
公式在盘后选股和盘中预警里表现完全不同,原因在于盘中行情数据未收盘定型,量比、突破、金叉都可能随着盘中波动反复出现。我不建议把这套“精准找牛”公式直接挂到盘中预警上,盘中预警更适合用简化条件,例如只保留平台突破和量能放大,去掉均线多头的日期约束(这个条件本来就是日线级别的判断)。盘后选股的推荐路径是:收盘后下载当日日线数据,执行“选股器 → 条件选股 → 加入公式 → 执行选股”,结果加入自选板块,次日观察开盘半小时的承接力度。这样既拿到了公式信号,又避开了盘中数据不稳定带来的重复报警。
5. 三步点睛式组合:触底、反转、看多三个信号叠加过滤
5.1 把“触底、反转、看多”三个副图信号拆成可叠加的过滤条件
市场上流传较广的“三步点睛(触底、反转、看多)”副图指标,核心思路是让三个信号同时被点亮时才形成买点。我不打算照抄那份源码,因为它夹杂了大量艺术性绘图代码,直接拿来选股并不好用。但它的思想值得保留:把单一选股条件的“是与否”升级成三路信号的“是否同向”,过滤效果显著提升。
应用到我的源码上,可以叠加三段小逻辑。触底条件用“股价距 60 日低点不远且出现长下影”,反转条件用“5 日均线上穿 10 日均线后 3 日内维持在上方”,看多条件用“MACD 柱状线由绿转红”:
{触底:近60日最低点附近收长下影} LLV60:=LLV(LOW,60); 触底:=ABS(CLOSE-LLV60)/LLV60<0.15 AND (MIN(OPEN,CLOSE)-LOW)>ABS(CLOSE-OPEN)*0.5; {反转:5日均线与10日均线金叉后维持3日} 反转:=COUNT(CROSS(MA5,MA10),3)>0 AND MA5>MA10; {看多:MACD柱由负转正} MACD柱:=(DIF-DEA)*2; 看多:=REF(MACD柱,1)<0 AND MACD柱>0; 叠加信号:XG AND 触底 AND 反转 AND 看多;叠加后选股数量会锐减,这符合“精准找牛”的定位——它不是每天都有信号的公式,而是等待多条件共振的工具。用热词的说法,可以把这套思想理解为“触底、反转、看多”三个维度都给这只股票打个勾,三个勾齐了才纳入观察池。实际使用时,触底条件在单边上涨行情里几乎永远不会成立,这会造成“牛市选不出股”的结果,所以它更适合用在震荡市的大盘环境下。
5.2 用资金流和主力增仓视角做二次确认
均线、突破、MACD 都只能反映价格行为,还有一种常见过滤思路是引入量价背离程度和资金流强度。通达信公式里可以用AMOUNT函数取到当日成交金额,用它构造一个简化的“资金异动”条件:
{资金异动:当日成交金额达到近5日均值的1.6倍以上} 金额均值:=MA(AMOUNT,5); 资金异动:=AMOUNT>金额均值*1.6;另一种常见做法是观察“量能饱和度”——当成交量温和放大但未达到极端值时,股价上涨的延续性往往比天量暴涨更好。可以用“量能与 20 日均量的比值”圈定一个健康区间。这两个条件适合作为“主力增仓”的间接确认,与第 3 章的源码叠加时放在最后面,作为“加分项”而非“必选项”。选股结果太多时加上它,选股结果为零时去掉它,视市场环境灵活切换。
5.3 一份自查清单:交付前的最后检查
写好的公式在形成准星之前,最后过一遍自查清单能避开大多数隐性坑。以下六条是我每次写完公式都会检查的项:
- 公式里是否有
BACKSET、ZIG、PEAKA这类未来函数——只要出现,该公式的选股结果就不可信,务必删除。 - 是否引用了当日收盘后的才能确定的数据——用于盘中预警时需要去掉这些条件。
- 参数面板里的默认值是不是你实盘想用的值——很多公式编译通过但忘了调参数,默认值选出来的股票没有意义。
- 选股结果里是否混入 ST 类股票——有需要可加
NOT(NAMELIKE('ST'))做过滤。 - 相同信号在同一只股票上是否重复出现——若需要“一个标的只选一次”,用信号计数函数做去重。
- 是否跑过一次至少 3 个月的历史复盘——没跑过历史就直接实盘,等于把自己当测试样本。
完成这份清单后,公式基本上就是一份可以交付给自己的选股工具了。后续要做的,是盯住每次选股结果里“错误信号”的共同特征,反哺到条件参数里,让公式跟随行情自身的节奏进化。
本文还有配套的精品资源,点击获取