逐行拆解80行源码,我整理出9个进阶编程技巧|多周期共振指标深度教学|通达信趋势爆发指标公式
免责声明:本文为通达信指标公式的编写教学与技术分析知识分享,旨在帮助读者理解指标源码的逻辑结构和编程技巧。本文不构成任何投资建议,不推荐任何个股或交易策略。股市有风险,投资需谨慎,请读者根据自身情况独立判断,理性投资。
前言
今天要拆的这个指标接近80行,涉及的知识点比平时拆的那些都要密。它把 MACD、KDJ、RSI、CCI、WR 五大经典振荡指标揉到了一起,又用日线、周线、月线三个周期做交叉验证,最后落到一个 0-15 分的共振打分上。
读完这篇,你能看到的东西包括:多周期数据怎么用 #WEEK/#MONTH 引用、半周期 MACD 的设计思路、复合振荡器怎么把五个指标加权合成一条线、FORCAST 预测函数怎么用来抓顶部、以及怎么用 STICKLINE 把分数画成柱状提示条。
按惯例,只看技巧、不看结论;指标本身的有效性不在本文讨论范围。

指标总览:它在干什么?
整个指标可以拆成 9 个模块,逻辑层次很清楚:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
整体目标:用尽可能多的指标和尽可能多的周期做”互相印证”,最终输出一个综合分值和两条主线。这是一种典型的”共振系统”设计思路。
模块一:成交量异动量化(VARG1-VARG9)
VARG1:=MA(VOL,5);
VARG2:=MA(VOL,10);
VARG3:=VOL/((HIGH-LOW)*2-ABS(CLOSE-OPEN));
VARG4:=IF(CLOSE<OPEN,0-VARG3*(HIGH-LOW),0-VOL/2);
VARG5:=IF(CLOSE>OPEN,0-VARG3*(HIGH-CLOSE+OPEN-LOW),VARG4);
VARG6:=IF(C>O,VARG3*(H-L),IF(C<O,VARG3*(H-O+C-L),V/2))+VARG5;
VARG7:=(VARG6/20)/1.15;
VARG8:=((VARG7*0.55+(REF(VARG7,1)*0.33))+(REF(VARG7,2)*0.22));
VARG9:=EMA(VARG8,3);
VARG1、VARG2 是 5 日和 10 日均量,这两个后面要在 VARG45 里做”短均量站上长均量”的判断,是个最常规的多头量能条件。
VARG3 是这段的核心。VOL/((HIGH-LOW)*2-ABS(CLOSE-OPEN)) 这个公式不是 K 线常识能直接读懂的,它的设计思路是:用真实波动幅度去除单位成交量,得到一个”每单位价格运动需要多少成交量”的密度值。分母里 (HIGH-LOW)*2 是总波幅的两倍,减掉实体长度,剩下的相当于上下影线之和。波动越大、成交量越小,VARG3 越小;成交量大但波动小(比如对倒),VARG3 就大。
VARG4-VARG6 是一个三层嵌套 IF,用来给成交量”分配方向”:阴线一种算法、阳线另一种算法、平盘走中性。注意 VARG6 在阴线分支里加了 VARG5,而 VARG5 在阴线分支又是个负值——这是个正负相消的累加结构,我用三层嵌套来区分阴阳平三种情形,代替了 IF...ELSEIF...ELSE(通达信本身没有 ELSEIF,只能靠嵌套)。
VARG7 把结果除以 23(20×1.15),做了一次量纲压缩。VARG8 是个手动加权移动平均:当期 0.55 + 前一期 0.33 + 前两期 0.22,权重和恰好等于 1.10(注意不是 1.0,我故意放大了一点)。VARG9 再做一层 EMA(3) 平滑。
💡 技巧 1:三层嵌套 IF 模拟分支判断
通达信没有 ELSEIF,遇到三种以上互斥情形,把外层 IF 的”假”分支再写一个 IF,层层嵌进去。可读性不如 ELSEIF,但功能完全等价。
💡 技巧 2:手动加权 MA 替代 EMA
0.55*A + 0.33*REF(A,1) + 0.22*REF(A,2)这种写法比 EMA(A,3) 更可控,你可以自由设定每一期的权重,而 EMA 的权重是固定按 2/(N+1) 衰减的。需要”近期权重特别大”的场景,手动加权更灵活。
模块二:双周期 MACD 体系(VARG10-VARG11、VARG15-VARG20)
VARG10:=EMA(CLOSE,12/2)-EMA(CLOSE,26/2);
VARG11:=EMA(VARG10,9/2);
VARG15:=EMA(CLOSE,12)-EMA(CLOSE,26);
VARG16:=EMA(VARG15,9);
VARG17:=MACD.DIF#WEEK; ⚠️ 此引用手机版不支持
VARG18:=MACD.DEA#WEEK; ⚠️ 此引用手机版不支持
VARG19:=MACD.DIF#MONTH; ⚠️ 此引用手机版不支持
VARG20:=MACD.DEA#MONTH; ⚠️ 此引用手机版不支持
VARG15、VARG16 是教科书 MACD,12-26-9 标准参数,没什么好说的。
有意思的是 VARG10 和 VARG11——参数全部除以 2,变成了 6-13-4.5。这是一个”半周期 MACD”。它的反应速度比标准 MACD 快一倍,信号更早出现,但假信号也更多。我用这一组的目的不是替代标准 MACD,而是和标准 MACD 形成”快慢双线”:VARG10 比 VARG15 早动,如果 VARG10 已经金叉但 VARG15 还没,那是早期预警;两个都金叉了,确认度更高。
VARG17-VARG20 用了跨周期引用语法指标名.输出名#WEEK,直接把周线和月线的 MACD 拉到日线图上来。这个语法是通达信电脑版的核心进阶能力之一,但手机版几乎全部不支持,这是这个指标必须在电脑端运行的最主要原因。
💡 技巧 3:半周期参数构造预警指标
标准 MACD 是 12-26-9,把所有参数除以 2 得到 6-13-4.5,就是一个反应速度加倍的”预警 MACD”。同理可以构造 KDJ、RSI 的预警版。配对使用时,预警版出信号是”准备”,标准版出信号是”行动”。
💡 技巧 4:跨周期引用语法
指标名.输出名#周期
在日线图上写MACD.DIF#WEEK,直接拿到周线 DIF 的当前值。可用的周期后缀有#DAY、#WEEK、#MONTH、#YEAR等。这是通达信做多周期共振的最简洁写法,但手机版基本不支持,只能在电脑版使用。
模块三:多周期 KDJ 共振(VARG12-VARG14、VARG21-VARG29)
VARG12:=(CLOSE-LLV(LOW,36))/(HHV(HIGH,36)-LLV(LOW,36));
VARG13:=SMA(VARG12,3,1);
VARG14:=SMA(VARG13,3,1);
VARG21:=(CLOSE-LLV(LOW,12))/(HHV(HIGH,12)-LLV(LOW,12));
VARG22:=SMA(VARG21,3,1);
VARG23:=SMA(VARG22,3,1);
VARG24:=3*VARG22-2*VARG23;
VARG25:=MA("KDJ.K#WEEK"(9,3,3),5); ⚠️ 此引用手机版不支持
VARG26:=MA("KDJ.D#WEEK"(9,3,3),5); ⚠️ 此引用手机版不支持
VARG27:=MA("KDJ.J#WEEK"(9,3,3),5); ⚠️ 此引用手机版不支持
VARG28:="KDJ.K#MONTH"; ⚠️ 此引用手机版不支持
VARG29:="KDJ.D#MONTH"; ⚠️ 此引用手机版不支持
VARG12-VARG14 是 36 周期的 KDJ,周期拉长后波动变缓,主要用来抓中期趋势。VARG21-VARG24 是 12 周期 KDJ,反应更灵敏,VARG24 算的是 J 值(3K-2D),这是 J 线的标准定义。
VARG25-VARG29 用了一种带参数和函数嵌套的跨周期引用:MA("KDJ.K#WEEK"(9,3,3),5)。注意里面引号包起来的部分——这是因为引用带参数指标时,要先把”指标名.输出#周期“用引号括成一个整体,然后再传参数。这个语法相当绕,但能让你在日线上直接对周线 KDJ 再做一次 MA(5) 平滑,做出一条”超平滑周线 K 线”。
VARG28、VARG29 没带参数,所以不需要引号也可以,但用引号写法是更安全的统一风格。
💡 技巧 5:跨周期引用带参数的写法
"指标名.输出名#周期"(参数1, 参数2)——引号要把”指标名+输出+周期”整体包起来,参数写在引号外面的括号里。这是通达信跨周期引用里最容易写错的语法,记住”引号包名称、括号包参数”这一条就不会错。
模块四:多周期 RSI 共振(VARG30-VARG35)
VARG30:="RSI.RSI1#DAY"(9); ⚠️ 此引用手机版不支持
VARG31:="RSI.RSI2#DAY"(9); ⚠️ 此引用手机版不支持
VARG32:="RSI.RSI1#WEEK"(9); ⚠️ 此引用手机版不支持
VARG33:="RSI.RSI2#WEEK"(9); ⚠️ 此引用手机版不支持
VARG34:="RSI.RSI1#MONTH"(9); ⚠️ 此引用手机版不支持
VARG35:="RSI.RSI1#MONTH"(9); ⚠️ 此引用手机版不支持
这一段直接引用了系统 RSI 的日、周、月三个周期的 RSI1 和 RSI2,统一用 9 周期。
这里有一处可以优化:VARG34 和 VARG35 写的是同一个东西——都是 RSI.RSI1#MONTH(9),按上下文应该 VARG35 是 RSI.RSI2#MONTH 才对。后面 VARG49 用 IF(VARG34>=VARG35,1,0) 做判断,因为两个值永远相等,这一项的结果是恒为 1,对最后的总分有 1 分的常量贡献。这一行是个 bug,但因为是恒真,不会让指标”出错”,只是多了 1 分的固定加分。
💡 技巧 6:警惕”恒真/恒假”的隐性 bug
当你看到IF(A>=B,1,0)而 A 和 B 是同一个表达式时,这一项就是常量。它不会让指标报错,但会污染你的打分系统。写共振系统时,养成把每一个分项条件单独跑一遍的习惯,确认每一项都有 0 和 1 两种状态。
模块五:15 项条件打分汇总(VARG36-VARG51)
VARG36:=IF(VARG10>=VARG11,1,0); {半周期 MACD 多头}
VARG37:=IF(VARG13>=VARG14,1,0); {36-KDJ 多头}
VARG38:=IF(VARG15>=VARG16,1,0); {标准 MACD 多头}
VARG39:=IF(VARG17>=VARG18,1,0); {周线 MACD 多头}
VARG40:=IF(VARG19>=VARG20,1,0); {月线 MACD 多头}
VARG41:=IF(VARG22>=VARG23,1,0); {12-KDJ 多头}
VARG42:=IF(VARG25>=REF(VARG25,1),1,0); {周 K 上行}
VARG43:=IF(VARG27>=REF(VARG27,1),1,0); {周 J 上行}
VARG44:=IF(VARG28>=VARG29,1,0); {月 KDJ 多头}
VARG45:=IF(VARG1>VARG2,1,0); {5 日均量站上 10 日均量}
VARG46:=IF(VARG9>0,1,0); {成交量异动多头}
VARG47:=IF(VARG30>=VARG31,1,0); {日 RSI 多头}
VARG48:=IF(VARG32>=VARG33,1,0); {周 RSI 多头}
VARG49:=IF(VARG34>=VARG35,1,0); {月 RSI 多头(恒为 1)}
VARG50:=IF(VARG25>=VARG26,1,0); {周 KD 多头}
VARG51:=VARG36+VARG37+VARG38+VARG39+VARG41+VARG42+VARG43
+VARG40+VARG44+VARG45+VARG46+VARG47+VARG48+VARG49+VARG50;
这是整个指标的灵魂所在。15 个独立的条件,每个满足记 1 分,不满足记 0 分,加起来就是 VARG51,理论范围 0-15。
这种”分项打分+求和”的设计思路有几个明显的好处:第一,可解释性强——分数高的时候你立刻能去查是哪几项没满足、哪几项强;第二,容错性好——任何单一指标失灵不会让整个系统失灵,只是少 1 分;第三,可调性高——你想加一个条件就加一个 VARGxx 然后塞进 VARG51,想去掉就反过来。
注意 VARG42、VARG43 是和自己上一期比较(>=REF(VARG25,1)),不是和另一条线比较——这判断的是”值在上行”而不是”线在上方”,和别的多头判断不一样。
这一段的代码可以优化的地方是:VARG49 因为前面的 bug 是恒为 1,实际有效条件只有 14 项,真实分数范围是 1-15。后面的颜色阈值应该按这个调整。
💡 技巧 7:分项打分系统的设计套路
把所有想用的判断条件统一写成VARGxx:=IF(条件,1,0),最后总分 := VARG1+VARG2+...+VARGn。每一个条件就是一票,相当于建了一个”指标议会”。这种结构比”复合条件 AND 串联”灵活得多——AND 串联只要有一个不满足就全黑,打分系统能告诉你”满足了几条”。
模块六:五指标复合振荡线(VARG52-VARG57)
VARG52:=EMA(100*(C-LLV(L,34))/(HHV(H,34)-LLV(L,34)),3);
VARG53:=SMA(MAX(CLOSE-REF(CLOSE,1),0),6,1)
/SMA(ABS(CLOSE-REF(CLOSE,1)),6,1)*100;
VARG54:=(HHV(HIGH,14)-CLOSE)/(HHV(HIGH,14)-LLV(LOW,14))*100;
VARG55:=(HIGH+LOW+CLOSE)/3;
VARG56:=(VARG55-MA(VARG55,14))/(0.015*AVEDEV(VARG55,14));
VARG57:=WMA((VARG52+VARG53+VARG24-VARG54+VARG56)/5,5);
这一段在做一件让人佩服的事情——把五个不同量纲的振荡指标合成成一条线:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
注意一个细节:VARG54 是 W%R,在原公式里是”值越小越强”,所以这里被我写成 减去 VARG54 而不是加,等于做了一次方向反转。这是合成指标时最容易写错的地方。
最后用 WMA(5) 做加权移动平均,得到主线 VARG57。它就是图上”空”那条粗绿线,数值意义模糊但形态意义明确——五个振荡器整体方向的”民意中位数”。
多:IF(VARG57>REF(VARG57,1),VARG57,DRAWNULL) 这一句更妙,它只在 VARG57 上行的时候画线,下行的时候断线,让你一眼就能看到趋势的颜色变化(蓝色=上行多头段,绿色=完整轨迹)。
💡 技巧 8:不同量纲指标合成时的方向归一化
把多个振荡器加到一起前,先确认它们”高=强”还是”低=强”。W%R、乖离率(部分写法)是”低=强”,和 KDJ、RSI 反过来。合成时对反向指标用减号,或者预先做100-X转换。这一步漏掉,合成线就完全乱方向。
💡 技巧 9:用 DRAWNULL 实现”条件断线”
IF(条件,数值,DRAWNULL)——条件成立时画值,不成立时画空,产生断线效果。配合两条不同颜色的线叠加(一条全画、一条只画上行段),就能在图上做出”上行染色”的视觉效果。这比 LINETHICK 调粗、改颜色都更直观。
模块七:FORCAST 预测顶部信号(VARG58-VARG63)
VARG58:=FORCAST(((2*C+H+L)/4*0.618+C*0.382),3);
VARG59:=(VARG58-MA(VARG58,9))/MA(VARG58,9)*100;
VARG60:=MIN(EXIST(VARG58,55),9);
VARG61:=EMA(VARG59,VARG60)*VARG60;
VARG62:=MA(VARG61,5)>3 AND VARG61<REF(VARG61,1) AND CROSS(MA(VARG61,3),VARG61);
VARG63:=FILTER(VARG62,5);
FORCAST 函数是通达信的线性回归预测函数,FORCAST(X,N) 表示”用 X 的最近 N 期数据做线性回归,预测下一期的值”。这是一个比 EMA、MA 都要”主动”的工具,它不平滑过去,它直接外推未来。
VARG58 把 (2C+H+L)/4 这个加权价(给收盘价更高权重)再用黄金分割比 0.618/0.382 和 C 加权一次,然后用 FORCAST 预测 3 周期后的值。这是个”未来价”的代理变量。
VARG59 把这个未来价和它的 9 期均值比,算成百分比涨幅——相当于”预测的未来位置离均线有多远”。VARG60 用 EXIST(...,55) 看过去 55 期里 VARG58 是否存在,然后取 MIN(…,9),相当于一个动态的 EMA 周期(0-9)。VARG61 把 VARG59 用动态周期 EMA 平滑后再乘回这个周期,做了一次”自适应放大”。
VARG62 是顶部信号的三重判断:(1) 最近 5 期 VARG61 均值 > 3(整体在高位)、(2) 当前 VARG61 在下行(已经掉头)、(3) MA(3) 和 VARG61 死叉(短均线下穿原线)——三个都成立才出信号。VARG63 用 FILTER(…,5) 做了 5 周期去重,避免连续打点。
这一段是整个指标里最”高级”的部分,它跳出了”看历史”的套路,用了”预测+确认+去重”的三步走结构。技术细节先不评价,但这个设计模板本身值得记下来。
模块八:底部反转信号(VARG64-VARG66)
VARG64:=EMA(EMA(C-REF(C,1),6),6)/EMA(EMA(ABS(C-REF(C,1)),6),6)*100;
VARG65:=IF(LLV(VARG64,3)=LLV(VARG64,11)
AND COUNT(VARG64<0,2)
AND CROSS(VARG64,MA(VARG64,2)),1,0);
VARG66:=FILTER(VARG65=1,5);
VARG64 本质上是一个平滑后的 RSI 变体:用收盘涨跌幅做两层 EMA,再除以涨跌绝对值的两层 EMA,得到一个 ±100 范围的振荡器。
VARG65 的三个条件,是底部信号的标准三件套:(1) 当前是最近 11 期的最低点(LLV(...,3)=LLV(...,11) 这种写法很常见,意思是”3 期内的最低值同时也是 11 期内的最低值”,等价于”11 期内最低点出现在最近 3 期”)、(2) 最近 2 期里出现过负值(已经跌穿 0)、(3) VARG64 上穿自己的 2 期 MA(开始反转)。三个都成立=底部反转。
VARG66 同样用 FILTER(…,5) 做 5 周期去重。
注意模块七和模块八是完全对称的设计:都是”自定义振荡器 + 三重确认 + 5 周期去重”,一个抓顶一个抓底。这种对称设计是好习惯,代码维护和参数调优都会容易很多。
模块九:辅助分类与画图
VARG88:=VARG37+VARG41+VARG44+VARG50; {KDJ 跨周期共振:36/12/月/周}
VARG86:=VARG38+VARG39+VARG40+VARG36; {MACD 跨周期共振:标准/周/月/半周期}
DRAWICON(VARG25>=REF(VARG25,1) AND VARG10>=VARG11,85,25);
STICKLINE(VARG51<8,0,VARG51*5,2,0),COLORLIGREEN;
STICKLINE(VARG51>=8 AND VARG51<10,0,VARG51*5,2,0),COLORLIRED;
STICKLINE(VARG51>=10,0,VARG51*5,2,0),COLORYELLOW;
空:WMA((VARG52+VARG53+VARG24-VARG54+VARG56)/5,5),COLOR00FF00,LINETHICK3;
多:IF(VARG57>REF(VARG57,1),VARG57,DRAWNULL),COLOR0000FF,LINETHICK3;
DRAWICON(FILTER(VARG63=1,3),VARG57,2);
DRAWICON(FILTER(VARG66=1,3),VARG57,1);
DRAWICON(CROSS(VARG88,3) OR CROSS(VARG86,3),94,23);
VARG88、VARG86 是两个子打分:VARG88 把 KDJ 体系的 4 个跨周期条件(36-KDJ、12-KDJ、月 KDJ、周 KD)单独加起来,VARG86 把 MACD 体系的 4 个条件(标准、周、月、半周期)加起来。这两个子分都是 0-4 范围。
最后一句 DRAWICON(CROSS(VARG88,3) OR CROSS(VARG86,3),94,23)——当 KDJ 子分或 MACD 子分上穿 3(从最多 2 项满足跳到 3 项以上满足),画出图标。这个用法的精髓是 CROSS 不只能用于线,也能用于离散值:当一个整数序列从 ≤3 变成 >3 时,CROSS 触发。
STICKLINE 这三行做了一个柱状打分指示条:分数 <8 画浅绿、8-9 画浅红、≥10 画黄色,长度是分数×5。把分数可视化成柱子比单纯写一个数字直观得多。
优点与局限
优点
-
1. 用打分系统替代单点判断,容错性和可解释性都很强 -
2. 顶部和底部信号采用对称设计,代码维护容易 -
3. 把五个不同量纲的振荡器做加权合成,VARG57 这条线的设计思路有参考价值 -
4. 用 STICKLINE 配合三段颜色把分数视觉化,UI 巧妙
局限
-
1. 强依赖跨周期引用,手机版完全跑不了,使用场景被限制在电脑端 -
2. VARG34/VARG35 重复定义导致 VARG49 恒为 1,15 项条件实际只有 14 项有效 -
3. FORCAST 预测的滞后性和真实预测能力都需要单独验证,不能想当然 -
4. 共振系统的天然问题:所有指标本质都来自价格本身,共振强不代表独立证据多,多数情况只是”价格走得好”的多种描述
编程技巧汇总
把前面散落在各模块的技巧统一列一遍,方便收藏:
-
1. 三层嵌套 IF 模拟分支判断——通达信没有 ELSEIF,用嵌套 IF 处理三种以上互斥情形 -
2. 手动加权 MA 替代 EMA—— a*X + b*REF(X,1) + c*REF(X,2)这种写法权重可控,比 EMA 灵活 -
3. 半周期参数构造预警指标——MACD 的 12-26-9 全部除以 2,得到反应快一倍的预警 MACD -
4. 跨周期引用语法 指标名.输出名#周期——电脑版多周期共振的标配,手机版基本不支持 -
5. 跨周期引用带参数的写法—— "指标名.输出#周期"(参数),引号包名称、括号包参数 -
6. 警惕”恒真/恒假”的隐性 bug——分项打分系统里每一个条件都要验证有 0/1 两种状态 -
7. 分项打分系统的设计套路—— VARGxx:=IF(条件,1,0)然后求和,容错和可解释性远胜 AND 串联 -
8. 不同量纲指标合成时的方向归一化——W%R、乖离率这类”低=强”的指标合成时要用减号 -
9. 用 DRAWNULL 实现”条件断线”—— IF(条件,数值,DRAWNULL)配合双线叠加做染色效果
附加的一个”半技巧”:CROSS 可用于离散整数值——CROSS(打分变量,3) 表示分数从 ≤3 跳到 >3 的瞬间,常用在共振系统的触发提示。

完整源码(电脑版)
VARG1:=MA(VOL,5);
VARG2:=MA(VOL,10);
VARG3:=VOL/((HIGH-LOW)*2-ABS(CLOSE-OPEN));
VARG4:=IF(CLOSE<OPEN,0-VARG3*(HIGH-LOW),0-VOL/2);
VARG5:=IF(CLOSE>OPEN,0-VARG3*(HIGH-CLOSE+OPEN-LOW),VARG4);
VARG6:=IF(C>O,VARG3*(H-L),IF(C<O,VARG3*(H-O+C-L),V/2))+VARG5;
VARG7:=(VARG6/20)/1.15;
VARG8:=((VARG7*0.55+(REF(VARG7,1)*0.33))+(REF(VARG7,2)*0.22));
VARG9:=EMA(VARG8,3);
VARG10:=EMA(CLOSE,12/2)-EMA(CLOSE,26/2);
VARG11:=EMA(VARG10,9/2);
VARG12:=(CLOSE-LLV(LOW,36))/(HHV(HIGH,36)-LLV(LOW,36));
VARG13:=SMA(VARG12,3,1);
VARG14:=SMA(VARG13,3,1);
VARG15:=EMA(CLOSE,12)-EMA(CLOSE,26);
VARG16:=EMA(VARG15,9);
VARG17:=MACD.DIF#WEEK;
VARG18:=MACD.DEA#WEEK;
VARG19:=MACD.DIF#MONTH;
VARG20:=MACD.DEA#MONTH;
VARG21:=(CLOSE-LLV(LOW,12))/(HHV(HIGH,12)-LLV(LOW,12));
VARG22:=SMA(VARG21,3,1);
VARG23:=SMA(VARG22,3,1);
VARG24:=3*VARG22-2*VARG23;
VARG25:=MA("KDJ.K#WEEK"(9,3,3),5);
VARG26:=MA("KDJ.D#WEEK"(9,3,3),5);
VARG27:=MA("KDJ.J#WEEK"(9,3,3),5);
VARG28:="KDJ.K#MONTH";
VARG29:="KDJ.D#MONTH";
VARG30:="RSI.RSI1#DAY"(9);
VARG31:="RSI.RSI2#DAY"(9);
VARG32:="RSI.RSI1#WEEK"(9);
VARG33:="RSI.RSI2#WEEK"(9);
VARG34:="RSI.RSI1#MONTH"(9);
VARG35:="RSI.RSI2#MONTH"(9);
VARG36:=IF(VARG10>=VARG11,1,0);
VARG37:=IF(VARG13>=VARG14,1,0);
VARG38:=IF(VARG15>=VARG16,1,0);
VARG39:=IF(VARG17>=VARG18,1,0);
VARG40:=IF(VARG19>=VARG20,1,0);
VARG41:=IF(VARG22>=VARG23,1,0);
VARG42:=IF(VARG25>=REF(VARG25,1),1,0);
VARG43:=IF(VARG27>=REF(VARG27,1),1,0);
VARG44:=IF(VARG28>=VARG29,1,0);
VARG45:=IF(VARG1>VARG2,1,0);
VARG46:=IF(VARG9>0,1,0);
VARG47:=IF(VARG30>=VARG31,1,0);
VARG48:=IF(VARG32>=VARG33,1,0);
VARG49:=IF(VARG34>=VARG35,1,0);
VARG50:=IF(VARG25>=VARG26,1,0);
VARG51:=VARG36+VARG37+VARG38+VARG39+VARG41+VARG42+VARG43+VARG40+VARG44+VARG45+VARG46+VARG47+VARG48+VARG49+VARG50;
VARG52:=EMA(100*(C-LLV(L,34))/(HHV(H,34)-LLV(L,34)),3);
VARG53:=SMA(MAX(CLOSE-REF(CLOSE,1),0),6,1)/SMA(ABS(CLOSE-REF(CLOSE,1)),6,1)*100;
VARG54:=(HHV(HIGH,14)-CLOSE)/(HHV(HIGH,14)-LLV(LOW,14))*100;
VARG55:=(HIGH+LOW+CLOSE)/3;
VARG56:=(VARG55-MA(VARG55,14))/(0.015*AVEDEV(VARG55,14));
VARG57:=WMA((VARG52+VARG53+VARG24-VARG54+VARG56)/5,5);
VARG58:=FORCAST(((2*C+H+L)/4*0.618+C*0.382),3);
VARG59:=(VARG58-MA(VARG58,9))/MA(VARG58,9)*100;
VARG60:=MIN(EXIST(VARG58,55),9);
VARG61:=EMA(VARG59,VARG60)*VARG60;
VARG62:=MA(VARG61,5)>3 AND VARG61<REF(VARG61,1) AND CROSS(MA(VARG61,3),VARG61);
VARG63:=FILTER(VARG62,5);
VARG64:=EMA(EMA(C-REF(C,1),6),6)/EMA(EMA(ABS(C-REF(C,1)),6),6)*100;
VARG65:=IF(LLV(VARG64,3)=LLV(VARG64,11) AND COUNT(VARG64<0,2) AND CROSS(VARG64,MA(VARG64,2)),1,0);
VARG66:=FILTER(VARG65=1,5);
VARG88:=VARG37+VARG41+VARG44+VARG50;
VARG86:=VARG38+VARG39+VARG40+VARG36;
DRAWICON(VARG25>=REF(VARG25,1) AND VARG10>=VARG11,85,25);
STICKLINE(VARG51<8,0,VARG51*5,2,0),COLORLIGREEN;
STICKLINE(VARG51>=8 AND VARG51<10,0,VARG51*5,2,0),COLORLIRED;
STICKLINE(VARG51>=10,0,VARG51*5,2,0),COLORYELLOW;
空:WMA((VARG52+VARG53+VARG24-VARG54+VARG56)/5,5),COLOR00FF00,LINETHICK3;
多:IF(VARG57>REF(VARG57,1),VARG57,DRAWNULL),COLOR0000FF,LINETHICK3;
DRAWICON(FILTER(VARG63=1,3),VARG57,2);
DRAWICON(FILTER(VARG66=1,3),VARG57,1);
震幅:(H-L)/REF(C,1)*100,NODRAW,COLORRED;
超级大盘股:FINANCE(7)>=8000000000,COLORRED,NODRAW;
大盘股:FINANCE(7)<8000000000 AND FINANCE(7)>=800000000,COLORYELLOW,NODRAW;
中盘股:FINANCE(7)<800000000 AND FINANCE(7)>=400000000,COLORGREEN,NODRAW;
小盘股:FINANCE(7)<400000000,COLORWHITE,NODRAW;
盘小绩优:FINANCE(7)<1000000000 AND DYNAINFO(39)>0 AND DYNAINFO(39)<=28,COLOR9933FF,NODRAW;
获利:WINNER(CLOSE)*100,COLORLIBLUE,NODRAW;
DRAWICON(CROSS(VARG88,3) OR CROSS(VARG86,3),94,23);
量比:DYNAINFO(17),NODRAW;
⚠️ 本指标适用于通达信电脑版。手机版不支持 #WEEK、#MONTH、#DAY 跨周期引用语法和部分 FORCAST、DYNAINFO 函数,如遇报错请在电脑端使用。
完整源码(手机版兼容版本)
为了让手机用户也能用上这套打分系统,下面给出一个移除所有跨周期引用的简化版本。它去掉了 VARG17-VARG20、VARG25-VARG29、VARG30-VARG35 这些跨周期引用,把判断条件从 15 项压缩到 7 项,分数范围 0-7,阈值按比例调整(原来 8/10 → 现在 4/5)。
VARG1:=MA(VOL,5);
VARG2:=MA(VOL,10);
VARG3:=VOL/((HIGH-LOW)*2-ABS(CLOSE-OPEN));
VARG4:=IF(CLOSE<OPEN,0-VARG3*(HIGH-LOW),0-VOL/2);
VARG5:=IF(CLOSE>OPEN,0-VARG3*(HIGH-CLOSE+OPEN-LOW),VARG4);
VARG6:=IF(C>O,VARG3*(H-L),IF(C<O,VARG3*(H-O+C-L),V/2))+VARG5;
VARG7:=(VARG6/20)/1.15;
VARG8:=((VARG7*0.55+(REF(VARG7,1)*0.33))+(REF(VARG7,2)*0.22));
VARG9:=EMA(VARG8,3);
VARG10:=EMA(CLOSE,6)-EMA(CLOSE,13);
VARG11:=EMA(VARG10,4);
VARG12:=(CLOSE-LLV(LOW,36))/(HHV(HIGH,36)-LLV(LOW,36));
VARG13:=SMA(VARG12,3,1);
VARG14:=SMA(VARG13,3,1);
VARG15:=EMA(CLOSE,12)-EMA(CLOSE,26);
VARG16:=EMA(VARG15,9);
VARG21:=(CLOSE-LLV(LOW,12))/(HHV(HIGH,12)-LLV(LOW,12));
VARG22:=SMA(VARG21,3,1);
VARG23:=SMA(VARG22,3,1);
VARG24:=3*VARG22-2*VARG23;
RSI_UP:=SMA(MAX(CLOSE-REF(CLOSE,1),0),6,1);
RSI_AB:=SMA(ABS(CLOSE-REF(CLOSE,1)),6,1);
VARG70:=RSI_UP/RSI_AB*100;
VARG71:=MA(VARG70,3);
VARG36:=IF(VARG10>=VARG11,1,0);
VARG37:=IF(VARG13>=VARG14,1,0);
VARG38:=IF(VARG15>=VARG16,1,0);
VARG41:=IF(VARG22>=VARG23,1,0);
VARG45:=IF(VARG1>VARG2,1,0);
VARG46:=IF(VARG9>0,1,0);
VARG47:=IF(VARG70>=VARG71,1,0);
VARG51:=VARG36+VARG37+VARG38+VARG41+VARG45+VARG46+VARG47;
VARG52:=EMA(100*(C-LLV(L,34))/(HHV(H,34)-LLV(L,34)),3);
VARG54:=(HHV(HIGH,14)-CLOSE)/(HHV(HIGH,14)-LLV(LOW,14))*100;
VARG55:=(HIGH+LOW+CLOSE)/3;
VARG56:=(VARG55-MA(VARG55,14))/(0.015*AVEDEV(VARG55,14));
VARG57:=WMA((VARG52+VARG70+VARG24-VARG54+VARG56)/5,5);
STICKLINE(VARG51<4,0,VARG51*10,2,0),COLORLIGREEN;
STICKLINE(VARG51>=4 AND VARG51<5,0,VARG51*10,2,0),COLORLIRED;
STICKLINE(VARG51>=5,0,VARG51*10,2,0),COLORYELLOW;
空:WMA((VARG52+VARG70+VARG24-VARG54+VARG56)/5,5),COLOR00FF00,LINETHICK2;
多:IF(VARG57>REF(VARG57,1),VARG57,DRAWNULL),COLOR0000FF,LINETHICK2;
DRAWICON(VARG10>=VARG11 AND VARG13>=VARG14,85,25);
⚠️ 手机版兼容版本是按原指标”打分系统+复合振荡线”的核心思路重写的,不包含跨周期共振、FORCAST 顶部信号和底部反转信号(后两个用到的 FORCAST 和高级 FILTER 在手机版表现不稳定)。如果你的目的是完整体验原指标,还是要在电脑端使用。
免责声明:本文仅为通达信指标公式的编写教学与逻辑拆解,所有内容均基于技术分析理论的知识分享,不构成任何投资建议。技术指标存在固有的滞后性和局限性,任何单一指标都不能保证盈利。股市有风险,入市需谨慎。读者请根据自身风险承受能力和投资经验独立做出决策,盈亏自负。
💬 这里有一个很关键的设计选择想听听你的看法:我用 15 个条件做共振打分,但这 15 个条件几乎全部来自价格序列本身(成交量只占 2 项)。你觉得这种”同源数据反复加权”的做法,算是真正的多重确认,还是只是把同一件事用不同方式说了 15 遍?评论区聊聊。
📮 下期准备拆解一个偏量价关系的指标,你手上有想让我拆的吗?留言发源码或指标名,点赞最高的优先安排!
👍 这篇花了不少时间整理,觉得有帮助就点个赞+在看,让更多人看到。
☕ 如果帮你省了自己啃源码的功夫,请我喝杯茶,你的支持是持续输出的动力。
每天早上9点,我们准时见。
夜雨聆风