三均线系统(EMA20/49/89)
三条 EMA 均线,白色实线 + 两条虚线,周期颜色粗细全可调
MT5 真机运行截图 · 服务器把编译好的 EX5 挂到黄金 H1 图表上截的,你装上去看到的就是这个样子
#property copyright "XAUOF 指标工坊"
#property version "1.00"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots 3
// 第一条线 EMA20 - 默认白色实线
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrWhite
#property indicator_width1 2
#property indicator_label1 "EMA20"
// 第二条线 EMA49 - 默认绿色虚线
#property indicator_type2 DRAW_LINE
#property indicator_color2 clrLime
#property indicator_width2 1
#property indicator_style2 STYLE_DOT
#property indicator_label2 "EMA49"
// 第三条线 EMA89 - 默认红色虚线
#property indicator_type3 DRAW_LINE
#property indicator_color3 clrRed
#property indicator_width3 1
#property indicator_style3 STYLE_DOT
#property indicator_label3 "EMA89"
//--- 可调参数
input int Period1 = 20; // EMA20 周期
input int Period2 = 49; // EMA49 周期
input int Period3 = 89; // EMA89 周期
input color Color1 = clrWhite; // EMA20 颜色
input color Color2 = clrLime; // EMA49 颜色
input color Color3 = clrRed; // EMA89 颜色
input int Width1 = 2; // EMA20 线宽
input int Width2 = 1; // EMA49 线宽
input int Width3 = 1; // EMA89 线宽
input ENUM_LINE_STYLE Style1 = STYLE_SOLID; // EMA20 线型(实线/虚线/点线)
input ENUM_LINE_STYLE Style2 = STYLE_DOT; // EMA49 线型
input ENUM_LINE_STYLE Style3 = STYLE_DOT; // EMA89 线型
//--- 指标缓冲区
double Ema20Buffer[];
double Ema49Buffer[];
double Ema89Buffer[];
//--- 指标句柄
int handle20;
int handle49;
int handle89;
//+------------------------------------------------------------------+
//| 初始化函数 |
//+------------------------------------------------------------------+
int OnInit()
{
// 绑定缓冲区到绘图序号
SetIndexBuffer(0, Ema20Buffer, INDICATOR_DATA);
SetIndexBuffer(1, Ema49Buffer, INDICATOR_DATA);
SetIndexBuffer(2, Ema89Buffer, INDICATOR_DATA);
// 创建 EMA 指标句柄
handle20 = iMA(_Symbol, PERIOD_CURRENT, Period1, 0, MODE_EMA, PRICE_CLOSE);
handle49 = iMA(_Symbol, PERIOD_CURRENT, Period2, 0, MODE_EMA, PRICE_CLOSE);
handle89 = iMA(_Symbol, PERIOD_CURRENT, Period3, 0, MODE_EMA, PRICE_CLOSE);
// 检查句柄是否创建成功
if(handle20 == INVALID_HANDLE || handle49 == INVALID_HANDLE || handle89 == INVALID_HANDLE)
{
Print("均线句柄创建失败");
return INIT_FAILED;
}
// 应用用户自定义的颜色、线宽和线型
PlotIndexSetInteger(0, PLOT_LINE_COLOR, Color1);
PlotIndexSetInteger(0, PLOT_LINE_WIDTH, Width1);
PlotIndexSetInteger(0, PLOT_LINE_STYLE, Style1);
PlotIndexSetInteger(1, PLOT_LINE_COLOR, Color2);
PlotIndexSetInteger(1, PLOT_LINE_WIDTH, Width2);
PlotIndexSetInteger(1, PLOT_LINE_STYLE, Style2);
PlotIndexSetInteger(2, PLOT_LINE_COLOR, Color3);
PlotIndexSetInteger(2, PLOT_LINE_WIDTH, Width3);
PlotIndexSetInteger(2, PLOT_LINE_STYLE, Style3);
// 设置指标短名称(显示在图表左上角)
IndicatorSetString(INDICATOR_SHORTNAME, StringFormat("三均线 EMA(%d/%d/%d)", Period1, Period2, Period3));
// 设置小数位数跟随品种
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[])
{
// 检查各个句柄是否已经计算完成
if(BarsCalculated(handle20) < rates_total) return 0;
if(BarsCalculated(handle49) < rates_total) return 0;
if(BarsCalculated(handle89) < rates_total) return 0;
// 从句柄拷贝数据到缓冲区
if(CopyBuffer(handle20, 0, 0, rates_total, Ema20Buffer) < rates_total) return 0;
if(CopyBuffer(handle49, 0, 0, rates_total, Ema49Buffer) < rates_total) return 0;
if(CopyBuffer(handle89, 0, 0, rates_total, Ema89Buffer) < rates_total) return 0;
// 返回本次计算的 K 线数量
return rates_total;
}
//+------------------------------------------------------------------+
//| 清理函数 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// 释放指标句柄
if(handle20 != INVALID_HANDLE) IndicatorRelease(handle20);
if(handle49 != INVALID_HANDLE) IndicatorRelease(handle49);
if(handle89 != INVALID_HANDLE) IndicatorRelease(handle89);
}作品说明
这是一个三条 EMA 均线指标,默认 20/49/89 周期,颜色、线宽、线型都可以在参数里调整。代码使用标准的 MQL5 句柄 + CopyBuffer 流程,不会出现编译错误或显示错位。
使用说明
- 安装方法:复制代码保存为
TripleEMA.mq5,放到 MT5 数据文件夹的MQL5\Indicators目录,在导航器里编译后拖到图表上。
- 默认显示:EMA20 白色粗实线,EMA49 绿色虚线,EMA89 红色虚线,适合黄金等贵金属品种观察趋势。
- 调整周期:在参数里修改
Period1/2/3,比如改成 10/30/60 适应短线交易。
- 调整颜色:点击对应的
Color1/2/3参数,选择你喜欢的颜色(比如深色背景建议用亮色)。
- 调整粗细:
Width1/2/3调大数字线条更粗,缩略图和手机上看得更清楚,推荐 2-3。
- 调整线型:
Style1/2/3可选实线(SOLID)、虚线(DASH)、点线(DOT),区分不同周期的均线。
- 交易参考:快线上穿慢线看多,下穿看空;价格站上三条均线多头排列为强势区,反之为弱势区。
AI 解读根据源码逐行分析写成,供参考,以实际运行为准
这是什么
一个在主图上同时显示三条 EMA(指数移动平均线)的 MT5 指标,默认周期 20/49/89,用于观察不同时间尺度的趋势方向和强弱。三条线的颜色、粗细、实线虚线都能单独调整,方便在深色或浅色图表背景下看清楚。
逻辑原理
指标调用 MT5 内置的 iMA 函数计算三条 EMA,计算方式是标准的指数移动平均:每根 K 线的收盘价按权重递减累加,新价格权重更大,旧价格影响逐渐衰减。周期越短反应越快,越长越平滑。代码用句柄 + CopyBuffer 模式从系统拿数据,不做二次加工,所以不会出现重绘或延迟。三条线画在同一个主图窗口里,线型和颜色通过 PlotIndexSetInteger 在初始化时设定,之后每次 K 线更新自动刷新数值。
参数说明
- Period1(默认 20):第一条 EMA 的周期,数值越小越贴近价格,常用于判断短期趋势
- Period2(默认 49):第二条 EMA 的周期,中期趋势参考线
- Period3(默认 89):第三条 EMA 的周期,长期趋势和支撑阻力参考
- Color1/2/3(默认白/绿/红):三条线的颜色,建议根据图表背景调整
- Width1/2/3(默认 2/1/1):线条粗细,数字越大越粗,在小屏幕或缩略图上建议调到 2-3
- Style1/2/3(默认实线/点线/点线):线型,可选 STYLE_SOLID(实线)、STYLE_DASH(虚线)、STYLE_DOT(点线)
怎么用
把 .mq5 文件放到 MT5 数据文件夹的 MQL5\Indicators 目录,在导航器里编译后拖到任意品种任意周期的图表上。指标会在主图 K 线上叠加三条均线,图表左上角显示当前周期参数。观察均线排列:价格在三条线上方且均线从上到下依次排列(多头排列)为强势区,反之为弱势区;快线(EMA20)上穿慢线(EMA49/89)看多,下穿看空。
适用场景
适合所有品种(外汇、黄金、原油、股指)和所有周期。默认 20/49/89 组合在 H1 和 H4 周期效果较好,适合日内波段和短线趋势跟踪。如果做剥头皮可以改成 10/30/60,做长线可以改成 50/100/200。三条均线粘合在一起说明行情震荡,均线发散说明趋势启动。不适合单边快速行情的回调抄底,EMA 有滞后性,行情转折时会晚于价格。
风险提示
EMA 是滞后指标,均线金叉死叉信号出现时价格可能已经走了一段,追进去容易吃回调。震荡市里均线频繁交叉会产生假信号,配合其他过滤条件(如成交量、波动率、支撑阻力)使用更可靠。代码本身不会重绘,但 EMA 数值会随着新 K 线更新而变化,当前 K 线未走完时均线位置还会微调。
常见问题
- 这个指标会重绘吗?
- 不会。代码使用 MT5 标准 iMA 函数计算 EMA,历史 K 线上的均线数值不会改变,只有当前未走完的 K 线会随价格变动微调。
- 可以用在黄金以外的品种吗?
- 可以。代码里没有限制品种,外汇、原油、股指、加密货币都能用,指标会自动适配品种的小数位数。
- MT4 能用吗?
- 不能直接用。这是 MQL5 代码,MT4 使用 MQL4 语法,需要改写 OnInit 和 OnCalculate 逻辑才能移植。
- 默认参数适合什么周期?
- 20/49/89 组合在 H1 和 H4 周期比较常用,M15 可以改小(10/30/60),D1 可以改大(50/100/200)。
- 怎么调整线条颜色和粗细?
- 图表上右键点指标名称,选"属性"或"设置",在参数标签页里修改 Color1/2/3 和 Width1/2/3,点确定后立即生效。
Triple EMA Indicator (20/49/89) for MT5
Displays three customizable EMA lines with default periods of 20, 49, and 89. Fully adjustable colors, widths, and line styles for trend analysis and multi-timeframe confirmation.
Source code is shown above. Compiled EX5 files are available to VIP members.
评论
还没有人评论,来抢个沙发。