简介:这是一份通达信平台主图指标公式源码文档,面向股票技术分析爱好者与需要自定义交易信号的中级股民。文档以资金突破ZT主图指标为主线,完整提供可直接复制到通达信的公式源码,并对关键语句逐条解析,涵盖K线与背景绘制、7日/20日/30日均线、五日乖离率、速度与加速度、强势狙击以及加仓/减仓/买入/清仓等多组信号算法。其中涉及操盘线、SAR和压力支撑位模块,可辅助识别趋势拐点与资金异动;文档还给出了T、T1等参数的建议取值范围,方便直接套用。通过阅读可清楚了解均线多头排列与乖离率加速背后的触发条件,也能按自身偏好调整参数、优化信号。压缩包内为单个doc文档,大小153KB,内容精炼、代码清晰;已有603人学习下载,适合希望提升看盘效率并构建个人交易参考体系的投资者。
1. 通达信资金突破ZT主图指标:一半是动量系统,一半是分形突破
通达信里的“资金突破ZT主图指标”,名称容易让人以为只是突破画线工具,打开源码后会发现它是两套逻辑叠在同一个主图上:前一半用均线角度、乖离率、速度加速度组成动量系统,输出买入、加仓、清仓、减仓、强势狙击等带仓位含义的文字信号;后一半用分形高低点画出突破线和持仓线,收盘价站上任意一条就在K线下方标出“资金突破”。
这套「方向过滤、动量确认、位置触发」的三层结构值得逐段拆开看,但源码里SMALL日期闸门和BACKSET回溯函数有两个坑:前者会让信号在新行情里全部失效,后者会让盘中看到的突破线在收盘后才会稳定。下面按绘图、动量、信号、分形四条线拆。
2. 图表底座与均线体系:背景、K线重绘与日期闸门
2.1 背景、K线与收盘价标签:通达信绘图的三个基础函数
DRAWGBK(C>0, RGB(01,01,01), RGB(01,01,01), 0, 0, 1); DRAWKLINE(H,O,L,C); MA7:MA(CLOSE,7),COLORRED,LINETHICK2; DRAWNUMBER(ISLASTBAR, C, C),COLORMAGENTA;DRAWGBK的第一个参数C>0在正常行情里恒真,所以整块主图背景被涂成接近纯黑的RGB(1,1,1)。注意RGB的括号里接收的是十进制0-255,这里的01就是数字1,不是十六进制颜色,显示效果是极暗的黑色底。DRAWKLINE把系统自带K线重画一遍,目的是给后面STICKLINE的自定义涂色提供一块干净画布,避免重复叠加导致颜色浑浊。
MA7是7日均线,红色、线宽2,作为短线视觉锚点,它并没有参与后续任何信号计算。DRAWNUMBER配合ISLASTBAR,只在最后一根K线右侧显示收盘价数字,复盘截图时可以直接从图上读出最新价,不必再低头看报价栏。这四个函数基本构成了通达信主图公式的标准开头:先定背景,再重绘K线,然后画参考线,最后标注关键数字。
2.2 操盘线与趋势线:三重EMA的滤波含义
操盘线:=EMA(EMA(EMA(CLOSE,2),2),2); 趋势线:=(MA(操盘线,5)),COLORGREEN,LINETHICK2;把EMA(C,2)连续做三次,得到一条比普通MA更贴价格、但比单根EMA更平滑的曲线,再对操盘线取5日均线作为绿色趋势线。三重EMA的权重集中在最近两三天的收盘价上,同时三次平滑又把单日毛刺逐级衰减,所以它对拐点的反应快于MA8,又不会像单根EMA2那样频繁抖动。绿色趋势线的角色是中期方向参考:它走平或上行时,短期K线回踩到它附近往往进入观察区;它下行时,所有短期红K线都只能按反弹处理。这套设计与后文VAR1/VAR2的20/30线收敛判断是配套的,作者要求短中期方向一致后信号才允许出现。
MA05到MA30这四条均线代码简单,但要注意MA05被额外加粗并涂成浅蓝色,说明它是整个动量系统的核心参考线:后面的加仓、买入、清仓条件里,MA05的方向出现频率最高,而MA10、MA20、MA30更多是作为乖离率的计算底座,不直接参与K线着色。
2.3 SJTJ日期闸门:为什么你的信号可能“过期”
SJTJ:=DATE<1590301;这个变量被拼进后面所有STICKLINE和CROSS条件里,作用是在指定日期之前让绘图和信号生效。DATE在不同通达信版本里返回的编码格式并不统一,1590301这种写法按常见公式的惯例对应的是相对早期的日期。导入新版软件后,如果当前行情日期已经越过这个阈值,所有红绿K线着色和DRAWTEXT文字都会消失,但均线还在。
这里给一个排查口诀:K线没有红绿、文字完全不显示,先查SJTJ。最稳妥的改法是把1590301改成一个明显大于当前日期的数字,或者直接把条件里的 AND SJTJ 全部删掉。公式管理器里做历史评测时这个坑不容易暴露,因为评测区间可能被截在阈值之前,但挂盘中预警立刻现形。
提示:历史区间内信号正常、新K线上没有任何信号,优先怀疑SJTJ日期条件,而不是去改均线参数。
2.4 STICKLINE二次着色:按EMA方向重绘K线
X1:=(C+L+H)/3; X2:=EMA(X1,6); X3:=EMA(X2,5); STICKLINE(X2>=X3 AND SJTJ,LOW,HIGH,0,1),COLORRED; STICKLINE(X2>=X3 AND SJTJ,CLOSE,OPEN,3.2,2),COLORRED; STICKLINE(X2<X3 AND SJTJ,LOW,HIGH,0,1),COLORGREEN; STICKLINE(X2<X3 AND SJTJ,CLOSE,OPEN,3.2,2),COLORGREEN;X1是典型价格,X2是6周期EMA,X3是X2的5周期EMA,两者构成一条短周期趋势通道。X2大于等于X3时,价格重心在上移轨道,所有K线实体涂成红色,反之涂绿。宽度0的STICKLINE负责画影线部分,3.2宽度的负责实体部分,这样一根K线的趋势属性完全由EMA状态决定,而不是由收阳收阴决定。
STICKLINE(CROSS(X3,X2) AND SJTJ,OPEN,CLOSE,3.2,0),COLORGREEN; STICKLINE(CROSS(X2,X3) AND SJTJ,OPEN,CLOSE,3.2,0),COLORRED; STICKLINE((CLOSE>OPEN) AND (X2<X3) AND SJTJ,CLOSE,OPEN,3.2,2)COLORGREEN; STICKLINE((CLOSE>OPEN) AND (X2>=X3) AND SJTJ,CLOSE,OPEN,3.2,2)COLORRED; STICKLINE((CLOSE<OPEN) AND (X2<X3) AND SJTJ,CLOSE,OPEN,3.2,0)COLORGREEN; STICKLINE((CLOSE<OPEN) AND (X2>=X3) AND SJTJ,CLOSE,OPEN,3.2,0)COLORRED;CROSS那两行的意义在于交叉当天需要覆盖一次旧颜色,否则K线会比实际趋势状态晚一天变色。最有信息量的是后面四组:阳线但EMA重心已经转空时,阳线实体也涂成绿色,这是典型的假阳线预警;反过来,阴线但EMA还保持多头时,阴线实体涂红,属于回踩中的强阴线识别。所以看这套公式的K线颜色,不能根据收阳收阴判断多空,要看实体颜色对应的X2/X3状态。
3. 动量维度:均线角度、乖离率与速度加速度
3.1 均线角度ATAN计算:把斜率变成可比较的“度数”
BB05:=ATAN((MA05/REF(MA05,1)-1)*100)*180/3.1416; BB10:=ATAN((MA10/REF(MA10,1)-1)*100)*180/3.1416; BB30:=ATAN((MA30/REF(MA30,1)-1)*100)*180/3.1416;BB05计算的是5日均线当日相对前一日的变化率,乘100后取反正切,再换算成角度。这个做法的核心价值在于归一化:10元的股票和100元的股票,只要均线斜率形状相同,BB值就相同,所以阈值可以固定写成30度、45度、60度。如果直接拿MA的涨跌幅做阈值,不同价位的标的阈值完全不同,参数没法通用。
代价是单日换手剧烈时角度会突变。比如某天股价脉冲上涨,MA05角度可能瞬间超过60度,第二天又回落,所以后面的强势狙击信号外层套了FILTER过滤,加仓条件里又要求速度和加速度同时配合,本质就是防止单根K线把角度打到异常值。
3.2 乖离率:价格相对均线的“拉力”
五日乖离率:=(C-MA05)/MA05*100; 三拾日乖离率:=(C-MA30)/MA30*100,NODRAW; JC:=CROSS(0,五日乖离率) AND 三拾日乖离率<REF(三拾日乖离率,1) AND MA10>REF(MA10,1);这里对乖离率的使用方式值得注意:没有拿BIAS5的绝对值去判断超买超卖,而是用CROSS(0,五日乖离率)捕捉“价格从上方向下穿越5日线”那一瞬间,同时要求三拾日乖离率仍在回落、MA10还保持上行。组合表达的意思是:短期动能刚转弱,中期趋势没有被破坏,这是减仓而不是清仓的依据。
很多新手把乖离率当摆动指标用,绝对值大了就抄底,这在单边行情里会反复挨打。BIAS的合理区间是随市场波动变化的,固定阈值的胜率远不如看穿越方向和均线结构配合。
3.3 速度5与加速度5:SMA嵌套EMA的双重平滑
速度5:=SMA(EMA((MA05-REF(MA05,1))/REF(MA05,1),3)*100,3,1); 加速度5:=EMA((速度5-REF(速度5,1)),3),NODRAW;速度5先把5日线的日变化率做EMA(3)平滑,再用SMA(,3,1)把权重向近期集中。SMA和EMA的区别在于权重分配方式不同,SMA(X,3,1)相当于把最近值权重压到接近WMA,对突发变化更敏感。加速度5是对速度再做一阶差分和EMA,提炼的是“斜率的变化率”。
加仓条件里同时要求速度5和加速度5大于前值,等于要求上升斜率还在扩张阶段入场,而不是等到角度已经走平甚至回落才进场。这两个变量都标记了NODRAW,只参与计算不占图上位置。
3.4 VAR1/VAR2:20线与30线的开口方向
VAR1:=(MA20-MA30)>REF((MA20-MA30),1) AND MA20>REF(MA20,1) AND MA30>REF(MA30,1); VAR2:=(MA30-MA20)<REF((MA30-MA20),1) AND MA20<REF(MA20,1) AND MA30<REF(MA30,1);VAR1判断20日均线相对30日线的距离在扩大,且两条线都在上行,是中期多头排列强化的特征。VAR2完全反向,两条线都在下行且间距扩大,是空头加速的特征。这个指标在源码里定义了但没有被后面的信号条件引用,更像作者留下的思路注释。我一般会把VAR1接进自己的买入条件,用于排除均线粘合区的假突破,但接上后信号数量会明显下降,需要根据自身偏好取舍。
| 指标名 | 计算对象 | 参数要点 | 在信号中的作用 |
|---|---|---|---|
| BB05/BB10/BB30 | MA05/MA10/MA30的日变化率 | ATAN归一化,固定阈值30/45/60 | 识别加速段与强势狙击 |
| 五日乖离率 | 收盘价与5日线差值百分比 | 只看穿越0轴,不读绝对值 | 减仓与买入触发 |
| 三拾日乖离率 | 收盘价与30日线差值百分比 | NODRAW不显示,只参与判断 | 确认中期方向是否同步 |
| 速度5/加速度5 | 5日线变化率的双重平滑 | SMA权重3,1 | 加仓信号的斜率扩张确认 |
| VAR1/VAR2 | 20/30线间距变化 | 定义未直接引用 | 中期排列方向的模板逻辑 |
4. 交易信号组装:买入、加仓、清仓、减仓与强势狙击
4.1 FILTER和COUNT:信号清洗机制
强势狙击:=FILTER(BB30>30 AND BB10>45 AND CROSS(BB05,60),10); 加仓:=FILTER(COUNT(CROSS(BB05,30),5)>=1 AND MA05>REF(MA05,1) AND 三拾日乖离率>REF(三拾日乖离率,1) AND MA10>REF(MA10,1) AND 加速度5>REF(加速度5,1) AND 速度5>REF(速度5,1),10);FILTER(X,10)的语义是:X为真后的10根K线内不再输出第二次,防止连续触发导致信号文字堆叠。COUNT(CROSS(BB05,30),5)>=1的含义是最近5根K线里,5日线角度至少发生过一次从下方穿越30度。把COUNT放进FILTER内部,表达的是“近期发生过、但只在当次确认时标一个点”,DRAWTEXT不会在5根K线上连续画出多个箭头。
4.2 五个信号的触发逻辑与仓位含义
买入信号是整套公式里条件最丰富的一个:
MR:=COUNT(CROSS(五日乖离率,0),3)>=1 AND 三拾日乖离率>REF(三拾日乖离率,1) AND MA05>REF(MA05,1) AND (C/REF(C,1)-1)*100>5 AND REF(C,1)<MA30; 买入:=FILTER(MR,10);它要求三日内BIAS5从负转正,三拾日乖离率在回升,MA05在向上,当日涨幅超过5%,且前一日收盘价仍在MA30下方。核心意图是捕捉“弱转强的第一根大阳线”:前一日还压在30日线下面,当日突然放量拉起。之所以硬性要求涨幅大于5%,是为了过滤震荡市里的小阳线,把买点集中在真正的启动日。
加仓信号在买入基础上多了一个“5日内5日线角度上穿过30度”的结构,同时要求速度5、加速度5、三拾日乖离率、MA10四个维度全部向上,表达的是主升段斜率确认。按照文末仓位说明,买入信号出现时先进1/3仓,加仓信号出现再补1/3,剩余仓位留给强势狙击信号。
强势狙击是全部信号里最严格的条件组合:30日线角度大于30度确认中期趋势、10日线角度大于45度确认短期加速、5日线角度当根上穿60度确认极强斜率。三个角度条件同时满足在历史K线里并不常见,所以信号数量少、单次质量相对高。
减仓:=FILTER(JC,10); 清仓:=FILTER(COUNT(CROSS(30,BB05),5)>=1 AND (C>MA30 OR O>MA30) AND MA05<REF(MA05,1) AND 三拾日乖离率<REF(三拾日乖离率,1) AND MA10<REF(MA10,1),10);减仓和清仓的区别在于MA10的方向:减仓只要求BIAS5死叉0轴、中期乖离率回落,MA10仍在上行;清仓则要求5日内5日线角度跌穿30度、价格还在MA30上方形成反弹诱多、MA10已经从上行转为下行。趋势级别已经从短线回调扩大为中期转向。
| 信号 | 核心触发条件 | 绘制位置 | 仓位动作 |
|---|---|---|---|
| 买入 | BIAS5三日内金叉0轴、MA05上行、涨幅>5%、前收低于MA30 | LOW下方黄字 | 买入1/3 |
| 加仓 | 5日内BB05上穿30度、速度/加速度/乖离率同步上行 | LOW下方红字 | 加仓1/3 |
| 强势狙击 | BB30>30、BB10>45、BB05上穿60度 | LOW下方黄字 | 可满仓 |
| 减仓 | BIAS5死叉0轴、中期乖离率回落、MA10仍上行 | HIGH上方青色 | 减仓1/2 |
| 清仓 | 5日内BB05死叉30度、价格在MA30上方、MA10已下行 | HIGH上方绿字 | 全部出局 |
4.3 DRAWTEXT输出与信号优先级
DRAWTEXT(加仓,LOW*0.98,'←加仓')的含义是信号为真时,在当根K线最低价下方2%的位置写入带左箭头的文字。同一天可能出现买入和加仓同时成立的情况,因为两者的条件集有重叠,都要求MA05上行,所以实盘执行必须按作者给出的顺序:先按买入信号进1/3,加仓再补1/3,强势狙击出现再考虑满仓。如果减仓和清仓同日出现,以清仓为准,因为清仓条件包含了MA10下行,级别更高。
复制源码时还有一个容易忽略的问题:变量名“速度 5”和“加速度 5”中间带空格,部分通达信版本对变量名内空格敏感,导入时报“未定义变量名”的话,先把这些空格去掉。
5. 资金突破的核心:分形高低点识别与突破线、持仓线
5.1 分形高低点的定义
ZZ1:=REF(HIGH,4)=HHV(HIGH,2*4+1); Y1:=FILTER(ZZ1,3); C1:=BACKSET(Y1,3+1); D1:=FILTER(C1,3);ZZ1判断的是当前K线往前数第4根的HIGH,是包含它在内的9根K线里的最高价,即以这根K线为中心,左右各4根K线的高点都不超过它,构成一个标准顶分形。Y1用FILTER把连续出现的分形压到3根K线只保留一次,C1用BACKSET把信号位置向前延伸4根,D1再做一次FILTER,最终得到一个不连续的干净顶分形标记。
底分形的A2、V2、C2、D2处理完全对称,窗口是7根K线而不是9根。顶部9根、底部7根的不对称设计不是笔误:顶部识别更严格能让持仓线不那么频繁切换,底部识别更敏感能让突破线及时给出新位置。
5.2 E1/E2区间过滤:排除横盘纠缠区
E1:=(REF(LLV(LOW,2*3),1)+REF(HHV(HIGH,2*3),1))/2; E2:=(HIGH+LOW)/2; H2:=D1 AND NOT(D2 AND E1>=E2); L1:=D2 AND NOT(D1 AND E1=E2);E1取前6根K线的高低区间中值,E2是当根K线的中价。H2的含义是:这是一个顶分形,但当同时存在底分形且近期价格中枢高于当根中价时,这个顶不被接纳。这个过滤器针对的是横盘整理区里高低点互相纠缠的情况,只有顶底结构关系清晰时,分形点才作为后续突破线的锚点。
5.3 突破线与持仓线的生成逻辑
XX1:=REF(BARSLAST(H1),1)+1; F1:=BACKSET(H1 AND COUNT(L1,XX1)>0,LLVBARS(IF(L1,LOW,10000),XX1)); G1:=F1>REF(F1,1); I1:=BACKSET(G1,2); LD:=I1>REF(I1,1); L2:=LD OR ISLASTBAR=1 OR BARSCOUNT(CLOSE)=1;XX1先求最近一次顶分形到现在的位置,F1在顶分形到当前的区间里定位最低的那个底分形,用的技巧是把非底分形位置的LOW替换成10000,这样LLVBARS找出的就是区间内最低底分形的位置。LD确认最近底分形,L2把最后一根K线也纳入边界处理,保证序列在K线末端不会断开。
XXX2:=REF(BARSLAST(L2),1)+1; F2:=BACKSET(L2 AND COUNT(H2,XXX2)>0,HHVBARS(IF(H2,HIGH,0),XXX2)); G2:=F2>REF(F2,1); I2:=BACKSET(G2,2); HD:=I2>REF(I2,1); UU2:=BACKSET(ISLASTBAR=1,BARSLAST(HD)+1); VV2:=UU2>REF(UU2,1); WW2:=BACKSET(VV2,REF(BARSLAST(HD),1)+2); XX2:=WW2>REF(WW2,1); 突破线:REF(H,BARSLAST(VV2)) COLORMAGENTA,DOTLINE; 持仓线:REF(H,BARSLAST(XX2)) COLORGREEN,DOTLINE;这一段顺着底分形再向上回溯,在底到当前区间里找到最高的顶分形HD,然后从最后一根K线往回定位最近顶的位置。突破线取最近这个顶分形的HIGH画成紫色虚线,持仓线再向前取上一个顶分形的HIGH画成绿色虚线。所以突破线是“最近结构高点”,持仓线是“再前一个结构高点”,价格刷新最近高点时突破线被突破,回踩后站上前高时持仓线成为支撑参考。
这套设计和唐奇安通道的区别在于:唐奇安用固定周期最高价,这里的周期是分形结构动态决定的。横盘震荡时顶分形密集,突破线快速切换;强趋势中顶分形稀疏,突破线能保持较长时间,不会因为周期固定而过早触发。
5.4 TP1/TP2:两次突破机会的捕捉
TP1:=CROSS(C,突破线); TP2:=CROSS(C,持仓线); STICKLINE(TP1,H,L,0,0),COLORYELLOW; STICKLINE(TP1,C,O,3,0),COLORYELLOW; STICKLINE(TP1,C,O,2,0),COLORYELLOW; STICKLINE(TP1,C,O,1,0),COLORYELLOW; DRAWTEXT(TP1,LOW*0.98,'资金突破'),LINETHICK1,COLORYELLOW;TP1是收盘价向上穿越突破线,即第一次站上最近结构高点;TP2是回踩后重新站上持仓线,通常发生在突破后的回调阶段。后面的STICKLINE连续画了三个不同宽度的黄色柱体,从3到1逐层覆盖,模拟出高亮效果——通达信没有渐变画笔,这是常见的“辉光”替代写法。COLORYELLOW加上LINETHICK1让文字更醒目。
注意TP1和TP2共用同一套绘制代码,所以图上出现黄色K线和“资金突破”文字时,要区分是站上突破线还是站上持仓线:前者是首次突破,后者是回调再确认,两者的后续持仓逻辑不同。
6. 实战验证与参数修正
6.1 导入后先做三处修正
第一处是SJTJ日期闸门。源码里的SJTJ:=DATE<1590301挂在每个信号条件上,不同通达信版本对这个日期编码的解析并不一致,导入新版后很容易出现信号全部消失。最省事的处理方式是把条件改成恒真:
SJTJ:=DATE>1000000;第二处是BACKSET的未来函数属性。分形顶点需要K线收盘后才会最终确认,盘中价格刷新时突破线位置可能发生漂移。做历史复盘没有影响,但挂实时预警时必须做收盘确认,把触发条件改成前一根K线已确认的写法:
TP1:=REF(CROSS(C,突破线),1) AND C>REF(突破线,1);这里REF(CROSS(C,突破线),1)表示上一根K线已经发生上穿,再要求当前收盘价仍站在突破线上方,双重确认避免盘中抖动反复触发。
第三处是参数区定义了T和T1,但整个公式里没有引用这两个参数,修改它们不会有任何效果。想调节信号密度,可以把FILTER的周期参数替换成变量,例如把加仓条件里的FILTER(...,10)中的10改成参数T。
6.2 快速统计信号质量
在主图公式末尾临时加一行,可以快速统计指定日期以来的信号次数:
DRAWNUMBER(ISLASTBAR, LOW*0.8, COUNT(TP1, BARSLAST(DATE>20010101))), COLORYELLOW;COUNT的第二个参数统计从2001年之后到当前的K线数量,输出结果是这段时间内TP1出现的总次数。把这个数字和肉眼观察到的突破后走势对比,就能判断当前市场环境下这套结构是否值得继续使用:信号数量明显偏少说明角度阈值偏高,可以把CROSS(BB05,60)的60降回45;信号太密集则把FILTER周期从10加到15。
6.3 把主图当系统而不是当指标看待
到这里,“资金突破ZT主图指标”的可读性已经很明确:它不是单一的突破判断,而是一套“方向过滤、动量确认、位置触发”的三层决策系统。实践中最有效的用法不是等它标出“资金突破”再进场,而是在它标出买入之后,用持仓线作为移动止损参考:只要收盘价不跌破绿色持仓线,持仓逻辑就不需要推翻,这比单独盯MACD或均线死叉更贴合这套主图的设计意图。SJTJ、BACKSET、T参数三个点改完再跑一遍统计,这份源码才算真正变成自己的工具。
本文还有配套的精品资源,点击获取