简介:面向股票技术分析爱好者的通达信指标公式文档,聚焦短线与中线操作场景。文档以完整公式源码为核心,围绕KDJ日、周、月三周期金叉共振识别“金牛启动”信号:当日、周、月线KDJ金叉同时出现时触发“日周月赚”提示,并在此基础上加入MACD差值启动、均线交叉与主升浪识别条件,帮助交易者在多周期共振中寻找潜在买点。资源仅含1个doc文件,大小254KB,可直接在通达信软件中复制源码使用,也可按个人风格调整参数。目前已有155人学习。除核心选股逻辑外,内容还覆盖净流入资金跟踪、成交量变化、超买超卖判断等辅助指标,并解释了密码变量和二日比对短期波动强度的度量方式,展现出从趋势判断到资金验证的完整分析思路,适合有一定基础的投资者深入理解指标组合的设计逻辑,并据此优化自己的选股与择时方法。
1. 多周期共振指标:为什么单看日线KDJ总是不够用
做短线的朋友基本都碰到过这种场景:日线KDJ刚金叉,买入后次日就回调;等周线指标修复到位,股价已经走完第一波主升。问题不在KDJ本身失效,而是日、周、月三个周期的走势经常互相矛盾,单周期信号天然存在误判。这份“通达信指标公式源码超级金牛启动.doc”里给出的源码,把多周期KDJ金叉、MACD柱加速、主升浪均线结构、资金净流入和量价平滑曲线整合成一个综合指标,在主图上用“LSP大牛”“LSP金牛”“金牛启动”等文字直接标出信号,短线和中线共用一张图判断。它的目标用户是已经会操作通达信公式管理器、但还没建立起多周期信号组织方法的交易者。按源码结构看,它实际分成了五个模块:KDJ多周期共振、MACD启动、主升浪判定、资金流向过滤和主图可视化,下面按这个顺序拆开讲。
2. KDJ多周期共振:跨周期取数与信号权重编码
2.1 “#MONTH”跨周期引用语法与日周月金叉的判定
打开公式源码,最前面一大段看起来是KDJ,其实是三组KDJ:日线、周线、月线。通达信公式的跨周期取数写法是"指标名.输出名#周期",所以"KDJ.K#MONTH"的意思是“取月线KDJ指标里的K值”,"KDJ.D#WEEK"就是取周线KDJ的D值。没有#后缀的"KD.K"使用当前行情周期的KDJ,当前在日线图上时就等于日线KDJ。原文档里的变量名带了空格,例如“日 K”“月 K”,直接粘贴到公式管理器容易因为全角空格报错,我习惯先把所有变量名内的空格去掉再编译。清理后的取数代码如下:
{多周期 KDJ 取数:在日线图上引用周、月周期数据} 月K:="KDJ.K#MONTH"; 月D:="KDJ.D#MONTH"; 周K:="KDJ.K#WEEK"; 周D:="KDJ.D#WEEK"; 日K:="KD.K"; 日D:="KD.D"; 日金叉:=IF(CROSS(日K,日D),15,0); 周金叉:=IF(CROSS(周K,周D),25,0); 月金叉:=IF(CROSS(月K,月D),35,0);CROSS(日K,日D) 只在“K值由下向上突破D值”的那一根K线上返回1,随后立即归零,所以IF(CROSS(...),15,0)本质上是一个事件编码器。15、25、35三个数值没有行情含义,只是用来区分信号来自日线、周线还是月线周期。这样后面的组合判断可以直接拿整数做等值比较,不需要写多层AND嵌套,逻辑更简洁,也方便复制到选股公式里。
提示:周线和月线不是每天都产生新K线,周一的日线刚刚开盘时,周KDJ引用到的还是上周的数据;盘中跨周期引用会随着周期K线收盘而刷新,但收盘后复盘时,当日不算收盘根,共振信号可能顺延到下一个交易日才在图上显示。
2.2 金叉组合权重与“LSP大牛”文字信号的分级
单周期金叉只能说明短周期方向转多,真正有价值的是组合。源码把金叉事件进一步组合:
日周月:=IF(日金叉=15 AND 周金叉=25 AND 月金叉=35,1,0); 日周:=IF(日金叉=15 AND 周金叉=25,2,0); 周月:=IF(周金叉=25 AND 月金叉=35,3,0); 日月:=IF(日金叉=15 AND 月金叉=35,4,0); 日周月赚:=日周月=1; 周月赚:=周月=3; 日月赚:=日月=4;从命名能看出原作者的分级意图:日周月是“三周期共振”,力度最大;周月、日月是双周期共振,力度次之;日周组合源码里没有直接绘制文字,只参与后续上下文的判断,相当于短线修复状态。这四个组合覆盖了多周期金叉的大部分场景,只有日线单周期金叉被有意忽略,因为单周期信号在原公式设计里不具备操作价值,过滤掉反而减少误触发。组合关系和图上文字对应如下:
| 组合变量 | 周期组成 | 图上文字 | 设计含义 |
|---|---|---|---|
| 日周月赚 | 日线+周线+月线 | LSP大牛 | 三周期共振,最强信号 |
| 周月赚 | 周线+月线 | LSP金牛 | 中线波段确认 |
| 日月赚 | 日线+月线 | LSP牛牛 | 月线托底,日线反弹 |
| 日周赚 | 日线+周线 | 无 | 短线修复,配合其它信号 |
图上文字由DRAWTEXT输出,纵向位置用同一个稳定指标乘系数错开:
DRAWTEXT(日周月赚,趋势*0.96,'↖LSP大牛'),COLORRED; DRAWTEXT(周月赚,趋势*0.97,'↖LSP金牛'),COLORFF00FF; DRAWTEXT(日月赚,趋势*0.98,'↖LSP牛牛'),COLORYELLOW;可能有用户会困惑,既然是条件满足才画文字,为什么坐标还要乘0.96、0.97、0.98而不是直接用一个固定价格。因为不同股票的绝对价格差异太大,固定价格会出现高价股文字画在K线顶部之外、低价股文字又挤在一起的问题。用趋势线的相对比例做Y轴,无论股价是5元还是200元,三行文字都会在趋势线下方留出均匀间隔,视觉上不遮盖K线实体。
2.3 三周期共振信号的频率特征
三周期共振信号出现的频率远低于单独日线金叉。一个月线周期只有一根月K线,月线KDJ金叉可能一两个月才出现一次,要让日线、周线、月线的金叉落在同一根K线上,条件非常苛刻,往往只出现在大级别底部启动初期。所以复盘时看到“LSP大牛”的频率很低是正常现象,不需要因为图上一周都没有信号就觉得公式失效。反过来,如果某只股票连续出现两次“LSP大牛”,通常意味着主升浪级别的行情已经确认,第二次共振往往比第一次更值得重视。
3. MACD柱加速与主升浪识别:金牛启动信号怎么触发
3.1 DIF-DEA差值放大120倍后的启动条件
源码的MACD段落从DIF和DEA开始,但后面做了一个关键处理,把“DIF-DEA”的柱状高度放大后再求变化率:
DIF:=EMA(DCLOSE,12)-EMA(DCLOSE,26); DEA:=EMA(DIF,9); AAA:=(DIF-DEA)*2*60; 启动:=CROSS(AAA-REF(AAA,1),15),COLORRED,LINETHICK2; DRAWTEXT(启动,L*0.97,'↖金牛启动'),COLORYELLOW,LINETHICK2;DIF是12日EMA与26日EMA的差,DEA是DIF的9日EMA,这两个定义与通达信内置MACD完全一致,区别只在于输入源用了DCLOSE,也就是除权后的复权收盘价。用DCLOSE的好处是,股票除权除息当天价格跳空时,不会因为价格断层让DIF产生假金叉或假死叉。
下一行AAA:=(DIF-DEA)*2*60把柱高放大了120倍。为什么要放大?大部分个股的原始MACD柱高波动范围在±0.3,柱高的一阶差分,也就是今天柱高减昨天柱高,通常只有±0.05。如果直接用“柱差大于0.15”这样的条件,阈值很难设置。放大120倍后,柱差波动集中在10到50的量级,阈值15就非常直观。CROSS(AAA-REF(AAA,1),15)的含义是:今天MACD柱高度的增量从15以下上穿到15以上,表明柱体加速扩张,动能突然增强,这就是“金牛启动”的触发原理。
该信号的灵敏度由两个参数控制:一是放大倍数(2和60),二是阈值15。放大倍数越大,柱差数值越大,越容易突破阈值;阈值越提高,要求动能爆发越强。实际测试下来,阈值15在日线级别大约每周给出1到3次信号,去掉ST股后大部分信号集中在波动率较高的个股上;如果把阈值改成25,信号数量会下降到原来的三分之一左右,更适合中线持仓确认。
提示:这里的“启动”信号和后面的“主升启动”是两个不同的东西。“启动”只看MACD柱斜率,是短线的快信号;“主升启动”要叠加均线结构和零轴位置,是趋势确认的慢信号。把两者混为一谈是使用该指标最常见的错误。
3.2 主升启动:均线中枢、55日线与MACD低位金叉三条件合并
主升浪判定段落是整份源码里最严格的一组条件:
AA:=(MA(CLOSE,3)+MA(CLOSE,6)+MA(CLOSE,12)+MA(CLOSE,24))/4; BB:=EMA(AA,2); TP:=(CROSS(AA,BB) OR CROSS(C,AA)) AND C>=EMA(C,55); CC:=EMA(CLOSE,12)-EMA(CLOSE,26); DD:=EMA(CC,9); 主升启动:=TP AND CROSS(CC,DD) AND (DD<=-0.07)*CC; DRAWICON(主升启动,L*0.996,1); DRAWTEXT(主升启动,L,'↖LSP牛');AA是3、6、12、24四条均线的简单平均值,可以理解成一个短中期均线中枢;BB是AA的2周期EMA,比AA更平滑。TP条件要求“AA上穿BB”或者“收盘价上穿AA”,两个方向成立一个即可,但同时要求收盘价在55日EMA之上。这个设计想表达的是:股价已经站在中长期趋势上方,短中期均线开始向上修复,趋势由下跌转入上涨。
CC和DD就是DIF和DEA。CROSS(CC,DD)是MACD金叉,但真正引发主升启动的最后一个条件是(DD<=-0.07)*CC。这个式子在通达信里的执行规则是:DD<=-0.07为真时返回1,乘以CC得到CC本身,CC非0即真;为假时返回0,整体为0即假。所以它等价于“DEA小于等于-0.07”这个数值约束,作用是要求MACD金叉发生在DEA处于较低位置时,也就是零轴附近的低位金叉,而不是股价涨高后的追高金叉。
这是主升浪信号的精髓:只有在DEA不高时出现MACD金叉,才更可能走出一波像样的行情;高位钝化之后的金叉往往只是诱多。需要留意的是,-0.07这个值对高价股和低价股参考意义不同,价格20元以上的股票DEA绝对值通常在0.5以上,而5元股票DEA可能只有0.1,所以-0.07更接近中低价股市场的通用近似值。主升启动各条件的逻辑权重如下:
| 条件 | 含义 | 信号变化趋势 |
|---|---|---|
| CROSS(AA,BB) | 均线中枢修复 | 频率适中 |
| CROSS(C,AA) | 价格突破中枢 | 频率偏高 |
| C>=EMA(C,55) | 站上55日线 | 过滤下跌趋势 |
| CROSS(CC,DD) AND DD<=-0.07 | 零轴附近金叉 | 大幅减少信号 |
当“LSP牛”文字出现时,如果后面跟随的K线能放出1.2倍以上的量能,通常就是主升浪第一波的起点。此时再去看第2章的“LSP大牛”多周期共振是否也成立,两者叠加的效果要好于任取其一。
4. 资金流向与量价确认:净流入万元、PMA与二日比
4.1 净流入万元的累计口径与PMA/PMB转折识别
很多通达信公式里都有资金流向代码,但统计口径差异很大。这份源码用的是“全量成交金额累加法”:
AAA2:=SUM(IF(CLOSE>REF(CLOSE,1),VOL*C,0),0); AAA3:=SUM(IF(CLOSE<REF(CLOSE,1),VOL*C,0),0); AAA4:=SUM(IF(CLOSE=REF(CLOSE,1),VOL*C,0),0); 净流入万元:=(AAA2-AAA3-0.5*AAA4); PM:=MA(净流入万元,1); PMA:=PM/REF(PM,1)>1; PMB:=REF(PMA,1)<1 AND PMA;AAA2把每个上涨日的成交额累加起来,AAA3是下跌日的成交额累加,AAA4是平盘日的成交额累加。最终净流入万元并不等于“大单净买入”,而是把上涨日全量成交额视为流入、下跌日全量成交额视为流出、平盘日只扣一半,它反映的是市场整体多空气氛的累计值,所以不用太纠结绝对值大小,方向变化才有参考意义。
PM取1日均线,从写法上看等于净流入万元本身。PMA定义为PM/REF(PM,1)>1,用来判断今天净流入额相对昨天仍在放大;PMB则要求“昨天没放大、今天刚放大”,捕捉的是资金从放缓到加速的转折点。实战过滤中我更关注PMB而不是PMA,因为PMA连续多日为真时往往已经是行情中后段,而PMB从0变1的当天,通常对应价格突破或金叉的第一根确认K线。每个中间变量的用途汇总如下:
| 中间变量 | 计算方式 | 用途 |
|---|---|---|
| AAA2 | 上涨日VOL*C逐日累加 | 流入侧累计额 |
| AAA3 | 下跌日VOL*C逐日累加 | 流出侧累计额 |
| AAA4 | 平盘日VOL*C逐日累加 | 平盘成交额,按50%扣减 |
| 净流入万元 | AAA2-AAA3-0.5*AAA4 | 市场多空氛围累计值 |
| PMA | 净流入额环比放大 | 资金持续扩张状态 |
| PMB | 昨日不放大今日放大 | 资金转向起点 |
4.2 “密码”与二日比:成交额双重平滑后的短期强弱校验
继续往下是量价指标部分:
B1万元:=DVOL*DCLOSE/100; B1差:=B1万元-REF(B1万元,1); B2万元:=DVOL*DCLOSE/100; B2比:=B2万元/REF(B2万元,1); 密码:(EMA(MA(B1万元,2),2))/100000,COLORYELLOW,NODRAW; 二日比:=密码/REF(密码,1);B1万元计算的是复权成交量乘以复权收盘价再除以100,本质是单日成交额的另一种表示,但用了DCLOSE系列数据,避免了除权跳空。B1差是成交额的一阶差分,B2比是成交额的环比,公式里没有直接画出图形,更多是作为中间量被引用。
“密码”这个名字比“净流入”难懂一些,它的本质是“日成交额先做2日均线、再做2周期EMA”的二重平滑结果,再除以100000折算成可视量级。NODRAW表示不显示图形,只用数值参与后续计算。二日比等于今天密码除以昨天密码,大于1说明近两日成交额处在放大状态,小于1说明成交在萎缩。
把二日比和前面两章的信号结合时,我一般会写一段验证条件:
{示例:金牛启动时要求量能平滑曲线刚向上突破} 量能确认: 启动 AND 二日比>1 AND REF(二日比,1)<1;这段的顺序是:先有方向和动能信号(KDJ和MACD金叉),后看资金配合(净流入和成交额平滑曲线)。如果二日比在信号出现时已经连续3天大于1,说明资金早就进场,价格可能已经处于启动中期而不是起点,追高风险反而更大;如果信号当天二日比刚从小于1变成大于1,则是相对安全的右侧确认点。
提示:密码的折算单位在不同通达信版本里显示数值会不同,如果副图里看到的数值是几千而不是个位数,把 /100000 改成 /10000000 即可,逻辑不变,只改量纲。
5. 主图信号可视化:DRAWTEXT定位、DRAWICON图标与板块拼接
5.1 文字信号坐标的三档错位设计
通达信的DRAWTEXT函数,前两个参数是条件和Y轴坐标,第三个参数是绘制文字。由于Y轴坐标跟随主图价格刻度,直接用固定价格做坐标在不同股票之间差异很大。源码用了一段EMA双平滑后的趋势线做基准:
趋势:=EMA(EMA(C,4),4),COLORYELLOW; DRAWTEXT(日周月赚,趋势*0.96,'↖LSP大牛'),COLORRED; DRAWTEXT(周月赚,趋势*0.97,'↖LSP金牛'),COLORFF00FF; DRAWTEXT(日月赚,趋势*0.98,'↖LSP牛牛'),COLORYELLOW;趋势是收盘价的4周期EMA再取4周期EMA,比直接用收盘价平滑得多,短线噪声明显减少。乘0.96、0.97、0.98是为了在空间上错开:当三周期共振条件成立,图上一根K线附近会出现三行不同颜色的文字,位置依次下移;如果只有一个周期组合成立,则只出现对应的一行。COLORRED、COLORFF00FF、COLORYELLOW分别对应大牛、金牛、牛牛,红色最醒目,让最强信号在图上第一眼就能被看到。
DRAWTEXT的Y轴只能接受数值线或数值表达式,不能直接写“日周月赚”这样的条件做定位。通过趋势线乘以不同系数,既照顾了不同股票的绝对价格,也没有让文字离开K线太远,这个细节可以沿用到自定义指标里。
5.2 主升启动的DRAWICON图标编号与显示问题
主升启动的图标输出这段:
主升启动:=TP AND CROSS(CC,DD) AND (DD<=-0.07)*CC; DRAWICON(主升启动,L*0.996,1); DRAWTEXT(主升启动,L,'↖LSP牛');DRAWICON(条件,坐标,图标编号) 在条件成立时于坐标位置绘制内置图标。这里坐标是L*0.996,L是当根K线最低价,0.996意味着图标底部只比最低价再低0.4%,不会压住K线实体;图标编号1在不同版本通达信里通常是红色菱形或旗帜。如果图形不显示,多数是安装版本的精简资源包里没有对应图标,可以在公式编辑器的“插入资源”里重新指定图标编号,改用3、4、9等编号测试。
DRAWTEXT在L价格位置再画一行文字,文字会自然悬浮在最低价上方。主升启动属于低频信号,在有的股票上一年只出现几次,用图标加文字双重标注,能避免复盘时漏看关键位置。DRAWICON配合文字使用的做法在通达信指标公式源码里很常见,适合把低频高价值信号做成视觉强提醒。
5.3 用STRCAT拼接行业、地域、概念板块名称
源码末尾有一段固定文字显示的代码:
Z1:=STRCAT(HYBLOCK,' '); Z2:=STRCAT(Z1,DYBLOCK); Z3:=STRCAT(Z2,' '); DRAWTEXT_FIX(ISLASTBAR,0.01,0.01,0,STRCAT(Z3,GNBLOCK)),COLORYELLOW;HYBLOCK返回股票所属行业板块名,DYBLOCK返回地域板块名,GNBLOCK返回概念板块名。STRCAT把两个字符串拼接成一个字符串返回,这里先拼行业加一个空格,再拼地域,最后拼概念,保证三段信息之间不粘连。DRAWTEXT_FIX是固定位置显示文字,ISLASTBAR为真时只打印在最后一根K线上,不会在历史K线位置重复出现,屏幕左上角偏移1%的位置显示拼接好的板块字符串,黄色着色。
这段文字在复盘时非常实用,不用切换到F10或板块列表,一眼就能看到股票跨了哪个行业、哪个地域、叠加了什么概念。需要留意的是,旧版通达信对STRCAT的字符串总长度有限制,拼接超过十几个字符时可能被截断,如果显示不全,删掉中间的空格或只保留行业加概念两项。可视化函数的坐标和用途对比如下:
| 函数 | 坐标/参数 | 用途 |
|---|---|---|
| DRAWTEXT | 趋势*0.96/0.97/0.98 | 错位显示多级信号 |
| DRAWICON | L*0.996及图标编号1 | 强调主升浪起点 |
| DRAWTEXT_FIX | (0.01,0.01)及ISLASTBAR | 在图表左上角固定显示板块名称 |
6. 公式导入、条件选股回测与启动阈值调优
6.1 导入公式管理器时的编码与变量名坑
这份源码在复制到通达信时会遇到两类典型编译错误。第一类是变量名内部带空格,比如原文档里的“月 K”“日 K”“B1 万元”,通达信公式编辑器虽然允许中文变量名带空格,但粘贴过程里一旦变成全角空格,编译器立刻报“未定义的变量名”。建议在粘贴之前用公式管理器的查找替换功能把所有空格替换成空字符,统一写成“月K”“日K”“B1万元”的格式。第二类是特殊箭头字符↖,通达信默认要求GBK编码,如果从文档复制出来变成乱码,要在公式编辑器的编码设置里切到中文简体GBK;调整后仍乱码就直接删掉箭头字符,保留文字部分,不影响信号逻辑。
导入步骤整理如下:
- 按Ctrl+F打开公式管理器,左侧选择“技术指标公式”,点击“新建”。
- 公式名称写“LSP金牛启动”,把清理过空格的源码粘贴到文本区。
- 点击“测试公式”,底部状态栏显示“测试通过”后确定保存。
- 在主图K线界面输入公式名称的首字母,调出指标。
6.2 把综合公式转成条件选股并做历史回测
原公式是画图用的技术指标公式,不能直接用于条件选股。新建一个“条件选股公式”,把整个源码复制进去,最后加一行输出:
XG:日周月赚=1 OR 启动 OR 主升启动;选股器执行后,在“功能—选股器—条件选股”里选择这个公式跑历史信号。回测时一定要排除停牌股和上市首日新股,否则会多出大量噪声样本。更严谨的做法是同时输出两个条件做对照:
信号1:=日周月赚=1 OR 启动; 信号2:=信号1 AND 二日比>1 AND REF(二日比,1)<1; XG:信号2;把“信号2”作为强化条件,和“信号1”分别回测,统计信号出现后3日、5日的涨幅分布,才能看出二日比过滤是否真的提升了胜率。参数调整对信号数量的影响如下:
| 可调参数 | 默认值 | 调整方向 | 效果 |
|---|---|---|---|
| AAA放大倍数中的60 | 60 | 调大 | 信号增多 |
| 启动阈值 | 15 | 调大到22左右 | 信号减少、触发延迟 |
| DD阈值 | -0.07 | 调小到-0.10 | 主升浪过滤更严格 |
| 密码除数100000 | 100000 | 按版本调整 | 只影响显示量纲,不改逻辑 |
实际调参时,优先改启动阈值15而不是60这个放大倍数。把15调到22,金牛启动出现频率下降一半,对应更严格的短线要求;而放大倍数改动对价格剧烈波动的股票影响更大,容易放大噪声。KDJ那组的15、25、35组合权重不建议动,因为三个周期同步金叉本身已经是足够稀疏的事件,改权重会让组合判断混乱,回测结果也失去可比性。整个指标里最值得先调的是主升启动的DD<=-0.07,不同价格区间的股票对这个阈值敏感度差别最大,用历史数据跑一遍不同阈值下的信号分布,再确定适合自己股票池的数值。
本文还有配套的精品资源,点击获取