🌊
MQL5 中艾略特波浪的自动分析:从 ZigZag 到波浪标记
艾略特波浪ZigZag自动分析MQL5形态识别
艾略特波浪理论回顾
艾略特认为市场价格受群体心理驱动,呈推动波(5 浪)与调整波(3 或 5 浪)循环。推动波有铁律:第二浪终点不破第一浪起点、第三浪不是最短、第四浪不进入第一浪价格区间。
TZigzag:先把价格变成拐点序列
自动分析的第一步是用 ZigZag 把连续价格压缩成有意义的转折点(峰值/谷值)。ZigZag() 计算拐点,FillZigzagArray() 填充数组,FindPoints() 扫描并识别候选极值点。
class TZigzag
{
public:
int Zigzag(double &arr[], double depth, double dev, double back);
void FillZigzagArray(double &src[], double &zz[]);
private:
bool FindPoints(double &src[], int &idx[]);
void NotStartedAndNotFinishedWaves(...);
};
TNode:递归表示波浪层级
TNode 与 TNodeInfo 描述每个波浪节点的层级(大浪/子浪)、方向(推动/调整)与极值。通过树的递归遍历,可以按规则逐层校验波浪结构是否自洽。
- TNode:单个波浪节点,含起点/终点价格与子浪引用。
- TLabel:给节点打“1/2/3/4/5/A/B/C”等标记。
- NotStartedAndNotFinishedWaves:识别未闭合的半成品波浪,避免误标。
用规则过滤非法波浪
第三浪不是最短、第二浪不破第一浪起点等规则,直接作为布尔校验写进递归逻辑。凡不满足规则的候选结构直接丢弃,只保留符合经典约束的波浪划分。
⚠ 自动波浪≠交易圣杯
波浪划分本身存在多解性,自动标记只能提供“符合规则的一种解”。务必把它作为形态背景,而非独立入场信号。
把波浪输出到图表与面板
标记结果通过 TLabel 画在图表上,并可汇总到多行文本显示组件(MultiRowText),让交易者在多品种扫描时一眼看到当前波浪位置。
小结
自动波浪分析 = ZigZag 拐点 + 递归节点 + 规则校验。它把主观形态变成可量化、可回测的对象,是形态识别类策略的可靠底座。
常见问题
它只给出“符合经典规则的一种划分”,波浪本身有多解性。应作为形态背景,而非独立入场信号。
ZigZag 把连续价格压缩成有意义的拐点序列,是后续递归校验推动波/调整波规则的数据基础。
是。第二浪不破起点、第三浪非最短等铁律要写成布尔校验,递归遍历时丢弃非法结构。