MT5指标编译通过 · EX5 13KB 自动发布 6 0

三重通道趋势共振指标

liulianmc·1 天前发布

主图显示布林带通道+长周期趋势线,副图三条动量曲线交叉判断多空共振

三重通道趋势共振指标

MT5 真机运行截图 · 服务器把编译好的 EX5 挂到黄金 H1 图表上截的,你装上去看到的就是这个样子

TripleChannelTrend.mq5221 行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
#property copyright   "XAUOF 指标工坊"
#property version     "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_plots   7

// 主图:布林带上中下 + 趋势EMA
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrGray
#property indicator_width1  1
#property indicator_style1  STYLE_DOT
#property indicator_label1  "BB上轨"

#property indicator_type2   DRAW_LINE
#property indicator_color2  clrGray
#property indicator_width2  1
#property indicator_style2  STYLE_DOT
#property indicator_label2  "BB中轨"

#property indicator_type3   DRAW_LINE
#property indicator_color3  clrGray
#property indicator_width3  1
#property indicator_style3  STYLE_DOT
#property indicator_label3  "BB下轨"

#property indicator_type4   DRAW_LINE
#property indicator_color4  clrRed
#property indicator_width4  2
#property indicator_label4  "趋势EMA"

// 副图:三条动量曲线
#property indicator_separate_window
#property indicator_minimum -100
#property indicator_maximum 100
#property indicator_level1  0

#property indicator_type5   DRAW_LINE
#property indicator_color5  clrYellow
#property indicator_width5  2
#property indicator_label5  "快速动量"

#property indicator_type6   DRAW_LINE
#property indicator_color6  clrRed
#property indicator_width6  2
#property indicator_label6  "中速动量"

#property indicator_type7   DRAW_LINE
#property indicator_color7  clrWhite
#property indicator_width7  1
#property indicator_style7  STYLE_DOT
#property indicator_label7  "慢速动量"

//--- 输入参数
input int    BB周期        = 20;      // 布林带周期,推荐20
input double BB倍数        = 2.0;     // 布林带标准差倍数,推荐2.0
input int    趋势EMA周期   = 200;     // 长周期趋势线,推荐200
input int    快速动量周期  = 5;       // 副图快速线周期,推荐5
input int    中速动量周期  = 14;      // 副图中速线周期,推荐14
input int    慢速动量周期  = 28;      // 副图慢速线周期,推荐28

//--- 指标缓冲区
double BB_Upper[];    // 布林带上轨
double BB_Middle[];   // 布林带中轨
double BB_Lower[];    // 布林带下轨
double Trend_EMA[];   // 趋势均线
double Fast_Mom[];    // 快速动量
double Mid_Mom[];     // 中速动量
double Slow_Mom[];    // 慢速动量

//--- 指标句柄
int bbHandle;
int trendHandle;
int fastHandle;
int midHandle;
int slowHandle;

//+------------------------------------------------------------------+
//| 初始化函数                                                        |
//+------------------------------------------------------------------+
int OnInit()
{
   // 绑定缓冲区
   SetIndexBuffer(0, BB_Upper, INDICATOR_DATA);
   SetIndexBuffer(1, BB_Middle, INDICATOR_DATA);
   SetIndexBuffer(2, BB_Lower, INDICATOR_DATA);
   SetIndexBuffer(3, Trend_EMA, INDICATOR_DATA);
   SetIndexBuffer(4, Fast_Mom, INDICATOR_DATA);
   SetIndexBuffer(5, Mid_Mom, INDICATOR_DATA);
   SetIndexBuffer(6, Slow_Mom, INDICATOR_DATA);
   
   // 创建布林带句柄
   bbHandle = iBands(_Symbol, PERIOD_CURRENT, BB周期, 0, BB倍数, PRICE_CLOSE);
   if(bbHandle == INVALID_HANDLE)
   {
      Print("布林带句柄创建失败");
      return INIT_FAILED;
   }
   
   // 创建趋势EMA句柄
   trendHandle = iMA(_Symbol, PERIOD_CURRENT, 趋势EMA周期, 0, MODE_EMA, PRICE_CLOSE);
   if(trendHandle == INVALID_HANDLE)
   {
      Print("趋势EMA句柄创建失败");
      return INIT_FAILED;
   }
   
   // 创建三条动量线的EMA句柄(对收盘价的EMA)
   fastHandle = iMA(_Symbol, PERIOD_CURRENT, 快速动量周期, 0, MODE_EMA, PRICE_CLOSE);
   if(fastHandle == INVALID_HANDLE)
   {
      Print("快速动量句柄创建失败");
      return INIT_FAILED;
   }
   
   midHandle = iMA(_Symbol, PERIOD_CURRENT, 中速动量周期, 0, MODE_EMA, PRICE_CLOSE);
   if(midHandle == INVALID_HANDLE)
   {
      Print("中速动量句柄创建失败");
      return INIT_FAILED;
   }
   
   slowHandle = iMA(_Symbol, PERIOD_CURRENT, 慢速动量周期, 0, MODE_EMA, PRICE_CLOSE);
   if(slowHandle == INVALID_HANDLE)
   {
      Print("慢速动量句柄创建失败");
      return INIT_FAILED;
   }
   
   // 设置指标精度
   IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
   
   return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
//| 计算函数                                                          |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   // 检查K线数量
   if(rates_total < 趋势EMA周期) return 0;
   
   // 等待指标计算完成
   if(BarsCalculated(bbHandle) < rates_total) return 0;
   if(BarsCalculated(trendHandle) < rates_total) return 0;
   if(BarsCalculated(fastHandle) < rates_total) return 0;
   if(BarsCalculated(midHandle) < rates_total) return 0;
   if(BarsCalculated(slowHandle) < rates_total) return 0;
   
   // 复制布林带数据(上轨=缓冲区1,中轨=缓冲区0,下轨=缓冲区2)
   if(CopyBuffer(bbHandle, 1, 0, rates_total, BB_Upper) <= 0) return 0;
   if(CopyBuffer(bbHandle, 0, 0, rates_total, BB_Middle) <= 0) return 0;
   if(CopyBuffer(bbHandle, 2, 0, rates_total, BB_Lower) <= 0) return 0;
   
   // 复制趋势EMA数据
   if(CopyBuffer(trendHandle, 0, 0, rates_total, Trend_EMA) <= 0) return 0;
   
   // 复制三条均线数据用于副图
   double fastMA[], midMA[], slowMA[];
   ArraySetAsSeries(fastMA, false);
   ArraySetAsSeries(midMA, false);
   ArraySetAsSeries(slowMA, false);
   
   if(CopyBuffer(fastHandle, 0, 0, rates_total, fastMA) <= 0) return 0;
   if(CopyBuffer(midHandle, 0, 0, rates_total, midMA) <= 0) return 0;
   if(CopyBuffer(slowHandle, 0, 0, rates_total, slowMA) <= 0) return 0;
   
   // 计算副图动量:将三条均线归一化为震荡器(-100到+100)
   // 使用价格与慢速均线的偏离百分比
   int start = (prev_calculated > 0) ? prev_calculated - 1 : 慢速动量周期;
   
   for(int i = start; i < rates_total && !IsStopped(); i++)
   {
      if(i < 慢速动量周期) continue;
      
      // 避免除以0
      if(slowMA[i] == 0) 
      {
         Fast_Mom[i] = 0;
         Mid_Mom[i] = 0;
         Slow_Mom[i] = 0;
         continue;
      }
      
      // 计算各均线相对慢速均线的偏离度(百分比 * 100)
      Fast_Mom[i] = ((fastMA[i] - slowMA[i]) / slowMA[i]) * 10000;  
      Mid_Mom[i] = ((midMA[i] - slowMA[i]) / slowMA[i]) * 10000;   
      Slow_Mom[i] = 0;  // 慢速线作为基准线,始终为0
      
      // 限制范围在 -100 到 +100
      if(Fast_Mom[i] > 100) Fast_Mom[i] = 100;
      if(Fast_Mom[i] < -100) Fast_Mom[i] = -100;
      if(Mid_Mom[i] > 100) Mid_Mom[i] = 100;
      if(Mid_Mom[i] < -100) Mid_Mom[i] = -100;
   }
   
   return rates_total;
}

//+------------------------------------------------------------------+
//| 清理函数                                                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // 释放指标句柄
   if(bbHandle != INVALID_HANDLE) IndicatorRelease(bbHandle);
   if(trendHandle != INVALID_HANDLE) IndicatorRelease(trendHandle);
   if(fastHandle != INVALID_HANDLE) IndicatorRelease(fastHandle);
   if(midHandle != INVALID_HANDLE) IndicatorRelease(midHandle);
   if(slowHandle != INVALID_HANDLE) IndicatorRelease(slowHandle);
}
MT5 运行截图 · 完整视图带价格轴和时间轴的整张图表(约 150 根 H1 K 线),上面的封面是它最近 80 根 K 线的放大视图
三重通道趋势共振指标 在 MT5 上的真实截图

作品说明

从图表识别到以下要素:

主图部分:

  • 一条红色粗线,向下倾斜的长周期趋势均线(目测200周期EMA)
  • 三条虚线构成的通道,应该是布林带(上轨、中轨、下轨)
  • 水平支撑/阻力线

副图部分:

  • 三条不同颜色的波动曲线:黄色(波动最大,短周期)、红色(中等)、白色虚线(最平滑,长周期)
  • 看形态像是对价格应用不同周期EMA后归一化显示的震荡器

我将复刻为:主图显示布林带通道+200周期EMA,副图显示三条不同周期的价格动量平滑线。

使用说明

安装方法:

  1. 将代码保存为 TripleChannelTrend.mq5
  2. 放入 MT5 数据文件夹的 MQL5\Indicators 目录
  3. 重启MT5或在导航器中刷新,拖到图表即可

参数设置:

  • 布林带周期:默认20,控制通道宽度的灵敏度,周期越小通道越贴近价格
  • 布林带倍数:默认2.0,控制通道宽度,越大通道越宽
  • 趋势EMA周期:默认200,红色趋势线,价格在上方为多头,下方为空头
  • 快/中/慢动量周期:默认5/14/28,副图三条曲线的灵敏度,数字越小反应越快

信号解读:

  • 主图:价格突破布林带上轨为强势,跌破下轨为弱势;价格与200EMA的位置关系判断大趋势
  • 副图:黄线(快速)上穿红线(中速)且都在零轴上方为多头共振;黄线下穿红线且都在零轴下方为空头共振
  • 三线纠缠在零轴附近代表震荡,等待突破方向

注意事项:

  • 副图数值为相对偏离度,不是传统RSI或MACD,数值±100为极限
  • 大周期(H4、日线)效果更稳定,小周期需配合其他确认信号
  • 布林带收窄后往往伴随大行情突破,需提前关注

AI 解读根据源码逐行分析写成,供参考,以实际运行为准

这是什么

这是一个双窗口指标,主图用布林带通道和 200 周期趋势线判断价格位置和大方向,副图用三条不同速度的动量曲线判断多空力量是否共振。适合需要同时观察通道突破和动量确认的交易者,帮你在趋势启动时抓住方向、在震荡时避免假突破。

逻辑原理

主图部分:画出标准布林带(上轨、中轨、下轨)和一条长周期 EMA。布林带用收盘价的移动平均 ± 标准差倍数计算,通道宽窄反映波动大小;200 周期 EMA 是趋势基准线,价格在上方为多头环境,下方为空头环境。

副图部分:创建三条不同周期的 EMA(快 5、中 14、慢 28),然后把快速和中速 EMA 相对于慢速 EMA 的偏离百分比放大一万倍,限制在 -100 到 +100 之间显示。慢速线作为零轴基准(始终为 0),快线和中线围绕它上下波动。当快线上穿中线且都在零轴上方,说明短期动量强于中期、且都比长期快,形成多头共振;反之下穿且都在零轴下方为空头共振。三线纠缠在零轴附近代表多空僵持,等方向。

参数说明

  • BB周期(20):布林带的移动平均周期。数字越小通道越贴近价格、反应越快,但也更容易被噪音触发;越大越平滑,适合大周期。
  • BB倍数(2.0):布林带上下轨与中轨的标准差倍数。越大通道越宽、触碰上下轨的次数越少,2.0 是经典设置,涵盖约 95% 的价格波动。
  • 趋势EMA周期(200):主图红色趋势线的周期。200 是日线级别常用的牛熊分界线,可根据交易周期调整(如 H4 用 100、H1 用 50)。
  • 快速动量周期(5):副图黄色曲线的 EMA 周期,反应最快,适合捕捉短期冲动。
  • 中速动量周期(14):副图红色曲线的 EMA 周期,介于快慢之间,用于确认快线信号。
  • 慢速动量周期(28):副图白色虚线的 EMA 周期,作为零轴基准,代表长期动量方向。

怎么用

将 .mq5 文件放入 MT5 数据文件夹的 MQL5\Indicators 目录,重启 MT5 或在导航器里刷新。从导航器拖到任意品种任意周期的图表上,会同时显示主图的布林带 + 趋势线和副图的三条动量曲线。

看信号:主图上,价格突破布林带上轨且在 200 EMA 上方,趋势偏多;副图黄线上穿红线且都在零轴上方,确认多头动量共振,可考虑做多。反之价格跌破布林带下轨、在 200 EMA 下方,副图黄线下穿红线且都在零轴下方,确认空头共振。布林带收窄(上下轨靠拢)时注意,往往预示即将突破放量。

适用场景

适合有明显趋势的品种,如外汇主要货币对(EURUSD、GBPUSD)、黄金(XAUUSD)、原油、主要股指。推荐在 H4 及以上周期使用,日线和周线效果更稳定,因为大周期的均线和布林带更能过滤噪音。

小周期(M5、M15)可以用,但快线会非常敏感,交叉频繁,需要配合其他确认(如价格行为、关键支撑阻力)。不适合长期横盘、波动极小的冷门品种,因为布林带会贴得很紧、动量曲线会反复缠绕,信号不清晰。

风险提示

均线滞后:所有均线和布林带都是基于历史价格计算的,行情转折时会晚于实际拐点,快速反转可能来不及反应。

假突破:价格短暂突破布林带上下轨后又回到通道内的情况很常见,尤其在震荡行情,单靠主图突破容易被扫损,需要副图动量共振确认。

副图数值不是传统指标:这里的 -100 到 +100 是相对偏离度,不是 RSI 或 MACD,不要用传统超买超卖逻辑(如"数值到 80 就该反转")去理解。慢速线始终为 0,只看快中两线的相对位置和交叉。

通道收窄陷阱:布林带收窄确实常预示突破,但方向不确定,需等实际突破并配合动量确认,不要提前猜方向。

无报警功能:代码里没有弹窗或推送,需要人工盯盘或自己加报警逻辑。

常见问题

这个指标会重绘吗
不会。代码用的是标准的布林带和 EMA,都是基于已确定的历史 K 线计算,不会回头修改之前的数值。
副图的数值是什么意思,和 RSI 有什么区别
副图显示的是快速和中速 EMA 相对于慢速 EMA 的偏离百分比,不是传统的 RSI 或 MACD。数值 ±100 是相对偏离的极限范围,零轴代表与慢速线一致。主要看快中两线的交叉和相对位置,不要用超买超卖逻辑。
参数默认值适合什么周期
默认参数(布林带 20、趋势 EMA 200、动量 5/14/28)适合 H4 和日线级别。小周期如 M15 可以把趋势 EMA 改成 50 或 100,大周期如周线可以保持默认或把布林带周期加到 30。
可以用在黄金以外的品种吗
可以。代码没有品种限制,外汇、股指、原油、加密货币都能用。只要品种有足够的波动和趋势性,效果都不错。冷门品种或长期横盘的标的信号会比较混乱。
布林带收窄后一定会大涨或大跌吗
不一定。收窄说明波动率降低,通常预示即将突破,但方向不确定。需要等价格实际突破通道并配合副图动量共振确认,不要提前猜方向或重仓赌单边。

Triple Channel Momentum Resonance Indicator MT5

A dual-panel MT5 indicator combining Bollinger Bands with a 200-period EMA on the main chart, and three momentum oscillators (fast/mid/slow) in a separate window. Detects trend direction and momentum alignment for breakout and reversal signals.

Source code is shown above. Compiled EX5 files are available to VIP members.

评论

后可以留言,比如反馈用着怎么样、想加什么功能。

还没有人评论,来抢个沙发。