首页 / 交易学院 / 小布知识库 / MQL5 通道绘制:用三个极值自动画平行通道
MQL5 通道绘制:用三个极值自动画平行通道
🧩

MQL5 通道绘制:用三个极值自动画平行通道

MQL5 编程 难度 · 进阶 2013 12 分钟阅读
通道图形对象指标

一、通道绘制工具的动机

通道是仅次于均线的流行分析工具,能直观表达趋势宽度与支撑阻力。本文不做“自动 ZigZag 连续摆动检测”,而是实现一套手动设定三个极值、由标准库类自动绘制平行通道的工具——你用左价格标签(OBJ_ARROW_LEFT_PRICE)在图上点三个极值,指标算出基准线和平行线,画出通道。

二、三个极值如何设定

极值用 MT5 的图形对象“左价格标签”放置(颜色须匹配参数 ExtremumPointColor,默认 Yellow)。指标每秒扫描图表,用 ObjectsTotal(..., OBJ_ARROW_LEFT_PRICE) 获取总数并校验颜色,加入列表;必须恰好 3 个点才保存并允许绘通道。移动或删除标签时由 CheakExtremumMoving 检测并更新,不足 3 个则清空不绘。

三、用相对柱编号确定斜率与宽度

设 A、B 为前两个极值定基准线,C 为第三个极值定平行线。为避免休市日(周五→周一)时间断点导致坐标错乱,改用相对柱编号(Bars() 取两极值间的柱数)而非绝对时间:

double B2 = Bars(symbol, tf, point_left, point_right);  // A->B 柱数
double B3 = Bars(symbol, tf, point_left, point_middle); // A->C 柱数
double koeff_A = (price_right - price_left) / B2;       // 基准线斜率
// 第三个极值 C 校准平行线价格
double P3_AB = price_left + B3*koeff_A;                 // 基准线在 C 处的价
if(P3_AB > price_middle) // 2MAX_1MIN 情形
  {
   left_prices[UP]  = price_left;
   right_prices[UP] = price_right;
   left_prices[DN]  = price_middle - B3*koeff_A;
   right_prices[DN] = left_prices[DN] + (price_right - price_left);
  }

四、图形对象绘制

通道边界用 TChannelBorderObject 继承 CChartObjectTrend(即 OBJ_TREND 趋势线)绘制上下两条平行线,中线与百分比区同理。取边界价格用 ObjectGetValueByTime,而非手工设坐标。整个通道类 TSlideChannelObject 继承 CList,可管理最多 9 条线(上下边界、中线、若干百分比区)。

五、坑

⚠ 手动通道的脆弱点
1) 时间断点:绝对时间跨休市会致通道错位,本文用相对柱编号 Bars() 解决。2) 极值移动/消失:标签被拖动或删掉要用 CheakExtremumMoving 检测并更新列表,不足 3 个立即清绘。3) 不同周期:ExtremumHandSet 与 SlideChannel 通过 PrefixString+Symbol()+周期存全局变量,可设不同周期同步(H1 设极值、M5 看通道)。4) CList 当前节点指针随 GetFirstNode/GetNextNode 移动,使用前要注意。

六、用三个极值点定通道

通道(如标准通道线、回归通道)常由三个关键点确定:两个相邻极值定方向,第三个极值定宽度。算法上先找最近的一段高低点,用前两点算斜率,再按第三点偏移出上下轨。

三极值法比「最近 N 根高低点」更稳,因为它显式建模了「拐点」,画出的通道贴合肉眼看到的震荡带,而不是被极端刺破的毛刺带偏。

七、通道突破信号

价格触及上轨且方向偏空可视为回调/反转信号,触及下轨偏多同理。但通道突破也常是趋势加速,所以要结合趋势过滤:顺势突破追、逆势触轨反。

✦ 突破有两义
通道上轨被碰,可能是反转也可能是趋势加速。用趋势方向过滤:顺势突破追、逆势触轨反,别一刀切。

八、历史通道与重绘

通道若用「未来数据」去拟合(如用还没走出来的极值点),会出现重绘——回测里看着完美、实盘一碰就破。正确做法是用「截至当前」的极值点画,接受它随新极值动态移动。

实盘里通道是活的:新极值出现就重画,这是正常的,但要保证你的信号逻辑基于「已确定」的轨,而不是回测时偷偷用了未来轨。 配合「通道宽度」本身做过滤也很有效:窄通道里触轨反转概率高,宽通道里往往是趋势中继,用宽度区分两种语义比单看触轨更稳。

九、通道的统计学变体:标准差通道

除极值点通道,另一种常见做法是「中轨加减 N 倍标准差」(类似布林但用于任意周期),用统计而非几何定宽度,对波动变化更自适应:波动大通道自动变宽,平静时自动收窄。

两种通道各有适用:极值点通道贴合肉眼拐点、适合主观交易;标准差通道随波动自适应、适合量化过滤。理解差异后按策略选,而非二选一。

十、小结

✦ 小结
通道用三个极值点定方向算斜率、第三点定宽度,比 N 根高低点更贴合震荡带。突破有两义(反转或加速),用趋势方向过滤。坑在重绘:必须用截至当前的极值点画,不能用未来数据拟合,否则回测完美实盘崩。

常见问题

因为金融图表有休市(如周五收盘到周一开盘之间没柱子),用绝对时间差算斜率会混入“空白时间”,通道错位。Bars() 返回两极值之间的实际柱数,只数真实 K 线,避开了时间断点,坐标连续无误。
ZigZag 自动找连续摆动极值并连线,但极值会随新 K 线出现而“重绘”(过去的拐点可能消失或移位),回测看起来完美、实盘却变。本文是手动点三个极值,通道固定不变、不重绘,适合做半自动分析或人工标注,代价是要你手动放点。
指标用 Prefix + Symbol() + 周期 作键把极值存到全局变量(如 MainChannel_EURUSD_5_DTime_Extr1)。你可以在 H1 图上放极值标签,在 M5 图上让 SlideChannel 读同一套全局变量画出同一条通道,实现“大周期定通道、小周期看价格”的用法。