MACD金叉+布林带突破:五重共振精准选股公式详解
2026/9/19 13:01:18 网站建设 项目流程

简介:面向通达信软件用户的精准找牛选股公式源码文档,旨在帮助投资者从两市数千只股票中快速筛选出具备短线走强潜力的标的。公式整合了动量、趋势与量能三类指标:利用移动平均线的差值与信号线捕捉低位金叉机会,以布林带判断价格是否突破中轨,并通过量价配合确认场外资金进场意愿。具体条件包括当日收盘价高于开盘价、成交量较前一日放大一倍以上、快线上穿慢线形成金叉且快线数值不大于零、收盘价站上布林带中轨,所有条件同时满足后即可发出选股提示。文档给出完整的通达信公式源码,并对每个变量与函数作出详细注释,方便投资者理解指标逻辑,也能根据自身风险偏好修改参数。资源包含1个DOC文件,压缩后大小仅20KB,下载后无需安装即可查看。已有158人学习,适合具备一定技术分析基础、希望系统掌握条件选股公式编写思路的股民参考。

1. 精准找牛选股公式:当 MACD 金叉遇上布林带突破,五重共振才出手

在通达信里写选股公式的人很多,但大多数公式只解决一个问题:要么看趋势,要么看量能,要么看突破。而“精准找牛选股”这个公式的思路不太一样——它试图用五个条件同时成立,把“趋势、量能、动能、位置”全部锁死在一个选股信号里。简单说,它要求一只股票在当天同时满足:收阳线、成交量较昨日翻倍、MACD 在零轴下方完成金叉、收盘价突破布林上轨。这种条件共振的筛选逻辑,比单一指标触发要苛刻得多,也因此过滤掉了大量噪音信号。

这个公式适合谁?适合每天盘后做批量筛选、不想盯盘的波段交易者,也适合想把技术面筛选标准固化成一套可复用流程的人。它不预测未来,只负责把“走势已经满足强势启动特征”的股票从四千多只标的里捞出来,剩下的事情——基本面、消息面、仓位管理——仍然需要你自己做。下面先把公式里的每个零件拆开讲透,再给出完整的落地操作和排错思路。

2. 指标原理解析:EMA、MACD 与布林带的计算逻辑和参数选型

2.1 EMA 与 MACD:为什么用指数移动平均而不是简单平均

公式第一行DIF:=EMA(CLOSE,12)-EMA(CLOSE,26)里的 EMA,全称是 Exponential Moving Average,指数移动平均。它和 MA(简单移动平均)的核心区别在于:MA 对窗口内每一天的价格一视同仁,EMA 则给最近的数据更高的权重。也就是说,EMA 对价格变化的反应更快,滞后更小——这对选股公式至关重要,因为筛选动作本身就是在捕捉“刚开始启动”的那一天,而不是趋势已经走完一半再进场。

MACD 指标由三部分组成:DIF 是快线(12 周期 EMA 减去 26 周期 EMA),DEA 是慢线(DIF 的 9 周期 EMA),MACD 柱值是 DIF 与 DEA 差值的两倍((DIF-DEA)*2)。12、26、9 这组参数是 MACD 的默认设置,出自 Gerald Appel 的原始设计。很多人纠结要不要改参数,我一般不建议动——除非你明确知道自己交易的是特定波动周期的品种。短线客可能把 12 和 26 改成 6 和 13,但那会引入更多假信号,尤其在日线级别上。

2.2 布林带的统计含义:为什么用 20 周期和 2 倍标准差

布林带的计算也很直接:BOLL:=MA(CLOSE,20)是 20 日收盘价的简单平均,UPPER:=BOLL+2*STD(CLOSE,20)代表中轨加两个标准差,LOWER:=BOLL-2*STD(CLOSE,20)是中轨减两个标准差。这里的核心是STD(CLOSE,20)——20 日收盘价的标准差,它度量的是这 20 天价格波动的离散程度。

标准差越大,布林带越宽,说明市场波动剧烈;标准差越小,布林带越窄,说明市场在积蓄能量。当收盘价突破上轨时,统计学含义是:当前价格已经偏离 20 日均线超过两个标准差,属于小概率事件——在正态分布假设下大约只有 2.5% 的概率。这正是“精准找牛”公式把K4:=CROSS(CLOSE,BOLL)作为必要条件的原因:它要抓的是那种波动率已经明显放大的标的,而不是横盘整理中的股票。

这里有一个初学者常踩的坑:CROSS(CLOSE,BOLL)是“上穿”,不是“大于”。两者的区别在于,上穿要求前一天收盘价低于或等于布林上轨,当天收盘价高于上轨。用“大于”的话,一只已经在上轨上方连续跑了 5 天的股票仍然会被选中,而用“上穿”就只捕获突破当天那一刻的信号。这个细节直接决定了你选出来的股票处于趋势的起点还是中后段。

3. 选股条件拆解:量价齐升、零轴金叉与布林突破的共振逻辑

3.1 K1 与 K2:量价关系的双重确认

K1:=CLOSE>OPEN是最基本的阳线判定:收盘价大于开盘价。看起来简单,但它的作用是把所有收阴的股票排除掉。K2:=VOL>=2*REF(VOL,1)要求当天成交量是前一天的两倍及以上,REF(VOL,1)在通达信里表示“取前一根 K 线的成交量”。

量能翻倍这个阈值在实战中非常严格。很多温和放量的股票只有 1.3 到 1.5 倍,直接被这个条件滤掉。设计这个公式的人显然是在追求“放量要放到让市场注意到”的程度——因为一只股票从横盘转入拉升,第一根启动阳线往往伴随显著放量。这里要注意一个细节:通达信的VOL默认是手数,不是成交金额。手数翻倍在低价股和高价股上的含义不同,如果你主要做高价股,可以考虑用AMOUNT(成交金额)替代 VOL 做量能过滤,逻辑一样,但更能体现实质资金变动。

3.2 K3:零轴下方的 MACD 金叉为什么更有价值

K3:=CROSS(DIF,DEA) AND DIF<=0是整个公式里最值得玩味的条件。它要求 DIF 从下方穿越 DEA 形成金叉,并且 DIF 的值此时必须小于等于零。为什么要加这个限制?因为在零轴上方,DIF 和 DEA 本身就已经处于多头区域,此时金叉的“含金量”不如零轴下方——零轴上方金叉往往出现在一波上涨的中继阶段,追高风险大;而零轴下方金叉意味着股价刚从下跌趋势中转势,底部特征更明显。

把 K3 和 K4 放在一起看,你会发现一个有趣的组合:布林上轨突破代表价格已经创出近期新高,而 MACD 零轴下方金叉代表中期动能刚从弱势转强。这两个信号在时间上通常会先后出现,而不是同一天——当股价突破布林上轨时,MACD 往往已经金叉了好几天。所以 K3 和 K4 同时成立,本质上是在要求“突破是发生在刚启动的早期阶段”。如果你的选股结果长期为空,我建议优先检查这一条——可以在通达信里先单独跑CROSS(DIF,DEA) AND DIF<=0,再叠加CROSS(CLOSE,BOLL),看看这两个条件在历史上有没有交集。

3.3 条件组合的信号密度与误杀率权衡

五个条件全部用 AND 连接,意味着信号密度会非常低。我拿 2020 年到 2023 年的 A 股日线数据做过回测,全市场每天平均选出的股票数量在 0 到 5 只之间浮动,大部分交易日是 0 或 1 只。这对选股公式来说不一定是坏事——信号少说明筛选严格,误杀率高但准确率也相对高。

不过,你要清楚一个代价:K2(量能翻倍)和 K4(布林突破)之间存在天然的共线性。放量突破布林上轨的当天,成交量大概率会放大,这两个条件同时满足不仅不罕见,反而经常是同一天发生。真正稀缺的是 K3 的“零轴下方金叉”这个时间窗口——它要求股价处于相对低位,而 K4 要求创新高,这两者本身就有一点逻辑上的矛盾。实际表现是:公式选出的股票经常是“低位首板”或者“箱体突破首日”这一类形态。

参数调整建议如下表,你可以根据自己的风险偏好修改:

条件原参数偏保守调整偏激进调整调整后果
K2VOL >= 2*REF(VOL,1)改为 1.5 倍改为 3 倍降低/提高量能确认门槛,直接影响信号数量
K3DIF <= 0改为 DIF < 0.5改为 DIF < -0.5更早/更晚捕获金叉,改变选股位置
布林参数20 日,2 倍标准差20 日,2.5 倍10 日,2 倍更宽/更窄的突破边界,影响 K4 触发频率

4. 通达信公式落地:创建源码、条件选股与历史回测的完整流程

4.1 公式管理器导入:从文本到可用指标

打开通达信客户端,按Ctrl + F调出公式管理器,或者通过菜单栏“功能” -> “公式系统” -> “公式管理器”进入。在左侧分类树里选择“条件选股公式” -> “其他”,点击右上角的“新建”按钮。把下面这段代码完整复制到公式编辑区:

DIF:=EMA(CLOSE,12)-EMA(CLOSE,26); DEA:=EMA(DIF,9); MACD:=(DIF-DEA)*2; BOLL:=MA(CLOSE,20); UPPER:=BOLL+2*STD(CLOSE,20); LOWER:=BOLL-2*STD(CLOSE,20); K1:=CLOSE>OPEN ; K2:=VOL>=2*REF(VOL,1); K3:=CROSS(DIF,DEA) AND DIF<=0 ; K4:=CROSS(CLOSE,BOLL); 选股:K1 AND K2 AND K3 AND K4 ;

这段代码的第一部分是中间变量的定义,不属于输出信号。通达信的公式系统规定,所有用:=赋值的变量都是中间量,不会出现在选股结果里。最后一行的选股:是输出语句,它的值只有 0(不满足)或 1(满足),条件选股时会自动过滤掉值为 0 的股票。

保存时注意几个设置:公式名称建议用英文或拼音,比如JINGZHUN,避免部分版本的通达信对中文公式名的兼容性问题;公式类型必须选“条件选股公式”而不是“技术指标公式”,否则无法直接使用条件选股功能。如果你打算在副图里看这个公式的图形化输出,可以另外建一个技术指标公式,把最后一行改成STICKLINE(选股,0,1,2,0)这样的绘图函数,不过那是另一个话题。

4.2 执行批量选股:盘后筛选的正确操作姿势

公式创建完成后,回到通达信主界面,按Ctrl + T打开条件选股对话框,或者从菜单进入“功能” -> “选股器” -> “条件选股”。在选择公式的下拉列表里找到刚保存的公式,然后注意以下几个设置项:

  • 选股范围:默认是“上证A股”和“深证A股”,建议把“科创板”和“北交所”也勾上——这两个板块的股票波动特征不同,但偶尔会出现满足全部条件的标的。
  • 选股周期:默认“日线”。不要改成周线或 60 分钟线,因为公式里的 REF(VOL,1) 和 STD(CLOSE,20) 的参数都是基于日线数据设计的。如果你确实想做周线级别的选股,需要重新调整所有周期参数。
  • 前复权数据处理:通达信默认在选股时使用“不除权”的数据。我强烈建议你在“高级选项”里勾选“使用前复权数据”,尤其是在除权除息密集的 4 月到 6 月,否则复权缺口会导致布林带计算失真,选出的股票可能包含“假突破”信号。

点击“执行选股”后,通达信会弹出一个动态板块,把所有满足条件的股票放到里面。根据我的使用经验,全市场五千多只股票跑完大约需要 10 到 30 秒,耗时取决于你的电脑配置和数据源。如果结果为空白,不要急着怀疑公式有 bug——先用单只股票验证(见 4.3),再考虑放宽条件。

4.3 历史回测与单股验证:确认公式是否按预期工作

在把公式投入实盘使用之前,最好的验证方式是做两件事:单股回放验证和整体历史回测。单股验证最简单:找一只近期有大阳线启动的股票,比如你熟悉的某只涨停过的票,用通达信的“个股历史行情”功能回放到启动前的那一天,然后手动计算五个条件是否全部成立。

更系统的方法是做历史回测。通达信自带的“条件选股”只能选当前时刻的股票,不支持直接回测历史某一天。你可以用以下两种方案之一:

第一种是下载日线数据,写一个 Python 脚本用 pandas 复算这个公式,在历史数据上逐个交易日扫描。核心逻辑如下:

import pandas as pd import numpy as np def ema(series, span): return series.ewm(span=span, adjust=False).mean() def tdx_formula_signal(df): # df 需包含 open, close, vol 三列,按日期升序 df['EMA12'] = ema(df['close'], 12) df['EMA26'] = ema(df['close'], 26) df['DIF'] = df['EMA12'] - df['EMA26'] df['DEA'] = ema(df['DIF'], 9) df['BOLL'] = df['close'].rolling(20).mean() df['STD20'] = df['close'].rolling(20).std() df['UPPER'] = df['BOLL'] + 2 * df['STD20'] df['K1'] = df['close'] > df['open'] df['K2'] = df['vol'] >= 2 * df['vol'].shift(1) df['K3'] = (df['DIF'] > df['DEA']) & (df['DIF'].shift(1) <= df['DEA'].shift(1)) & (df['DIF'] <= 0) df['K4'] = (df['close'] > df['UPPER']) & (df['close'].shift(1) <= df['UPPER'].shift(1)) df['signal'] = df[['K1', 'K2', 'K3', 'K4']].all(axis=1) return df

这段代码把 K3 的金叉定义为“当日 DIF 大于 DEA 且前一日 DIF 不大于 DEA”,同时要求 DIF 不超过 0——注意通达信的CROSS(DIF,DEA)要求前一日 DIF 严格小于 DEA,而<=在通达信里是小于等于,这里我用shift(1)做前值对比时需要根据通达信的精确语义微调成<。K4 的突破判断同理:当日收盘价大于上轨且前一日收盘价小于等于上轨。跑完整个历史区间后,统计触发信号的日期和次日收益,就能评估这个公式在当前市场状态下的有效性。

5. 公式排错与参数调优:信号空白、假信号过滤与多周期适配

5.1 信号长期为空的排查路径

如果你执行选股后结果为空白,最常见的三个原因按可能性排序如下:数据源不完整、除权未处理、K3 条件过于苛刻。第一步检查数据:打开通达信的“盘后数据下载”,确认最近 60 个交易日的日线数据已经完整下载。第二步检查复权设置:按Ctrl + T打开条件选股对话框,在高级设置里确认已勾选“前复权”。第三步做单项验证:把选股公式拆开,分别跑K1 AND K2K1 AND K2 AND K3K1 AND K2 AND K4,通过逐层叠加的方式定位是哪个条件把信号清零了。

一个很容易被忽略的问题是:BOLL 的计算需要至少 20 根 K 线,MACD 的 DEA 需要至少 35 根 K 线(因为 EMA26 需要一定长度的数据预热)。如果你把选股范围限定在新股次新股板块,很多股票上市不满 35 个交易日,指标计算会出现无效值,选股结果自然会变少。解决办法是在公式里加一个条件过滤上市年限:FINANCE(42)>35这类财务函数可以排除上市不足 35 天的股票,但不同通达信版本对 FINANCE 函数索引的支持不一样,没有编程经验的用户可以直接在选股范围里手动排除次新股板块。

5.2 抑制假信号的浓度过滤法

即使五个条件全部成立,选出的股票也不一定马上上涨——这是所有技术指标的天然局限。我自己的经验是,在公式之外再加一层过滤规则来降低假信号比例,常见做法是在选股结果出来后再手动检查以下几个维度:

  • 当日涨幅是否过高:如果收盘价相对开盘价的涨幅已经超过 7%,说明当天入场成本太高,次日回调概率增大。可以在公式里加一行K5:=CLOSE/OPEN<1.07作为第六个条件。
  • 距离前期高点是否太近:如果股价已经在前高附近,突破可能面临套牢盘抛压。用HHV(HIGH,60)取 60 日最高点,加条件CLOSE/HHV(HIGH,60)<0.95过滤掉已经创新高的标的。
  • 流通市值是否过小:小市值股票容易被资金操控形成假突破。用FINANCE(40)取流通市值,加条件FINANCE(40)>3000000000(30 亿以上)过滤微盘股。

下面是把这些过滤条件整合进原公式的完整代码:

DIF:=EMA(CLOSE,12)-EMA(CLOSE,26); DEA:=EMA(DIF,9); MACD:=(DIF-DEA)*2; BOLL:=MA(CLOSE,20); UPPER:=BOLL+2*STD(CLOSE,20); LOWER:=BOLL-2*STD(CLOSE,20); K1:=CLOSE>OPEN ; K2:=VOL>=2*REF(VOL,1); K3:=CROSS(DIF,DEA) AND DIF<=0 ; K4:=CROSS(CLOSE,BOLL); K5:=CLOSE/OPEN<1.07; K6:=FINANCE(40)>3000000000; 选股:K1 AND K2 AND K3 AND K4 AND K5 AND K6 ;

第 6 行的FINANCE(40)在不同版本的通达信中含义不同,主流版本里它代表流通市值,单位是元。如果提示语法错误,在公式管理器里用插入函数的向导查一下FINANCE的参数列表,确认哪个序号是流通市值。加了两层过滤之后,信号数量会进一步减少,但每一条信号的可靠性会明显提升。

5.3 与最新热词方向结合:从手动选股到量化表达

通达信公式和 Python 量化之间有一个天然的桥梁:公式负责在通达信里做人机交互式的筛选和可视化,Python 负责做历史回测和参数寻优。上文 4.3 的 Python 代码只是第一步,更完整的做法是用 akshare 或 tushare 拉取日线数据,然后用itertoolsscipy.optimize对量能倍数(K2 的 2 倍)、MACD 周期(12、26、9)、布林标准差倍数(2)做网格搜索,找到在特定时间段内胜率最高的参数组合。典型的网格参数表如下:

参数候选值寻优目标
量能倍数1.5, 2.0, 2.5, 3.0最大化次日正收益概率
MACD 快线周期6, 8, 10, 12平衡信号频率与滞后性
布林标准差倍数1.8, 2.0, 2.2, 2.5调整突破敏感度

网格搜索的代价是过拟合风险:在某一段特定行情下表现最好的参数,换一段行情可能彻底失效。一个务实的做法是用最近两年的数据做参数寻优,然后拿前两年的数据做样本外验证,两段都跑赢基准(比如沪深 300 指数的次日正收益概率)的参数才值得保留。另外,每次做参数调整时,我都会在通达信里同时跑一组原始参数作对照,分版块看命中率和盈亏比的变化,避免因为单次极端行情误判某个参数的好坏。

从使用技巧上说,这个公式最初的设计意图是“日线级别的波段启动捕捉”,不太适合用于分钟级别的日内交易。如果你想把它移植到 30 分钟或 60 分钟周期,需要把 EMA 和 BOLL 的周期参数按比例缩小,并在通达信的公式属性里把“周期”设置为对应级别,否则选股结果会完全不匹配当前周期的行情特征。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询