小型趋势指标、中型趋势指标和主要趋势指标·进阶篇
📘

小型趋势指标、中型趋势指标和主要趋势指标·进阶篇

第 2/3 篇

「用彩色区段画中型趋势线」

中型趋势指标 GannMiddleTrend 的思路,是用指标缓冲区直接渲染图形,而不是像手工画线那样堆图形对象。屏幕上要同时标出最近顶部和底部的位置,外观和手动绘制的参考图一致,后续接 EA 时也能直接从缓冲区拿数据。 渲染层选了 DRAW_COLOR_SECTION 这种绘制类型,配合两个缓冲区:一个存数据,一个存颜色索引。这样上涨段和下跌段能用不同颜色区分,线宽设成 4,视觉上比细线更容易辨认趋势切换。 初始化阶段在 OnInit 里把缓冲区和指标参数绑定好。下面这段代码就是核心配置,逐行看: #property indicator_buffers 2 —— 声明共 2 个缓冲区(数据缓冲 + 颜色索引缓冲); #property indicator_plots 1 —— 屏幕上画 1 条图形序列; #property indicator_type1 DRAW_COLOR_SECTION —— 第 1 图用彩色区段方式绘制; #property indicator_color1 LightGreen, LightPink —— 颜色索引可取浅绿和浅粉两色; #property indicator_width1 4 —— 线宽为 4 像素; SetIndexBuffer(0, DataBuffer, INDICATOR_DATA) —— 0 号缓冲绑定数据缓冲; SetIndexBuffer(1, ColorBuffer, INDICATOR_COLOR_INDEX) —— 1 号缓冲绑定颜色索引; IndicatorSetInteger(INDICATOR_DIGITS, Digits()) —— 显示小数位跟随品种精度; IndicatorSetString(INDICATOR_SHORTNAME, "GannMiddleTrend") —— 指标简称; PlotIndexSetString(0, PLOT_LABEL, "GannMiddleTrend") —— 数据序列标签名; PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0) —— 0.0 视为空值不渲染。 它和小型趋势指标 GannMicroTrend 结构近似,差别就在于中型版直接写缓冲区、不依赖图形对象,所以省掉了对象管理的麻烦。回看渲染结果,自动画出的区段和手工画的参考图基本重合,说明缓冲区写法能稳定还原趋势边界。外汇与贵金属波动剧烈,这类趋势线仅作结构参考,实际信号概率需结合多周期验证。

MQL5 / C++
class="macro">#class="kw">property indicator_buffers    class="num">2
class="macro">#class="kw">property indicator_plots      class="num">1
class="macro">#class="kw">property indicator_type1      DRAW_COLOR_SECTION
class="macro">#class="kw">property indicator_color1     LightGreen, LightPink
class="macro">#class="kw">property indicator_width1     class="num">4
SetIndexBuffer(class="num">0, DataBuffer, INDICATOR_DATA);
SetIndexBuffer(class="num">1, ColorBuffer, INDICATOR_COLOR_INDEX);
IndicatorSetInteger(INDICATOR_DIGITS, Digits( ));
IndicatorSetString(INDICATOR_SHORTNAME, "GannMiddleTrend");
PlotIndexSetString(class="num">0, PLOT_LABEL, "GannMiddleTrend");
PlotIndexSetDouble(class="num">0, PLOT_EMPTY_VALUE, class="num">0.0);

三柱走势怎么画出主趋势线

主趋势在图形上由连续三根柱的走势构成,也就是所谓的三柱走势,外形需与原文图 5 一致。构建规则先看方向:向上时,若下一根 K 线最高价高于前三个柱走势的最高价、且最低价也高于前三个柱走势的最低价,就把下一根最高价和前三个柱走势最高价连成一条上升主趋势线;向下则对称,连最低价。 方向反转有严格判定。上升走势中,若下一根最高价不再高于前三个柱走势最高价、同时最低价跌破前三个柱走势最低价,方向转向下;下降反之。这里注意,主趋势上升反向的唯一信号是主要顶部价位被交叉,下降反向的唯一信号是主要底部价位交叉,其他都不是确认依据。 内侧柱与外侧柱不参与简单连线。若下一根最低价大于前三个柱走势最低价、且最高价小于前三个柱走势最高价,它是内侧柱,跳过构建;若最高价突破前柱最高、最低价跌破前柱最低,则是外侧柱,按自身方向接续区段。 纠正和反转要分清。主趋势上升时,市场走出向下摆动却没冲掉上一个底部摆动,只是纠正;下降时向上摆动未冲掉上一个顶部摆动,也仅是纠正。外汇与贵金属波动剧烈,用三柱规则肉眼或代码验证时须意识到假突破高风险。

◍ 主要趋势的视觉化落地

GannMainTrend 指标负责把图表上的主要趋势画出来,同时把最近的顶部与底部坐标直接标在屏幕上,外观对应原文图 5 的式样。它在外部参数和内部结构与中型趋势指标 GannMiddleTrend 基本一致,所以实现上不需要重复造轮子,直接复用框架即可。 随文提供的 GannMainTrend.mq5 文件里就是完整指标,加载到 MT5 后效果可对照原文图 6 验证。外汇与贵金属波动剧烈、杠杆高风险,指标只描述趋势状态,不构成方向承诺。 想自己核对,可在 MT5 导航器里把该指标拖到 XAUUSD 的 H1 图,观察最近顶底标记是否随收盘价更新——若标记滞后一根 K 线,说明输入缓冲按收盘价计算,属正常。

「用摆动结构搭一套简易进场系统」

James Hyerczyk 提出的摆动交易框架,核心是先靠主要趋势图圈出一段长期单向走势,再切到中型趋势图等市场「停滞」——也就是价格近似水平来回,不再创新低或新高。 具体落地:长期下降段走完、进入横盘后,等价格突破中型趋势图上最近一个摆动顶点的上方,挂买入;反之跌破最近摆动谷底下方挂卖出。初始保护性止损放在最近摆动底(顶)的外侧一点点,建仓后止损跟着新生成的摆动往下(上)挪。 原文给的 EURUSD 实例很有参照性:主要顶 1.36913 到主要底 1.18758,长期下降摆动跨度 1815.5 点;之后停滞段从 1.24664 到 1.21495,仅波动 316.9 点。价格突破中型顶后一路向上,若按系统做多、止损随摆动移动,该段潜在获利约 1.31186 - 1.23966 = 722.0 点。 外汇与贵金属属高杠杆品种,这套规则只描述历史区段的概率性结构,实盘须自行在 MT5 用摆动指标复画一遍,确认停滞段宽度与突破有效性后再谈仓位。

向导里拼装信号与追踪模块

把甘氏摆动逻辑塞进 MT5 向导,核心是把信号生成和止损追踪拆成两个独立 mqh 模块,再加一个可选的金字塔加仓模块。信号模块负责识别主趋势 A-B 下降段(持续 dT 根 K 线、幅度 dP 点),等中型 B-C、C-D 横盘摆动不破阈值后,价格突破 C 顶才发买入信号;卖出则是镜像处理。 信号类开头必须引 ExpertSignal.mqh,并用注释块向 MetaEditor 声明 Type=Signal 与默认外部参数。下面这段预处理和向导描述就是模块注册的关键,缺一行向导里就看不到你的信号名。 代码里 MinMainSwingContinuance=5、MinMainSwingSize=300.0 表示主摆动至少 5 根柱、300 点才认趋势;MinMiddleSwingContinuance=3、MaxMiddleSwingSize=200.0 限制中型摆动最长 3 根柱、不超 200 点,否则视为非停滞市。CheckOpenLong 里先抓主/中摆动,比 A/B、C/D 价格位,最后验突破才填止损返 true。 追踪模块另起一个 mqh,引 ExpertTrailing.mqh 且 Type=Trailing。CheckTrailingStopLong 调 GetMiddleSwing 算新止损价,仅当比当前止损更低(买仓)才写回 _sl 返 true。外汇与贵金属波动跳空频繁,这类基于摆动的追踪在重大数据周可能连触止损,实盘前请用策略测试器跑至少两年 tick 数据。

MQL5 / C++
class="macro">#include <Expert\ExpertSignal.mqh>
class=class="str">"cmt">// wizard description start
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Description of the class                                        |
class=class="str">"cmt">//| Title=Signal based on swings on charts                          |
class=class="str">"cmt">//| of the middle and main trends according to Gann(iCustom)       |
class=class="str">"cmt">//| Type=Signal                                                     |
class=class="str">"cmt">//| Name=TGannBreakSignal                                           |
class=class="str">"cmt">//| Class=TGannBreakSignal                                          |
class=class="str">"cmt">//| Page=                                                           |
class=class="str">"cmt">//| Parameter=MinMainSwingContinuance,class="type">int,class="num">5                         |
class=class="str">"cmt">//| Parameter=MinMainSwingSize,class="type">class="kw">double,class="num">300.0                         |
class=class="str">"cmt">//| Parameter=MinMiddleSwingContinuance,class="type">int,class="num">3                       |
class=class="str">"cmt">//| Parameter=MaxMiddleSwingSize,class="type">class="kw">double,class="num">200.0                       

◍ 正文

<span class="comment">//Parameter=OpenPriceSpace,double,5.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span class="comment">//Parameter=StopLossSpace,double,5.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>

<span class="comment">//+------------------------------------------------------------------+</span> <span class="comment">// wizard description end</span> <span class="keyword">class</span> TGannBreakSignal : <span class="keyword">public</span> CExpertSignal &nbsp;&nbsp;{ <span class="keyword">private</span>: &nbsp;&nbsp; <span class="keyword">int</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; min_main_swing_continuance;&nbsp;&nbsp;&nbsp; <span class="comment">// minimum swing duration time of the main tren</span> &nbsp;&nbsp; <span class="keyword">double</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min_main_swing_size_points;&nbsp;&nbsp;&nbsp; <span class="comment">// minimum swing amplitude on the chart of the main trend</span> &nbsp;&nbsp; <span class="keyword">int</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; min_middle_swing_continuance;&nbsp; <span class="comm

常见问题

用三柱走势判定方向后,对同向连续K线区段填充颜色,上升段用暖色、下降段用冷色,肉眼即可区分中型趋势。
取最近三柱的高低点连线,若高点抬高低点也抬高倾向多头主趋势,反之为空头,依此延伸画线即可。
小布可在对应品种页直接生成彩色区段与三柱主趋势线,省去手动绘制,打开即可看视觉化结果。
以摆动高低点突破作触发,配合中型趋势方向过滤逆势信号,贵金属外汇波动大需严控仓位。
信号周期与追踪止损幅度要匹配品种波动,过窄易被洗,过宽回撤难控,建议先历史回看再上实盘。