简介:这是一份面向股票技术分析爱好者与通达信指标编写者的艾略特波浪划线公式源码文档,基于艾略特波浪理论,通过移动平均线与高低点计算,在主图上自动绘制五浪结构,帮助看盘时快速识别趋势阶段与关键价位。资源包内共1个doc文件,约118KB,内容以指标公式源码与变量注释为主,涵盖M5、M10均线交叉判断、HHV与LLV高低点取值、T与ST周期计数,以及TJ1至TJ12共12条DRAWLINE划线逻辑,并输出近高、近低、中高、中底、远高、远底等参考数值与中区价位提示。该指标将波浪理论与均线系统结合,适合已有一定通达信公式基础、希望研究波浪自动划线的读者参考移植与二次修改。目前已有261人学习浏览,可作为技术指标学习与源码拆解的实用素材。
1. 波浪划线指标到底在画什么:从一段 12 条 DRAWLINE 的源码说起
很多人第一次拿到这份艾略特波浪划线通达信指标公式源码,扫一眼满屏的TJ1到TJ12就头大,觉得又是玄学。但你把DRAWLINE那 12 行单独拎出来看,逻辑其实很朴素:它用 5 日和 10 日均线的金叉死叉切出时间窗口,再在每个窗口里找最高点和最低点,最后把这些高低点按顺序连成折线。换句话说,它不是在预测未来,而是把已经走出来的波段结构用五浪的框架标出来,让你看盘时不用手动去数浪。
这份资源适合两类人:一类是天天盯主图、想给均线系统加一层结构标注的技术分析玩家;另一类是手里有通达信公式编辑器、想改参数做二次开发的人。它解决的核心痛点是——手动数浪容易数错、数漏,尤其是行情走了一段之后回头看,哪一浪是哪一浪全靠记忆。指标把H1/L1到H3/L3六个关键价位固化下来,再用NODRAW输出近高、近低、中高、中底、远高、远底,等于给你留了一份可复查的结构底稿。
需要先说明的是,这份源码是通达信公式语言(TDX),不是 Python 也不是 JavaScript,粘贴位置在公式管理器的主图指标里。它依赖CONST、CURRBARSCOUNT、SUMBARS这几个通达信特有函数,换到别的软件上大概率跑不起来。下面按“先看懂变量 → 再动手装 → 再调参 → 再排错”的顺序拆。
2. 拆解源码:均线交叉、SUMBARS 计数与六个关键价位
2.1 均线交叉怎么切出时间窗口
源码开头两句是地基:
X:=5; D:=10; M5:MA(C,X); M10:MA(C,D); T:=BARSLAST(CROSS(M5,M10)); ST:=BARSLAST(CROSS(M10,M5));X和D是两条均线的周期,默认 5 和 10。CROSS(M5,M10)是金叉,BARSLAST返回“距离上一次金叉过去了多少根 K 线”。所以T就是最近一次金叉到现在的距离,ST是最近一次死叉到现在的距离。这两个值决定了后面所有高低点回溯的起点。
这里有个容易忽略的点:BARSLAST返回的是“距离”,不是“位置”。如果你在副图里用同样的写法,T的含义不变,但主图上的视觉锚点会跟着最后一根 K 线走。这也是为什么源码后面大量用CURRBARSCOUNT做区间判断——它是在用“从右往左数第几根”来锁定画线区间,而不是用绝对时间。
2.2 SUMBARS 把单次交叉扩展成多次交叉序列
只有最近一次交叉不够画五浪,所以源码用SUMBARS往前推:
T1:=SUMBARS(T=0,2); T2:=SUMBARS(T=0,3); ST1:=SUMBARS(ST=0,2); ST2:=SUMBARS(ST=0,3);SUMBARS(T=0,2)的意思是:从当前 K 线往左数,累计到第 2 次满足T=0的位置。T=0代表“当前这根就是金叉点”。所以T1是倒数第二次金叉的位置,T2是倒数第三次金叉的位置。同理ST1、ST2对应死叉序列。
这四个计数器把时间轴切成了若干段:T2到ST2、ST2到T1、T1到ST1、ST1到T、T到当前。每一段对应五浪结构里的一个推进或回撤区间。参数里的2和3不是随便写的,它们决定了你往前看几次交叉;改成2和4就会多画一段,但也会把更早的、可能已经失效的结构拉进来。
2.3 H1/L1 到 H3/L3:六个价位是怎么算出来的
以H1为例:
H1:=IF(CONST(M5)>CONST(M10),HHV(H,T+1),REF(HHV(H,T+1),ST));CONST(M5)>CONST(M10)判断当前是均线多头还是空头。多头时,H1取最近T+1根 K 线的最高价;空头时,取ST根之前的那个T+1窗口的最高价。L1是对称逻辑,用LLV取最低价。H2/L2、H3/L3则是把窗口换成ST1-1、T1-1、ST2-1、T2-1,一层层往前推。
这六个值就是五浪划线的顶点和底点候选。源码后面用TJ1到TJ12做条件判断,本质是在问:当前这根 K 线是不是恰好落在某个窗口里、并且价格等于对应的H或L?如果是,就触发DRAWLINE。
2.4 DRAWLINE 与颜色分组
12 条DRAWLINE分成两组颜色:
DRAWLINE(TJ1,L,TJ2,H,0),COLORMAGENTA; DRAWLINE(TJ2,H,TJ3,L,0),COLORMAGENTA; ... DRAWLINE(TJ7,H,TJ8,L,0),COLORGREEN; DRAWLINE(TJ8,L,TJ9,H,0),COLORGREEN;品红色(COLORMAGENTA)对应TJ1到TJ6,绿色(COLORGREEN)对应TJ7到TJ12。从条件看,品红组是在CONST(M5)>CONST(M10)即均线多头时触发,绿色组是在空头时触发。所以颜色不是装饰,它直接告诉你当前这段划线是在多头结构里还是空头结构里。看盘时如果满屏绿色,说明均线系统偏空,这时候去数上涨五浪要格外小心。
3. 装进通达信:从公式管理器到主图显示的完整步骤
3.1 新建主图指标并粘贴源码
打开通达信,按Ctrl+F调出公式管理器,选“技术指标公式 → 其他类型 → 新建”。几个关键填写项:
| 字段 | 建议值 | 说明 |
|---|---|---|
| 公式名称 | 自定义,如 BDWAVE | 不要用中文名,部分版本对中文名兼容差 |
| 公式类型 | 主图叠加 | 必须选主图,否则划线会跑到副图 |
| 画线方法 | 主图叠加 | 与上一项一致 |
| 参数 | 不填 | 源码里 X、D 是内部变量,不是外部参数 |
把源码整段粘贴进编辑区,点“测试公式”。如果提示“行 X 错误”,先看那一行有没有中文标点。通达信公式对分号、逗号、括号的要求很死,从网页复制时经常把英文逗号变成中文逗号,这是最高频的翻车点。
3.2 绑定到 K 线主图
公式保存后,回到 K 线图,输入公式名称的首字母(比如BDWAVE就输BDW),回车。如果没显示,检查两件事:一是公式类型是不是“主图叠加”,二是当前 K 线图有没有足够的历史数据。SUMBARS(T=0,3)需要至少三次金叉,如果股票上市时间短或者你只加载了最近几十根 K 线,T2可能返回无效值,划线就不出来。
常见做法是先把 K 线缩到能看到半年以上的数据,再重新加载指标。我一般会先在指数或者流动性好的标的上试,因为个股停牌多、K 线不连续,BARSLAST和SUMBARS的计数容易被跳空打乱。
3.3 验证划线是否正常
装好之后,找一段明显的趋势行情对照。正常的输出应该满足:
- 品红线段连接的是低点→高点→低点→高点→低点→高点,形成向上的折线;
- 绿色线段连接的是高点→低点→高点→低点→高点→低点,形成向下的折线;
- 主图左上角或划线起点附近出现“中区价位:XX.XX 元”的文字标注。
如果线段交叉混乱、或者同一段里既有品红又有绿色,大概率是CONST(M5)>CONST(M10)在窗口内发生了翻转。这不是 bug,是均线在震荡区反复交叉导致的。后面排错章节会专门讲怎么处理。
4. 参数怎么调:X、D 与 SUMBARS 回溯次数的取舍
4.1 改均线周期:5/10 不是唯一解
源码里X:=5; D:=10;是最容易改的地方。改成X:=10; D:=20;会让交叉次数明显减少,划线变得更“粗”,适合看大级别结构;改成X:=3; D:=8;则交叉频繁,划线密集,适合短线但噪音大。
改完之后要同步检查SUMBARS的第二个参数。因为均线周期变短后,同样一段时间内的交叉次数会变多,原来T2取倒数第三次金叉可能只覆盖了很短一段,画出来的五浪会挤在一起。常见做法是:均线周期调短,就把SUMBARS的第二个参数从3调到4或5,让回溯范围拉长。
4.2 改回溯次数:2/3 与 3/4 的差别
T1:=SUMBARS(T=0,2); T2:=SUMBARS(T=0,3);这两个数字决定了往前找几次交叉。2和3的组合意味着:T1是倒数第二次金叉,T2是倒数第三次金叉。如果你改成3和4,T1变成倒数第三次,T2变成倒数第四次,整个划线会往左平移一段,覆盖更早的结构。
代价是:越早的结构,参考价值越低,而且CURRBARSCOUNT的区间判断会更容易失效。我的经验是,日线级别用默认的2/3就够了,周线级别可以试3/4,分钟级别反而要缩回2/3甚至1/2,因为分钟级别的交叉太密,回溯太远会画出十几条线段,主图直接糊掉。
4.3 中区价位的计算与显示
源码末尾有一段计算中区价位的逻辑:
HH:=CONST(MAX(MAX(H1,H2),H3)); LL:=CONST(MIN(MIN(L1,L2),L3)); Z:=(HH-LL)/2+LL; DRAWLINE(TJ7,Z,ISLASTBAR,Z,0),COLORGREEN,DOTLINE; DRAWTEXT(TJ7,CONST(Z)*1.01,VARCAT(VARCAT('中区价位:',VAR2STR(CONST(Z),2)),'元')),COLORGREEN;HH是三个高点里的最大值,LL是三个低点里的最小值,Z是两者的中位价。DRAWLINE从TJ7触发点画一条虚线到最后一根 K 线,DRAWTEXT在虚线上方标注价格。这个中区价位可以理解成这段五浪结构的“重心”,价格在它上方运行偏强,下方运行偏弱。
注意VAR2STR(CONST(Z),2)里的2是保留两位小数。如果你做的是高价股或者外汇,可以改成3或4。但改完要测试,部分老版本通达信对VAR2STR的位数支持有限,超过 4 位可能显示异常。
5. 避坑与排查:划线不显示、错位、闪烁的五个真实原因
5.1 现象:公式测试通过,但主图上一根线都没有
原因:最常见的是公式类型选成了“副图指标”,或者绑定的时候没有用主图叠加。另一个可能是SUMBARS返回了无效值——当历史 K 线不足以支撑三次金叉时,T2会是一个很大的数或者无效数,导致CURRBARSCOUNT的区间判断全部为假。
解决:先确认公式类型是“主图叠加”;再把 K 线图缩到能看到至少 200 根以上 K 线;如果还是不显示,临时把T2:=SUMBARS(T=0,3)改成T2:=SUMBARS(T=0,2),降低对历史数据的要求,看是否恢复。
5.2 现象:划线出现了,但线段连到了错误的高低点
原因:H1到L3的计算依赖CONST(M5)>CONST(M10)这个全局判断。如果当前是空头,但某个历史窗口里其实是多头,IF分支会取到错误的REF偏移,导致高低点错位。
解决:这是源码本身的简化处理,不是配置问题。缓解办法是尽量在趋势明显的标的上用,震荡区里划线错位是常态。如果一定要在震荡区用,可以把CONST(M5)>CONST(M10)换成更稳定的趋势判断,比如CONST(MA(C,20))>CONST(REF(MA(C,20),5)),但这需要改源码,属于二次开发范畴。
5.3 现象:划线在盘中不断闪烁、最后一根 K 线来回跳
原因:CURRBARSCOUNT和ISLASTBAR都是跟最后一根 K 线绑定的。盘中价格变动时,H1、L1这些用HHV、LLV算出来的值会跟着变,触发条件TJ1到TJ12也可能在真假之间跳。
解决:这是所有基于ISLASTBAR的通达信指标的共性,不是这份源码独有。看盘时以收盘后或者整点截图为准,盘中闪烁不用管。如果实在影响判断,可以在公式管理器里把指标设为“仅收盘后计算”,但通达信不同版本这个选项的位置不一样,常见做法是收盘后再打开看。
5.4 现象:中区价位文字重叠、显示不全
原因:DRAWTEXT的第二个参数是CONST(Z)*1.01,也就是在中区价位上方 1% 处标注。如果TJ1和TJ7触发点离得很近,两个文字会叠在一起。另外VARCAT拼接的字符串太长时,部分版本会截断。
解决:把1.01改成1.02或1.03,拉开文字间距。如果还是重叠,可以只保留品红组或绿色组的标注,把另一组的DRAWTEXT注释掉。注释用{ }包起来,通达信支持花括号注释。
5.5 现象:换到别的软件(同花顺、大智慧)完全不能用
原因:CONST、CURRBARSCOUNT、SUMBARS、VAR2STR都是通达信特有函数,同花顺和大智慧的公式语法不兼容。DRAWLINE的参数顺序也有差异。
解决:不要指望直接复制。如果一定要跨软件,需要把CONST换成对应的常量提取方式,把CURRBARSCOUNT换成各自软件的“距末尾周期数”函数,工作量不小。这份源码的定位就是通达信专用,跨平台不是它的目标。
6. 进阶:把划线结果导出做二次验证的一个笨办法
源码里最后几行用NODRAW输出了六个价位:
近高:H1,COLORMAGENTA,NODRAW; 近低:L1,COLORGREEN,NODRAW; 中高:H2,COLORMAGENTA,NODRAW; 中底:L2,COLORGREEN,NODRAW; 远高:H3,COLORMAGENTA,NODRAW; 远底:L3,COLORGREEN,NODRAW;NODRAW的意思是“计算但不画线”,这些值会出现在指标数值区,但不会在主图上显示。很多人忽略这几行,其实它们是最有用的部分——你可以把鼠标停在任意一根 K 线上,直接读到当前窗口对应的近高、近低、中高、中底、远高、远底六个价格。
我一般会做一件事:在关键交易日把这三个高点和三个低点抄到表格里,然后跟随后的实际走势对照。比如H1被突破后,下一浪的目标位通常参考H2或H3;L1被跌破后,回撤深度参考L2。这不是精确预测,但能帮你把“感觉要涨”变成“距离哪个价位还有多少空间”。
更进一步,如果你会用通达信的“数据导出”功能,可以把这几列NODRAW值连同收盘价一起导出成 CSV,再用 Python 做简单的统计。比如统计H1被突破后 5 根 K 线的平均涨幅,或者L1被跌破后继续下跌的概率。这一步不需要改源码,只需要在 K 线图上右键“导出数据”,把指标数值一起勾上。
import pandas as pd # 假设导出的 CSV 包含 date, close, H1, L1, H2, L2, H3, L3 df = pd.read_csv("wave_export.csv") df["break_H1"] = df["close"] > df["H1"] df["fwd_5"] = df["close"].shift(-5) / df["close"] - 1 # 统计突破 H1 后 5 根 K 线的表现 result = df[df["break_H1"]]["fwd_5"].describe() print(result)这段代码不依赖任何交易接口,纯粹是事后验证。参数shift(-5)里的5可以改成3、10,看不同持有周期的分布。注意导出的 CSV 里NODRAW列可能是空值,需要在通达信导出设置里勾选“包含指标数值”,否则读进来全是 NaN。
最后说个血泪经验:这类波浪划线指标最大的价值不是给你买卖信号,而是逼你把每一段结构的高低点写下来。我以前偷懒不记,行情走完了回头复盘,连哪一浪是主升都说不清。从那以后我每次装完新指标,都强制先跑一遍历史数据、把六个价位导出来对一遍,确认划线逻辑跟自己的看盘习惯对得上,再放到实盘主图里。希望帮到你。
本文还有配套的精品资源,点击获取