乐于分享
好东西不私藏

逐行拆解80行通达信源码,我总结了8个核心编程技巧|"超强主升浪"指标深度教学

逐行拆解80行通达信源码,我总结了8个核心编程技巧|"超强主升浪"指标深度教学


免责声明:本文为通达信指标公式的编写教学与技术分析知识分享,旨在帮助读者理解指标源码的逻辑结构和编程技巧。本文不构成任何投资建议,不推荐任何个股或交易策略。股市有风险,投资需谨慎,请读者根据自身情况独立判断,理性投资。


前言

很多朋友在通达信里导入了各种指标,知道”出信号就买、消失就卖”,但从来没有认真看过指标的源码。这就好比你每天开车上下班,却完全不知道发动机是怎么工作的——能用,但一出问题就抓瞎。

之后,我将专注于拆解指标,分享一些指标编写心得,方法。欢迎大家交流

今天我们拿一个结构非常完整的指标——**”超强主升浪”**来做拆解教学。这个指标涉及量价分析、趋势判断、多周期共振、能量计算等多个模块,是一个非常好的学习样本。读完这篇文章,你不仅能看懂这个指标,还能掌握通达信公式编写中的很多常用技巧。


一、指标总览:它在干什么?

在拆解源码之前,我们先从整体上理解这个指标想做什么。

这个指标的核心目标是:找到同时满足以下条件的时刻——

  1. 1. 资金在净流入(量价配合良好)
  2. 2. 趋势指标刚刚突破关键位置
  3. 3. 市场能量为正
  4. 4. 短、中、长期趋势全部向上
  5. 5. 价格创出阶段新高

当所有条件同时满足时,指标会在副图中显示”★超强主升”的信号。

副图底部还有两组彩色柱状条,分别是”价格跟踪线”和”量能跟踪线”,用红色和绿色直观显示当前市场状态。

下面我们一个模块一个模块来拆。


二、模块一:量价关系判断

超强主升浪:=(HHV(H,3)+LLV(L,3))/2;A:=IF(C>超强主升浪,VOL,0);B:=IF(C<超强主升浪,VOL,0);主升浪启动:=(A-B);变盘节点:=EMA(主升浪启动,3)/SUM(VOL,5)*100;AAC6:=变盘节点>=0;

逐行解读:

第1行超强主升浪:=(HHV(H,3)+LLV(L,3))/2;

  • • HHV(H,3)是最近3天的最高价中的最大值
  • • LLV(L,3)是最近3天的最低价中的最小值
  • • 两者相加除以2,得到一个3日价格中轴
  • • 这就像画了一条”最近3天的中间价”线

第2-3行A:=IF(C>超强主升浪,VOL,0);和 B:=IF(C<超强主升浪,VOL,0);

  • • 如果今天的收盘价高于这个中轴,就把今天的成交量记为”多头量”(A)
  • • 如果低于中轴,就记为”空头量”(B)
  • • 这是一个非常经典的量价分类技巧:用价格位置来给成交量”贴标签”

第4行主升浪启动:=(A-B);

  • • 多头量减去空头量,得到”净多头量”
  • • 正值说明资金偏多头,负值说明资金偏空头

第5行变盘节点:=EMA(主升浪启动,3)/SUM(VOL,5)*100;

  • • 对净多头量做3日指数平滑,再除以5日总成交量
  • • 这样就把绝对数值变成了一个比例指标,不同股票之间可以比较
  • • 乘以100是为了让数值更直观

第6行AAC6:=变盘节点>=0;

  • • 最终判断:变盘节点大于等于0,说明资金面偏多,条件满足

编程技巧总结:这个模块展示了一个常见的公式设计思路——先设定一个”分界线”(这里用3日中轴),然后用IF函数把成交量分成多空两类,最后看净值。这比单纯看成交量大小要有意义得多。


三、模块二:趋势指标(核心模块)

ABC3:=(2*CLOSE+HIGH+LOW)/4;ABC4:=LLV(LOW,34);ABC5:=HHV(HIGH,34);趋势:=EMA((ABC3-ABC4)/(ABC5-ABC4)*100,13);人气1:=EMA(0.667*REF(趋势,1)+0.333*趋势,2);T:=人气1<趋势;

逐行解读:

第1行ABC3:=(2*CLOSE+HIGH+LOW)/4;

  • • 这不是普通的收盘价,而是一个加权平均价
  • • 收盘价的权重是2,最高价和最低价各权重1
  • • 这样做的好处是:更重视收盘价(因为收盘价最能反映多空博弈的结果),同时也考虑了日内波动

第2-3行ABC4:=LLV(LOW,34);和 ABC5:=HHV(HIGH,34);

  • • 34天内的最低价和最高价,构成了一个价格通道
  • • 34这个参数不是随便选的,它是斐波那契数列中的一个数

第4行趋势:=EMA((ABC3-ABC4)/(ABC5-ABC4)*100,13);

  • • (ABC3-ABC4)/(ABC5-ABC4)*100的含义是:当前价格在34天通道中的位置
  • • 如果价格在通道底部,这个值接近0;在顶部则接近100
  • • 再做13日指数平滑,去掉毛刺
  • • 这个公式的原型其实是大家熟悉的**威廉指标(WR)**的变体

第5行人气1:=EMA(0.667*REF(趋势,1)+0.333*趋势,2);

  • • 这是趋势的一条”慢线”
  • • 0.667*REF(趋势,1)+0.333*趋势让昨天的趋势值占三分之二、今天占三分之一
  • • 再做2日平滑,效果就是:人气1的反应比趋势更慢
  • • 用途:快线(趋势)和慢线(人气1)的交叉关系可以判断方向变化

第6行T:=人气1<趋势;

  • • 当快线在慢线上方时,说明趋势在加速向上——这是一个多头排列的信号

编程技巧总结:把价格标准化到0-100的区间是指标编写中非常实用的技巧。这样不管股价是5块还是500块,指标值都在同一个范围内,方便设定统一的阈值(比如后面用到的30和60)。


四、模块三:交叉信号判断

ACB1:=CROSS(趋势,30)<1;ACB2:=CROSS(REF(趋势,1),30) AND REF(人气1,1)<REF(趋势,1);ACB3:=CROSS(REF(趋势,2),30) AND REF(人气1,2)<REF(趋势,2);ACB4:=ACB2 OR ACB3;ACB5:=T AND ACB1 AND ACB4;ACB6:=CROSS(趋势,60) AND 人气1<趋势;

逐行解读:

第1行ACB1:=CROSS(趋势,30)<1;

  • • CROSS(趋势,30)返回1表示趋势今天刚好上穿30
  • • <1就是说今天没有上穿30,即趋势已经在30以上了
  • • 换句话说:趋势之前就已经突破了30

第2-3行ACB2和ACB3分别检查:1天前或2天前趋势是否刚好上穿30,并且当时快线在慢线上方

第4行ACB4:=ACB2 OR ACB3;

  • • 1天前或2天前有上穿,满足其一即可

第5行ACB5:=T AND ACB1 AND ACB4;

  • • 当前多头排列 + 已在30以上 + 近期刚突破过30
  • • 但注意,ACB5在最终的信号里没有被直接使用,它是一个中间过渡变量

第6行ACB6:=CROSS(趋势,60) AND 人气1<趋势;← 这才是最终用到的

  • • 趋势上穿60(进入强势区)+ 快线在慢线上方
  • • 这是一个更严格的条件:不仅要多头排列,还要趋势值突破60这个高位

编程技巧总结:这里展示了一个重要的设计模式——用CROSS函数配合REF回溯来检测”最近几天内是否发生过某个事件”。直接用CROSS只能判断”今天是否发生”,加上REF就可以把检测窗口拉宽。


五、模块四:能量计算

能量:=SQRT(VOL)*(((C-(H+L)/2))/((H+L)/2));平滑能量:=EMA(能量,10);人气A:=EMA(平滑能量*5,10);ACB7:=人气A>=0 OR 人气A<0;ACB8:=人气A>=0;

逐行解读:

第1行能量:=SQRT(VOL)*(((C-(H+L)/2))/((H+L)/2));

  • • SQRT(VOL)对成交量取平方根——这是为了压缩大成交量的影响,防止某天放巨量时能量值暴涨
  • • (C-(H+L)/2)/(H+L)/2是收盘价相对于日内中间价的偏离百分比
  • • 整体含义:成交量越大、收盘价越接近当日高点,能量越大;越接近低点,能量越小(甚至为负)
  • • 这个公式把”量”和”价格位置”结合在了一起,比单纯看量更有信息量

第2-3行两次EMA平滑,消除噪音

第4行ACB7:=人气A>=0 OR 人气A<0;

  • • 大于等于0或者小于0——这永远为真!
  • • 这行实际上没有任何筛选作用,属于一个预留的条件接口,当前并未起到筛选效果

第5行ACB8:=人气A>=0;

  • • 这才是真正的条件:能量指标为正,说明市场做多能量占优

编程技巧总结:SQRT(VOL)是处理成交量的一个好方法。在指标编写中,成交量的绝对数值差异巨大(几百万到几十亿),取平方根可以有效缩小这种差异,让指标更稳定。另外,ACB7这种”恒真”的写法在实际开发中应该避免,它不产生任何效果,只增加了代码的混乱。


六、模块五:多周期趋势共振

EM01:=EMA(C,13);EM:=EMA(C,21);UP:=EMA(EM,13);DOWN:=EMA(EM,17);短期趋势:=(EMA(EM01,2)+EMA(EM01,7))/2;中期趋势:=(UP+DOWN)/2;长期趋势:=EMA(C,144);AAC8:=短期趋势>REF(短期趋势,1) AND 中期趋势>REF(中期趋势,1) AND 长期趋势>REF(长期趋势,1);

逐行解读:

这个模块构建了三条不同周期的趋势线

  • • 短期趋势:基于13日EMA,取2日和7日平滑的均值——反映最近一两周的方向
  • • 中期趋势:基于21日EMA再分别做13日和17日平滑——反映一两个月的方向
  • • 长期趋势:144日EMA——约半年的大方向(144也是斐波那契数)

关键判断AAC8:短期、中期、长期趋势全部在上升(今天的值大于昨天的值)。

这就是所谓的多周期共振——三个时间维度同时向上,说明趋势非常强劲。

编程技巧总结:“多层EMA嵌套”是通达信公式里的常见手法。EMA(EMA(C,21),13)比单独用一个EMA(C,34)更平滑,对价格变化的反应也不同。选择13、21、144这些参数,可能与斐波那契数列有关,这在技术分析中很常见。


七、模块六:新高突破检测

AAC1:=C=HHV(C,20);AAC2:=BARSLAST(AAC1);AAC3:=IF(AAC2>0,REF(C,AAC2),REF(C,AAC2));AAC4:=CROSS(C,REF(AAC3,1));AAC5:=AAC4 AND COUNT(AAC4,5)=1;

逐行解读:

第1行AAC1:=C=HHV(C,20);

  • • 今天的收盘价等于20天内的最高收盘价——也就是创了20日新高

第2行AAC2:=BARSLAST(AAC1);

  • • BARSLAST返回上一次创新高距今的天数
  • • 比如3天前最后一次创新高,AAC2就是3

第3行AAC3:=IF(AAC2>0,REF(C,AAC2),REF(C,AAC2));

  • • 获取上一次创新高那天的收盘价
  • • 注意:这里的IF语句两个分支是一样的,逻辑上可以简化为 AAC3:=REF(C,AAC2);
  • • 这也是一处可以优化的冗余代码

第4行AAC4:=CROSS(C,REF(AAC3,1));

  • • 今天的收盘价上穿了”上一次新高的价格”——即突破前高

第5行AAC5:=AAC4 AND COUNT(AAC4,5)=1;

  • • 突破前高,且5天内只发生了一次——去重,避免连续几天反复突破时重复发信号

编程技巧总结:BARSLASTREF的组合是通达信编程的经典模式,用于获取”上一次某个条件成立时的数据”。COUNT(条件,N)=1则是一种常用的去重技巧。值得注意的是,AAC5在最终信号中没有被直接使用——这种情况在复杂指标中很常见,一些中间变量在设计过程中被更简洁的逻辑替代了,但代码保留了下来,大家在学习时注意区分哪些变量真正参与了最终判断。


八、模块七:最终信号生成

人气:=AAC6 AND ACB6 AND ACB8 AND AAC8,COLORCYAN;STICKLINE(人气,60,0,2,0),COLORYELLOW;DRAWTEXT(人气,38,' ★超强主升'),COLORYELLOW;DRAWICON(人气,8,18);DRAWICON(人气,55,18);

逐行解读:

信号条件人气同时要求:

条件
来自模块
含义
AAC6
量价判断
资金面偏多
ACB6
交叉信号
趋势突破60强势区,且快线在慢线上方
ACB8
能量计算
做多能量为正
AAC8
多周期共振
短中长期趋势全部上升

四个条件缺一不可——这就是为什么信号出现的频率并不高。

显示效果:

  • • STICKLINE(人气,60,0,2,0):画一根从0到60的黄色柱子
  • • DRAWTEXT(人气,38,' ★超强主升'):在38的位置显示文字
  • • DRAWICON(人气,8,18)和 DRAWICON(人气,55,18):在8和55的位置各画一个图标(18号是系统预设图标)

编程技巧总结:用AND连接多个条件是”宁缺毋滥”的设计思路——宁可少发信号,也不轻易误判。但也要注意,条件越多,信号越稀少,实际使用中要根据自己的需求调整条件数量。


九、模块八:趋势状态可视化(彩色柱状条)

这一段代码比较长,但逻辑是重复的。它画了两组彩色柱状条来直观展示市场状态。

第一组:牛线和马线系统(位置:65-68区域)

MID:=(3*CLOSE+LOW+OPEN+HIGH)/6;牛线:=(20*MID+19*REF(MID,1)+18*REF(MID,2)+...+REF(MID,20))/210;马线:=MA(牛线,6);
  • • MID是一个六分之一加权的综合价格(收盘价权重最大)
  • • 牛线是一个加权移动平均——越近的数据权重越大(20、19、18…1),这比普通均线对近期价格更敏感
  • • 马线是牛线的6日均线,更平滑
  • • 收盘价在牛线以上 → 红色柱(看多);在马线以下 → 绿色柱(看空);介于两者之间 → 绿色柱(观望)

接下来还有类似的判断用到了60日和120日均线、45日和90日均线、30日和60日均线——本质上就是从多个时间周期来确认趋势方向,然后用颜色堆叠显示,让你一眼就能看到当前的多空状态。

第二组:短期趋势确认(位置:70-73区域)

M3:=MA(CLOSE,3);M13:=MA(CLOSE,13);M34:=MA(CLOSE,34);STICKLINE(M3>=M13 AND M34>=REF(M34,1),70,73,8,0),COLORRED;

用3日、13日、34日三条均线的排列关系来判断短期状态:

  • • M3在M13上方 + M34在上升 → 红色(强势)
  • • 其他情况 → 绿色(弱势或调整)

编程技巧总结:STICKLINE函数在副图中画彩色柱状条是通达信指标可视化的常用手段。通过在不同纵坐标位置(65-68、70-73)画柱子,可以实现”多行状态灯”的效果——就像仪表盘上的信号灯一样直观。


十、这个指标的优点和局限

优点

  1. 1. 多维度验证:不是单一条件,而是量价、趋势、能量、多周期四个维度同时确认,减少了误判
  2. 2. 可视化清晰:底部的彩色柱状条让你不用看数字就能判断当前状态
  3. 3. 信号明确:出现”★超强主升”就是明确的提示,不存在模糊地带

局限

  1. 1. 严重滞后:四个条件同时满足时,股价往往已经涨了一段,信号出现时股价通常已经离底部有一定距离
  2. 2. 不适合震荡市:这种趋势型指标在横盘震荡中会频繁失效
  3. 3. 缺少止损逻辑:指标只告诉你”什么时候可能开始主升”,但没有告诉你”什么时候应该离场”
  4. 4. 代码有冗余:ACB7是恒真条件、ACB5和AAC5没有被最终使用、AAC3的IF两个分支相同——这些都是我们学习时需要识别的”无效代码”,实际编写指标时应当避免

十一、学到了哪些通达信编程技巧?

通过这个指标的拆解,我们学到了以下实用技巧:

  1. 1. 量价分类法:用IF函数根据价格位置给成交量贴标签
  2. 2. 标准化处理:把价格映射到0-100区间,方便设置统一阈值
  3. 3. 多层EMA嵌套EMA(EMA(X,N1),N2)获得更平滑的趋势线
  4. 4. BARSLAST+REF组合:获取”上一次满足某条件时”的历史数据
  5. 5. COUNT去重COUNT(条件,N)=1避免信号重复触发
  6. 6. SQRT压缩成交量:用平方根缩小成交量的数量级差异
  7. 7. STICKLINE画状态灯:在副图不同位置画彩色柱子做可视化仪表盘
  8. 8. 多条件AND组合:多个维度同时满足才发信号,提高可靠性

附:完整源码

(如需在通达信中使用,直接复制以下内容到公式管理器新建副图指标即可)

超强主升浪:=(HHV(H,3)+LLV(L,3))/2;A:=IF(C>超强主升浪,vol,0);B:=IF(C<超强主升浪,VOL,0);主升浪启动:=(A-B);变盘节点:=EMA(主升浪启动,3)/SUM(VOL,5)*100;AAC6:=变盘节点>=0;ABC3:=(2*CLOSE+HIGH+LOW)/4;ABC4:=LLV(LOW,34);ABC5:=HHV(HIGH,34);趋势:=EMA((ABC3-ABC4)/(ABC5-ABC4)*100,13);人气1:=EMA(0.667*REF(趋势,1)+0.333*趋势,2);T:=人气1<趋势;ACB1:=CROSS(趋势,30)<1;ACB2:=CROSS(REF(趋势,1),30) AND REF(人气1,1)<REF(趋势,1);ACB3:=CROSS(REF(趋势,2),30) AND REF(人气1,2)<REF(趋势,2);ACB4:=ACB2 OR ACB3;ACB5:=T AND ACB1 AND ACB4;ACB6:=CROSS(趋势,60) AND 人气1<趋势;能量:=SQRT(VOL)*(((C-(H+L)/2))/((H+L)/2));平滑能量:=EMA(能量,10);人气A:=EMA(平滑能量*5,10);ACB7:=人气A>=0 OR 人气A<0;ACB8:=人气A>=0;EM01:=EMA(C,13);EM:=EMA(C,21);UP:=EMA(EM,13);DOWN:=EMA(EM,17);短期趋势:=(EMA(EM01,2)+EMA(EM01,7))/2;中期趋势:=(UP+DOWN)/2;长期趋势:=EMA(C,144);AAC8:=短期趋势>REF(短期趋势,1) AND 中期趋势>REF(中期趋势,1) AND 长期趋势>REF(长期趋势,1);AAC1:=C=HHV(C,20);AAC2:=BARSLAST(AAC1);AAC3:=IF(AAC2>0,REF(C,AAC2),REF(C,AAC2));AAC4:=CROSS(C,REF(AAC3,1));AAC5:=AAC4 AND COUNT(AAC4,5)=1;人气:=AAC6 AND ACB6 AND ACB8 AND AAC8,COLORCYAN;STICKLINE(人气,60,0,2,0),COLORYELLOW;DRAWTEXT(人气,38,' ★超强主升'),COLORYELLOW;DRAWICON(人气,8,18);DRAWICON(人气,55,18);MID:=(3*CLOSE+LOW+OPEN+HIGH)/6;牛线:=(20*MID+19*REF(MID,1)+18*REF(MID,2)+17*REF(MID,3)+16*REF(MID,4)+15*REF(MID,5)+14*REF(MID,6)+13*REF(MID,7)+12*REF(MID,8)+11*REF(MID,9)+10*REF(MID,10)+9*REF(MID,11)+8*REF(MID,12)+7*REF(MID,13)+6*REF(MID,14)+5*REF(MID,15)+4*REF(MID,16)+3*REF(MID,17)+2*REF(MID,18)+REF(MID,20))/210,COLORGREEN;马线:=MA(牛线,6),COLORMAGENTA;STICKLINE(C>牛线,65,68,8,0),COLORRED,LINETHICK2;STICKLINE(C<马线,65,68,8,0),COLOR99CC32,LINETHICK2;STICKLINE(牛线>=C AND C>=马线,65,68,8,0),COLOR99CC32,LINETHICK2;A1:=MAX(MA(C,60),MA(C,120));B1:=MIN(MA(C,60),MA(C,120));STICKLINE(C>=A1,65,68,8,0),COLORRED,LINETHICK2;STICKLINE(C<=B1,65,68,8,0),COLOR99CC32,LINETHICK2;STICKLINE(A1>=C AND C>=B1,65,68,8,0),COLOR99CC32,LINETHICK2;E:=MAX(MA(C,45),MA(C,90));F:=MIN(MA(C,45),MA(C,90));STICKLINE(C>E,65,68,8,0),COLORRED,LINETHICK2;STICKLINE(C<F,65,68,8,0),COLOR99CC32,LINETHICK2;STICKLINE(E>=C AND C>=F,65,68,8,0),COLOR99CC32,LINETHICK2;J:=MAX(MA(C,30),MA(C,60));K:=MIN(MA(C,30),MA(C,60));STICKLINE(C>J,65,68,8,0),COLORRED,LINETHICK2;STICKLINE(C<K,65,68,8,0),COLOR99CC32,LINETHICK2;STICKLINE(J>=C AND C>=K,65,68,8,0),COLOR99CC32,LINETHICK2;M3:=MA(CLOSE,3),COLORRED;M13:=MA(CLOSE,13),COLORRED;M34:=MA(CLOSE,34),COLORRED;X:=BARSLAST(REF(CROSS(C,MA(C,120)),1)) AND CROSS(MA(C,20),MA(C,120));STICKLINE(M3>=M13 AND M34>=REF(M34,1),70,73,8,0),COLORRED;STICKLINE(M3<M13 AND M34>=REF(M34,1),70,73,8,0),COLOR99CC32;STICKLINE(M3<M13 AND M34<REF(M34,1),70,73,8,0),COLOR99CC32;STICKLINE(M3>=M13 AND M34<REF(M34,1),70,73,8,0),COLORRED;DRAWTEXT_FIX(ISLASTBAR,0.855,0.009,0,'★价格跟踪线★'),COLORFFFFFF;DRAWTEXT_FIX(ISLASTBAR,0.855,0.080,0,'★量能跟踪线★'),COLORYELLOW;

免责声明:本文仅为通达信指标公式的编写教学与逻辑拆解,所有内容均基于技术分析理论的知识分享,不构成任何投资建议。技术指标存在固有的滞后性和局限性,任何单一指标都不能保证盈利。股市有风险,入市需谨慎。读者请根据自身风险承受能力和投资经验独立做出决策,盈亏自负。


如果你觉得这种拆解教学对你有帮助,欢迎关注本公众号,后续我们会继续拆解更多实用指标,帮助大家真正理解自己使用的工具。