三重通道趋势共振指标
主图显示布林带通道+长周期趋势线,副图三条动量曲线交叉判断多空共振
MT5 真机运行截图 · 服务器把编译好的 EX5 挂到黄金 H1 图表上截的,你装上去看到的就是这个样子
#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);
}作品说明
从图表识别到以下要素:
主图部分:
- 一条红色粗线,向下倾斜的长周期趋势均线(目测200周期EMA)
- 三条虚线构成的通道,应该是布林带(上轨、中轨、下轨)
- 水平支撑/阻力线
副图部分:
- 三条不同颜色的波动曲线:黄色(波动最大,短周期)、红色(中等)、白色虚线(最平滑,长周期)
- 看形态像是对价格应用不同周期EMA后归一化显示的震荡器
我将复刻为:主图显示布林带通道+200周期EMA,副图显示三条不同周期的价格动量平滑线。
使用说明
安装方法:
- 将代码保存为
TripleChannelTrend.mq5 - 放入 MT5 数据文件夹的
MQL5\Indicators目录 - 重启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.
评论
还没有人评论,来抢个沙发。