简介:《牛熊万金油 通达信指标公式源码》是一份面向通达信用户和股票技术分析学习者的指标公式文档,适合希望研究均线系统与MACD组合信号、优化短线和中线买卖点的投资者参考。文档围绕3日、8日、10日、20日、55日、250日均线的粘合、金叉与多头上行排列展开,说明超短线持股1至5天、中线不破5日线继续持有的判断思路,并提示高位放量阴线、长上影线等不宜介入的情形。MACD部分则关注DIF与DEA在0轴上方金叉、再次上穿以及收盘价高于250日均线等条件,还结合3日均线上穿6日均线、55日均线向上和AB条件来强化买入信号。资源包共1个doc文件,约234KB,体积轻便,便于打开阅读、检索和复制公式源码。已有98人学习下载,可帮助读者理解指标条件组合、验证选股逻辑并自行调整参数;技术指标并非绝对,仍需结合市场信息与自身风险承受能力审慎使用。
1. 牛熊万金油指标在通达信里到底判断什么
下载一份「牛熊万金油 通达信指标公式源码.doc」,双击打开,大概率是一屏纯文字:几条均线公式、几个 CROSS 判断、若干 DRAWICON,中间夹着全角括号和中文冒号。把它粘进通达信的公式编辑器,点「测试公式」,弹出「行 N 语法错误」。这个标题真正要打通的,就是从一份文档里的公式文本,到一条能在主图上分牛熊、在副图上给出红绿动能柱、还能把缩量假突破挡在门外的可运行指标。
牛熊万金油的逻辑并不玄:一条短周期指数均线代表多头持仓成本,一条长周期指数均线代表空头成本,两线的相对位置就是牛熊状态,交叉点就是状态切换的确认位,再乘上一个量能饱和度做过滤。它适合做中短波段、没法全天盯盘的从业者,也适合当量化选股池的第一层粗筛。后面从语法底座写起,一路落到参数怎么调、信号不出现时先看哪里。
2. 通达信公式语法底座与牛熊万金油的数据源选型
2.1 通达信公式的四类语句与输出控制
通达信的公式语言只有四种基本动作,搞混了就会出现「变量算出来了但图上没有」的情况。第一种是:=,只算不画,叫中间变量;第二种是:,算完并在图上输出;第三种是带修饰的:,后面跟COLORRED、LINETHICK2、DOTLINE这类绘图属性;第四种是花括号{}包起来的注释,编译时直接跳过。语句必须以英文分号结尾,一行一条。
{中间变量,不会在图上画出线} 短均:=MA(CLOSE,13); 长均:=MA(CLOSE,50); {输出变量,会在主图画线,红色加粗} 牛线:EMA(CLOSE,17),COLORRED,LINETHICK2; 熊线:EMA(CLOSE,50),COLORGREEN,LINETHICK2; {只算数值不参与绘图,NODRAW 表示不占图面} 距离:(CLOSE-牛线)/牛线*100,NODRAW;上面这段里,短均和长均算完就丢在图外,只在后续语句里被引用;如果把它们写成:,主图上会多出两条无用的线。NODRAW的用途是把数值挂到公式上、供排序或跨周期引用,但不画出来。写牛熊万金油时,凡是只用于判断的中间量一律用:=,只有牛线、熊线、动能柱和信号图标用输出语句。
2.2 牛熊万金油为什么用 EMA 而不是 MA
这是个高频选型问题。MA(X,N)是 N 周期算术平均,每根 K 线的权重相同;EMA(X,N)是指数加权,递推式是EMA_t = α×X_t + (1-α)×EMA_(t-1),其中α = 2/(N+1);通达信还有一个SMA(X,N,M),M 控制平滑权重,常用于 KDJ 里的 J 值。三者的差别在趋势转折时最明显:一段下跌走完刚拐头,MA17还压着前几根大阴线的价格,EMA17已经提前两到三根 K 线抬起来了。
| 函数 | 计算方式 | 权重分布 | 典型用途 |
|---|---|---|---|
| MA(X,N) | N 周期算术平均 | 每根等权 | 长期趋势线、年线 |
| EMA(X,N) | α=2/(N+1) 指数加权 | 越近越重 | 牛熊分界线、短趋势线 |
| SMA(X,N,M) | 加权平均,权重 M | M 可调 | 平滑 J 值、慢速随机指标 |
把牛线设成 EMA 还有一个附带好处:它对参数没那么敏感,M1 从 17 调到 13 或 21,曲线形状变化很小,不会出现调一格参数、信号全变的情况。长周期的熊线同样用 EMA,但周期拉到 50 以上,目的是让牛熊状态切换有惯性,避免在震荡区里来回翻。
2.3 从 .doc 里拿到源码后的第一步:清洗与格式转换
.doc 是二进制排版格式,通达信只认.tn6、.tne、.tni这几类公式文件,两者之间没有直接通道。所以从文档到公式,中间必须过一次纯文本。复制粘贴出来的常见脏字符有全角括号、全角逗号、中文分号、中文冒号,通达信一律报语法错误。
| 文档里出现的字符 | 通达信要求 | 不改会报什么 |
|---|---|---|
| 全角括号 ( ) | 半角 ( ) | 行 N 语法错误 |
| 全角逗号 , | 半角 , | 参数解析失败 |
| 中文分号 ; | 半角 ; | 语句未结束 |
| 中文冒号 : | 半角 : | 变量不输出 |
| 换行里的零宽空格 | 直接删除 | 变量名不识别 |
我一般用一段脚本先过一遍,比手工替换稳:
import re RAW = """ 牛线:EMA(CLOSE,17); 熊线:EMA(CLOSE,50); 买点:CROSS(牛线,熊线); """ def to_half_width(s): out = [] for ch in s: code = ord(ch) if code == 0x3000: # 全角空格 -> 半角空格 code = 32 elif 0xFF01 <= code <= 0xFF5E: # 全角字符区整体平移 code -= 0xFEE0 out.append(chr(code)) return "".join(out) txt = to_half_width(RAW) txt = txt.replace("\u200b", "") # 清掉零宽空格 txt = re.sub(r"\n\s*\n+", "\n", txt) # 压掉空行 print(txt.strip())to_half_width按 Unicode 码点做整体平移,全角区0xFF01到0xFF5E减0xFEE0就落到对应的 ASCII 段,中文标点和全角括号一次性处理干净。\u200b是文档转存时经常混进来的零宽空格,肉眼看不见但会让通达信把变量名当成两个词。空行压缩是为了后面定位报错行号时方便对行,这段脚本不依赖任何第三方库,随手存成clean.py就能用。
3. 牛熊万金油主副图公式的完整编写与导入实操
3.1 副图动能公式:量能饱和度与多空差的合成
副图负责回答「这波是放量转强还是缩量反抽」。核心做法是把 MACD 的多空差乘以一个量能饱和度系数,让动能柱的绝对高度同时反映价格动能和成交活跃度。
{牛熊万金油 - 副图动能,参数 M1(5,1,60,5) M2(20,1,120,20)} DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26); DEA:=EMA(DIFF,9); MACD柱:=2*(DIFF-DEA); 量能5:=MA(VOL,M1); 量能20:=MA(VOL,M2); 量能饱和度:=量能5/量能20; {动能柱:多空差乘以量能饱和度,放大放量行情} 动能:DIFF*量能饱和度,COLORSTICK; 动能均线:EMA(动能,9),COLORYELLOW; {量能平衡参考线,饱和度 1.00 处画点} 饱和度:量能饱和度,NODRAW; DRAWICON(ABS(量能饱和度-1.00)<0.01,0,13);量能饱和度是 M1 日均量除以 M2 日均量,默认 5 日和 20 日,正常区间大致在 0.5 到 2.0 之间,1.00 表示短期成交量和中期持平。DRAWICON那一行用的是「接近 1.00 就画圆点」的写法,圆圈出现在动能柱的零轴位置,用来标记量能的临界状态,比直接读数字直观。COLORSTICK让动能自动按正负染红绿,不用手写 IF 分支。参数写成M1(5,1,60,5)的含义是:名字 M1、最小值 1、最大值 60、默认值 5,公式管理器会自动生成滑块,改参数不用再动代码。
3.2 主图趋势公式:牛熊双线与中轴的绘制
主图放牛线、熊线和它们的中轴,中轴的作用是给震荡区定一个参照——价格贴着中轴来回走就是无趋势状态,此时信号可信度最低。
{牛熊万金油 - 主图趋势,参数 N1(17,3,60,17) N2(50,10,250,50)} 牛线:EMA(CLOSE,N1),COLORRED,LINETHICK2; 熊线:EMA(CLOSE,N2),COLORGREEN,LINETHICK2; 中轴:(牛线+熊线)/2,COLORGRAY,DOTLINE; {多空带上下沿,只算不画} 上沿:MAX(牛线,熊线),NODRAW; 下沿:MIN(牛线,熊线),NODRAW; {金叉做多:牛线上穿熊线} 买入:=CROSS(牛线,熊线); DRAWICON(买入,LOW*0.98,1); DRAWTEXT(买入,LOW*0.96,'拐'),COLORRED; {死叉离场:牛线下穿熊线} 卖出:=CROSS(熊线,牛线); DRAWICON(卖出,HIGH*1.02,2); {乖离率:价格偏离牛线的百分比,NODRAW 供选股引用} 乖离:(CLOSE-牛线)/牛线*100,NODRAW;CROSS(A,B)表示 A 上穿 B,只在交叉那根 K 线返回 1,所以DRAWICON不会连续画一片图标。LOW*0.98是把信号图标压到当根 K 线最低价下方两个百分点,避免图标盖住影线。乖离用NODRAW输出后,可以在通达信的「条件选股」里直接引用,比如筛「乖离小于 3 且刚金叉」,比在图上肉眼找效率高得多。中轴用DOTLINE虚线,视觉上不会和牛熊两条实线抢注意力。
3.3 在通达信公式管理器里新建、编译、导入 .tn6
打开通达信,按Ctrl+F调出公式管理器,剩下按下面五步走:
- 左侧选中节点:主图公式放到「技术指标 → 主图叠加」,副图放到「技术指标 → 其它类型」,放错位置会报「该公式不支持主图」。
- 点「新建」,公式名称填不带空格的中文或英文,比如
牛熊万金油主图;画线方法选「主图叠加」或「副图」。 - 把洗好的纯文本粘进大输入框,参数栏按
N1(17,3,60,17)的格式一行一个填进去。 - 点「测试公式」,提示「编译成功」再点「确定」。报错会直接给出行号,对照第 2.3 节的脏字符表回查。
- 要复用别人的现成文件,用「导入公式」选
.tn6,一次能进多个;导出则用「导出公式」,这也是把公式发给同事的标准格式。
注意:通达信里同名公式会被覆盖,导入前先确认是否需要备份旧版本,尤其是改过参数的版本。
导入完成后,在 K 线图输入公式简称回车即可显示。如果同时要看多个周期的信号,可以在通达信里开多窗口铺图,一般配合多显示器做 6 到 20 路同屏,主要瓶颈在本地行情刷新的带宽和 CPU,不在公式本身——公式是纯计算,一根 K 线的运算量微秒级。
4. 参数怎么设:牛熊万金油的3个必调参数与失效排查
4.1 周期参数与量能阈值的调参表
默认参数只是起点,不同持仓周期要往不同方向调。下面这张表是我在日线级别上反复对比后的经验值区间,不是硬性规定。
| 参数 | 默认值 | 短线波段 | 中线趋势 | 调整后的效果 |
|---|---|---|---|---|
| N1 短均线 | 17 | 8–13 | 17–21 | 调小更灵敏,信号提前但假信号增多 |
| N2 长均线 | 50 | 30–40 | 60–90 | 调大趋势更稳,但切换滞后 3–5 根 K 线 |
| 量能阈值 | 1.00 | 0.90 | 1.10–1.20 | 调高只留放量突破,调低纳入缩量反转 |
调参有一个基本约束:N1 必须小于 N2,否则CROSS的方向会反过来,图上全是反信号。量能饱和度阈值建议用「副图 + 选股条件」双管,图上保留 1.00 参考点,选股时才用严格阈值,这样既不丢观察维度,也不让信号泛滥。
4.2 信号不出现或全屏信号的六个排查点
公式跑通不等于信号正确。遇到「一根信号都不出」或者「满屏买卖图标」,按下面顺序查:
- 变量名撞保留字。
CLOSE、VOL、HIGH这些是系统保留字,写成变量名会静默出错,改叫收或C1。 - 全角字符残留。编译能过但行为异常时,回头检查第 2.3 节的表,尤其是从 .doc 复制来的段落。
- 条件恒真或恒假。把判断条件单独用
NODRAW输出成 0/1 数列,在图上数一遍,就能定位是数据问题还是逻辑问题。 - 数据长度不足。次新股上市不满 N2 根 K 线时,
EMA(CLOSE,50)只有部分数据,信号自然不出现,用BARSCOUNT(CLOSE)>N2加一道闸。 - 参数越界。参数栏填了超出最大值或小于最小值的数,公式管理器会拒绝编译,报「参数超范围」。
- 主副图放错。含
COLORSTICK的公式放到主图叠加里,柱体会被 K 线完全盖住,看起来像没输出。
注意:从网络文档拿到的公式里,凡是出现
REF(X,-1)、ZIG、PEAK这类带负号引用或未来函数的写法,信号会随最新数据变动而改变历史,回测好看实盘无效,用之前一律替换或删掉。
4.3 用副图叠加做交叉验证
单个信号源不够,最省事的验证方式是把牛熊动能叠加到另一个独立维度上。通达信的副图支持多公式叠加,在副图区右键「叠加指标」,选一个成交量或资金类公式,两条曲线同时看。
{牛熊万金油 - 确认副图:动能与量能共振} DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26); DEA:=EMA(DIFF,9); 动能:=2*(DIFF-DEA); 量比:=VOL/MA(VOL,5); 共振强度:动能*量比,COLORSTICK; {共振确认:动能转正且量比放大} 确认:=CROSS(动能,0) AND 量比>1.2; DRAWICON(确认,0,1); DRAWTEXT(确认,0,'共振'),COLORRED;量比是当日量与 5 日均量之比,和能量饱和度用的是不同窗口,两个系数相乘后,缩量上涨会被压下去、放量转强会被放大。确认条件要求动能刚翻正、同时量比超过 1.2,两条独立逻辑同时成立才算共振。这一层的价值在于:单看牛熊金叉,震荡区里一年能出十几次信号;加上量比过滤,一般能砍掉一半以上。
5. 进阶:牛熊万金油多周期共振与信号复盘的方法
5.1 用跨周期引用把日线信号挂到周线趋势上
通达信支持在公式里直接引用其他周期的同名指标,语法是"公式名.变量名#周期",周期关键字有#WEEK、#MONTH、#DAY。用它可以做到「日线找买点、周线定方向」,避免在周线空头里抢反弹。
{牛熊共振 - 日线买点叠加周线过滤} 周牛线:="牛熊万金油主图.牛线#WEEK"; 周熊线:="牛熊万金油主图.熊线#WEEK"; 周多:=周牛线>周熊线; 日牛线:=EMA(CLOSE,17); 日熊线:=EMA(CLOSE,50); 日金叉:=CROSS(日牛线,日熊线); 共振买:=日金叉 AND 周多 AND VOL>MA(VOL,5)*1.2; DRAWICON(共振买,LOW*0.97,1); DRAWTEXT(共振买,LOW*0.95,'共振'),COLORRED;#WEEK取的是当前周尚未走完时的实时值,所以盘中会随价格跳动,复盘看历史时以周五收盘为准。引用前必须先建好牛熊万金油主图这个公式,否则跨周期引用会直接编译失败,报「找不到被引用公式」。VOL>MA(VOL,5)*1.2这层量能条件是第三重过滤,三重同时成立的概率远低于单一金叉。
5.2 信号复盘:把条件拆成 0/1 数列做统计
想知道一套参数在下一年会出多少信号、平均后几日表现如何,不用接第三方回测平台,通达信自带的条件选股加上数列导出就够用。做法是把每个判断条件单独输出成NODRAW数列,再用「数据导出」存成 txt,之后交给 Python 做统计。
{复盘辅助 - 所有条件以 0/1 输出,不画线} 日金叉:=CROSS(EMA(CLOSE,17),EMA(CLOSE,50)); 周多:="牛熊万金油主图.牛线#WEEK">"牛熊万金油主图.熊线#WEEK"; 放量:=VOL>MA(VOL,5)*1.2; 共振买:=日金叉 AND 周多 AND 放量; COND1:日金叉,NODRAW; COND2:周多,NODRAW; COND3:放量,NODRAW; SIGNAL:共振买,NODRAW;导出后按SIGNAL列为 1 的行取信号日,再算信号后第 1、3、5、10 根 K 线的收益分布,就能看出这套参数是偏短线还是需要拿住。这一步替换掉的是「凭感觉看图」:同一条公式,三种参数各跑一遍,对比信号数和胜率,选哪个一目了然。
5.3 三个容易忽略的落地细节
第一,公式名和文件名不要带空格和特殊符号,跨周期引用和导出时最容易在这里翻车。第二,主图叠加公式里不要输出太多NODRAW变量,通达信对单个公式的变量数量有上限,超了会报「变量过多」,把中间量复用或删减即可。第三,同一台机器上跑多路分时看盘时,把不用的公式从副图撤掉,副图叠加的每个公式都会随每笔行情重算一遍,六路以上同时开着带十几个变量的公式,行情刷新会明显变慢。参数记在公式注释里比记在文档里可靠,因为注释跟着.tn6一起走。
本文还有配套的精品资源,点击获取