简介:这是一份面向股票技术分析爱好者与通达信公式编写者的指标源码文档,围绕艾略特波浪理论实现主图五浪划线,帮助使用者在看盘时快速识别趋势的推进与调整阶段。文件为单个 doc 文档,压缩包约 118KB,内容以可直接粘贴到通达信公式管理器的源码为主,包含变量定义、公式注释与绘制逻辑说明。源码以 5 期与 10 期移动平均线(M5、M10)的交叉为起点,借助 BARSLAST、SUMBARS 计算交叉计数,再通过 HHV、LLV 及 CONST、REF 函数回溯近高、中高、远高与近低、中底、远底六个关键价位,并用 DRAWLINE 绘制 12 条浪形连线,上涨段以品红色标示、下跌段以绿色标示。此外还输出中区价位水平虚线及文字标注,并以 NODRAW 形式给出各关键高低点数值,方便叠加其他指标做二次判断。目前已有 259 人学习,适合想理解波浪结构量化表达、并对照源码改造为自己交易系统的读者参考。
1. 搜“艾略特波浪划线通达信指标公式源码”的人,真正想要的是什么
半夜改公式的人常遇到这一幕:把 ZIG 的参数从 5 改成 8,整条浪线塌了,昨天标好的 3 浪变成一根没意义的折线。找“艾略特波浪划线通达信指标公式源码”,本质不是找一份能预测行情的圣杯,而是找一套把自己脑子里的浪型结构翻译成通达信公式语言的方法。落地对象很具体:主图一条折线,折点上带 1、2、3、4、5 和 A、B、C 标注,再配几条 0.382、0.618 的回撤位水平线。适合有公式基础、愿意自己调转向阈值的技术型交易者,也适合想把主观浪型拆成可统计特征的研究者。真正的难点不在理论,而在通达信公式语言只能拿到 OHLCV 和有限时序函数,怎么把“浪”这种带结构的形态压缩成可计算的转向点。
2. 艾略特波浪在通达信公式里怎么变成可计算量
2.1 从浪型规则里抽出可判定的约束条件
艾略特波浪的原始形态是主观画法,落到公式里必须变成能用 OHLCV 判断的硬约束。常见做法是只保留三条最稳的:
- 浪 2 回撤不能超过浪 1 的 100%,即浪 2 低点不跌破浪 1 起点;
- 浪 3 不能是浪 1、3、5 中最短的一段,实务里常要求浪 3 长度不低于浪 1 的 1 倍;
- 浪 4 与浪 1 一般不重叠,终结楔形和引导楔形是例外。
再叠加斐波那契比例作为软约束:浪 2 常回撤浪 1 的 0.382 到 0.618,浪 3 常是浪 1 的 1.618 或 2.618 倍,浪 4 常回撤浪 3 的 0.236 到 0.382,浪 5 与浪 1 等长或为 0.618 倍。这些数字在公式里全是加减乘除,关键是先有个能输出浪点坐标的东西。
2.2 ZIG 转向阈值就是浪级旋钮
通达信里能给出折线的就是 ZIG,写法是ZIG(K,N)。K 决定用哪个价格,0 开盘、1 最高、2 最低、3 收盘;N 是转向百分比,价格逆向运动超过 N% 才确认转向。把 N 理解成浪级旋钮最直观:N 越小折线越碎,抓的是日内小波动;N 越大折线越粗,抓的是一段主升浪。
| N 取值 | 折点数量 | 对应浪级(日线) | 适合的观察周期 |
|---|---|---|---|
| 3 | 多 | 次小浪 | 5 到 15 分钟 |
| 5 | 中 | 小浪 | 60 分钟到日线 |
| 8 | 中少 | 中浪 | 日线波段 |
| 13 | 少 | 大浪 | 日线到周线 |
| 20 | 很少 | 循环浪 | 周线以上 |
N 不是越大越好。太大,一个完整的 5 浪推动会被压成一个折点,1、3、5 全丢;太小,浪 1 内部又被拆成一堆次级别小浪,浪序标注随即失效。常见做法是同一张图上叠两条不同 N 的 ZIG,粗线定大浪框架,细线找浪内结构。
2.3 PEAK 与 TROUGH 的坐标语义
ZIG 只给折线,不给浪序,要标浪号得靠 PEAK 和 TROUGH,写法是PEAK(K,N,M)和TROUGH(K,N,M)。K、N 含义与 ZIG 一致,M 是第几个折点,从右往左数,1 表示最近一个已确认折点。PEAK(1,5,1)是最近一个 5% 转向的最高价波峰,TROUGH(2,5,2)是倒数第二个 5% 转向的最低价波谷。M 不能写 0 或负数,通达信只接受从 1 开始的正整数,这是新手最容易卡住的编译错误。
还有一条要提前记住:PEAK 返回的不是某个固定历史点。当最新波峰还没被反向走够 N% 确认时,它返回的是当前浮动的跟踪值,这根 K 线读到的 PEAK 和下一根可能不同,这正是后文要专门处理的未来函数问题。
2.4 斐波那契回撤位在公式里的算式
有了浪点坐标,回撤位就是纯算术。设浪 1 起点价 S1、终点价 E1,浪 2 的常见支撑位就是这几个:
S1:=TROUGH(2,5,5); {浪1起点,倒数第5个谷} E1:=PEAK(1,5,4); {浪1终点,倒数第4个峰} FB382:=E1-(E1-S1)*0.382; FB500:=E1-(E1-S1)*0.5; FB618:=E1-(E1-S1)*0.618;M 的取值取决于图上要回溯到第几浪,这里的 5 和 4 只是示意。扩展位同理,E3:=S2+(E1-S1)*1.618是最常见的第 3 浪目标算式,S2 是浪 2 低点。到这一步,波浪理论里可量化的部分就抽干净了:折点靠 ZIG,浪序靠 PEAK/TROUGH 的 M 参数,比例靠四则运算,剩下的全是画线。
3. 通达信艾略特波浪划线指标公式源码骨架
3.1 主图叠加公式的参数声明与变量约定
在公式管理器里新建指标时,先选“主图叠加”,不要选副图,否则折线会和 K 线错开无法对照。公式名建议用拼音加英文混写,例如ELW_ZIG,方便在公式管理器 6.06 这类版本的列表里检索。参数区建议暴露三个:
N:ZIG 转向阈值,默认 5;KD:取价源,默认 3(收盘),可切到 1(最高)观察极端点;LWD:线宽,默认 2。
变量命名上有一条经验:所有中间变量用短名,因为通达信公式的变量表在公式较长时会变难维护。凡是画折线用的变量加ZZ前缀,画回撤位的加FB前缀,画标注的加TX前缀,日后改参数时一眼能找到。
3.2 DRAWLINE 与 POLYLINE 该怎么选
通达信能画线的函数不止一个,选错会让代码量翻好几倍:
| 函数 | 适用场景 | 优点 | 局限 |
|---|---|---|---|
ZIG(K,N)直接输出 | 折线本体 | 一行搞定 | 不能分段控制颜色 |
POLYLINE(COND,PRICE) | 在满足条件的点上连续成线 | 适合稀疏折点 | 条件为假的位置会断开 |
DRAWLINE(C1,P1,C2,P2,E) | 两点之间单段连线 | 能精确控制起止 | 每段都要写一条 |
DRAWTEXT/DRAWNUMBER | 浪号标注 | 支持文字和数字 | 不参与计算 |
如果只是把整段折线画出来,直接输出ZIG(3,N)最省事;如果想给推动浪和调整浪分色,就得用DRAWLINE一段一段连,代码会长很多,但视觉上最容易读出浪型。
3.3 一份可以直接编译的最小划浪源码
下面这份代码是骨架态,编译能过,能在主图画出折线和折点标记:
{艾略特波浪划线 - 主图最小版} N:=5; ZZ:=ZIG(3,N); {折线一阶差分,用来判断折点} DIR:=ZZ-REF(ZZ,1); TOP:=REF(DIR,1)>0 AND DIR<0; {由升转降,顶部折点} BOT:=REF(DIR,1)<0 AND DIR>0; {由降转升,底部折点} {折线本体} ZIG(3,N),COLOR00C8FF,LINETHICK2; {折点标注,上下偏移避免压住K线} DRAWTEXT(TOP, ZZ*1.01, 'H'),COLORYELLOW; DRAWTEXT(BOT, ZZ*0.99, 'L'),COLORGREEN;3.4 逐行逻辑与参数替换说明
ZIG(3,N)用收盘价算折线,折线在每一个已确认的转向点取真实价格,两点之间做线性插值,所以折线看起来是直的但采样点就是 K 线。DIR是折线的一阶差分,上升段为正、下降段为负。TOP判断前一根在升、当前在降,就是顶部折点,BOT反过来。
需要改的地方有三处:N换成 8 或 13 就切换浪级;ZZ*1.01和ZZ*0.99是文字偏移比例,K 线密集时改成 1.005 和 0.995 能少压线;COLOR00C8FF属于 BGR 顺序的色值,想换色直接改六位十六进制即可。
注意:这份最小版会随 ZIG 的重绘而重排,最后一到两个折点不稳定,只适合看历史形态,不能当作当期信号。
4. 通达信画浪:把 1-2-3-4-5 与 A-B-C 标到主图上
4.1 折点识别与浪序编号
折点识别在第 3 章已经完成,浪序编号要另外做。这里必须说清一件事:折点的自动识别是可靠的,浪序的自动判断不可靠。1-2-3-4-5 和 A-B-C 需要满足第 2.1 节的约束条件,通达信公式只能做近似过滤,绝大多数能搜到的“艾略特波浪源码”给出的都是折点序号,而不是真正的浪号。比较务实的做法是把折点按从右往左的顺序编号,再人工套浪型。
{折点序号:从最近折点往前累加} CTOP:=BARSLAST(TOP); CBOT:=BARSLAST(BOT); DRAWNUMBER(TOP, ZZ*1.02, CTOP+1),COLORYELLOW; DRAWNUMBER(BOT, ZZ*0.98, CBOT+1),COLORGREEN;BARSLAST(TOP)返回上次顶折点到当前的 K 线根数,加 1 就是间隔。DRAWNUMBER把数字写到折点旁边,比DRAWTEXT更适合编号,因为数字会随 K 线更新自动变化。
4.2 主图画浪与副图浪级同步
主图看结构,副图看力度,两图用同一个N才对齐。副图里常画折线的斜率或每段浪的涨跌幅:
{副图:每段浪的涨跌幅} SEG:=ZZ-REF(ZZ,1); RATE:=SEG/REF(ZZ,1)*100; STICKLINE(SEG>0, 0, RATE, 3, 0),COLORRED; STICKLINE(SEG<0, 0, RATE, 3, 0),COLORGREEN;SEG是折线的每根 K 线增量,RATE换成百分比。STICKLINE的第四个参数是柱宽,第五个参数填 0 表示实心。这样做出来的副图能直接看出哪一段浪最长,对照第 2.1 节的“浪 3 不能最短”规则,肉眼就能筛掉一批不成立的标注。
4.3 斐波那契回撤位与第 3、5 浪目标位
回撤位在主图上通常画成水平线,最省事的写法就是把它当普通输出变量:
H1:=PEAK(1,N,1); L1:=TROUGH(2,N,1); RNG:=H1-L1; FB382: H1-RNG*0.382, COLORGRAY, DOTLINE; FB500: H1-RNG*0.5, COLORGRAY, DOTLINE; FB618: H1-RNG*0.618, COLORGRAY, DOTLINE;每个输出变量本身就是一条水平线,加上DOTLINE变成虚线,不遮挡 K 线。扩展位同理,H1+(H1-L1)*1.618就是常见的第 3 浪或第 5 浪目标位,放在同一组里一起输出,主图会同时出现支撑和目标两个区域。
4.4 参数表与调参思路
| 参数 | 含义 | 常用取值 | 调大后的影响 |
|---|---|---|---|
| N | ZIG 转向阈值 | 3 / 5 / 8 / 13 / 20 | 折点变少,浪级变粗 |
| KD | 取价源 | 3 收盘 / 1 最高 / 2 最低 | 极值点位置偏移 |
| LWD | 折线线宽 | 1 到 3 | 只影响观感 |
| OFF | 标注偏移 | 0.005 到 0.02 | 文字离 K 线距离 |
| EXT | 扩展位系数 | 1.618 / 2.618 | 目标位高低 |
调参顺序建议固定:先定 N 定浪级,再调 KD 看极值点位置,最后调 OFF 让标注不压线。反过来调会白折腾,因为 N 一变,所有折点和回撤位都会重算。
5. 通达信艾略特波浪公式中未来函数造成的重绘与排错
5.1 ZIG、PEAK、TROUGH 为什么天然是未来函数
这几个函数要判断“转向”,就必须等到价格反向走够 N%,也就是需要未来的 K 线才能确认当前的折点。这意味着两件事:一是最后一两个折点会随新 K 线不断移动,今天看到的 3 浪高点,明天可能被推翻;二是回测时如果按折点位置进场,胜率会被严重高估,因为回测引擎读到的折点是“事后才知道”的。
{这段代码的 TOP 信号会重绘,因为依赖 ZIG} DIR:=ZZ-REF(ZZ,1); TOP:=REF(DIR,1)>0 AND DIR<0;TOP只用了 REF 引用过去数据,表面上没有未来函数,但ZZ本身来自 ZIG,所以 TOP 继承了重绘特性。判断一个画浪指标有没有未来函数,看它是否引用 ZIG、PEAK、TROUGH、REFX、BARSNEXT 中的任意一个就够了。
5.2 用 REF 与 BARSLAST 冻结已确认的历史浪点
想拿来做记录而不是实时信号,可以只保留已经“走够反向幅度”的折点。做法是给折点加一个距离约束,要求折点之后已经走过至少 M 根 K 线:
FROZEN:=TOP AND BARSLAST(TOP)>=10; DRAWICON(FROZEN, ZZ*1.03, 1);BARSLAST(TOP)>=10表示折点至少已经过去 10 根 K 线,此时折点被后续行情推翻的概率下降,但仍不归零。DRAWICON的第三个参数是图标编号,通达信有内置图标库,1 号通常是向上箭头,换成 2 就是向下箭头。用图标区分“已冻结”和“未确认”两类折点,图上信息量会明显提升。
5.3 tn6 与 txt 格式的导入导出与公式管理器
在公式管理器里保存的公式默认是内部格式,导出时常见两种:一种是 tn6 加密格式,用于在别的机器上导入;一种是纯文本 txt,便于改动和版本管理。tn6 导入时不会显示源码,只显示公式名和参数,需要重新编辑就导 txt。公式管理器 6.06 这类版本在“公式导入导出”菜单下同时提供两种选项,选错会得到一个打不开的文件。做版本管理时建议只存 txt,tn6 作为分发用,因为 tn6 一旦公式名重复会直接覆盖,不带提示。
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| 导入后公式为空 | 选成了 tn6 加密包 | 重新导出 txt 再导入 |
| 编译报错“参数错误” | PEAK/TROUGH 的 M 写了 0 或负数 | 改成从 1 开始的正整数 |
| 主图看不到折线 | 公式类型选成了副图 | 改成主图叠加 |
| 折线错位 | KD 取价源与看盘习惯不一致 | 统一改成 3 收盘 |
5.4 画线错位、不显示与编译报错的排查路径
排查顺序建议从下往上:先看公式类型和参数,再看变量名是否有重复,最后才怀疑函数用法。通达信公式的变量在同一公式内重名不会报错,而是后者覆盖前者,这类问题最难查,典型症状是画出来的线在某个位置突然跳到另一条水平线上。另一个高频问题是用DRAWLINE时起点条件在整段 K 线里从未满足,结果是整条线都不画,但编译不报错。遇到这种情况,先把起点条件单独输出成副图柱子,看它有没有在图上出现过。
6. 进阶:通达信多浪级嵌套的艾略特波浪划线复用
单层 ZIG 只能给一个浪级,真正的波浪结构是嵌套的,大浪里套中浪,中浪里套小浪。通达信里做嵌套的可行做法是并行跑三条不同 N 的折线,再用位置关系做交集判断:
Z5 := ZIG(3,5); Z13:= ZIG(3,13); Z20:= ZIG(3,20); BIG := Z20-REF(Z20,1); MID := Z13-REF(Z13,1); SMALL:= Z5-REF(Z5,1); {同向共振:三个浪级方向一致} RESO:= (BIG>0 AND MID>0 AND SMALL>0) OR (BIG<0 AND MID<0 AND SMALL<0); DRAWICON(RESO AND REF(RESO,1)=0, L*0.99, 1);Z20、Z13、Z5分别代表循环浪、中浪、小浪,RESO是三者方向一致的共振条件,REF(RESO,1)=0表示共振刚发生的那一根。这种写法能过滤掉大量单级别误报,代价是信号更少。
更实用的一步是把划线复用起来:把折点坐标抽成公共变量,主图、副图、回撤位三处共用同一套PEAK/TROUGH结果,改一次 N 全图同步刷新,避免出现主图用的是 5、回撤位用的是 8 这种自相矛盾的情况。做多周期分析时,还可以把同一份折点坐标用在不同公式里,日线取中浪、60 分钟取小浪,注意区分分钟级公式的 ZIG 阈值,通常要比日线低一档,例如日线用 8、60 分钟用 5,这样两级折点的数量级才匹配。
最后一个容易被忽略的细节:浪线除了看方向,也要看时间。把折点之间的 K 线根数用BARSLAST算出来,和价格比例一起看,第 3 浪常表现为价格幅度最大同时耗时适中,而第 5 浪常表现为幅度缩短但耗时拉长,这条时间维度的差异,比单纯看价格画线更能区分真假突破。
本文还有配套的精品资源,点击获取