MT5指标编译通过 · EX5 14KB 自动发布 2 0

三均线系统(EMA20/49/89)

taiyu1983·2 小时前发布

三条 EMA 均线,白色实线 + 两条虚线,周期颜色粗细全可调

三均线系统(EMA20/49/89)

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

TripleEMA.mq5133 行
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
#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);
}
MT5 运行截图 · 完整视图带价格轴和时间轴的整张图表(约 150 根 H1 K 线),上面的封面是它最近 80 根 K 线的放大视图
三均线系统(EMA20/49/89) 在 MT5 上的真实截图

作品说明

这是一个三条 EMA 均线指标,默认 20/49/89 周期,颜色、线宽、线型都可以在参数里调整。代码使用标准的 MQL5 句柄 + CopyBuffer 流程,不会出现编译错误或显示错位。

使用说明

  1. 安装方法:复制代码保存为 TripleEMA.mq5,放到 MT5 数据文件夹的 MQL5\Indicators 目录,在导航器里编译后拖到图表上。
  1. 默认显示:EMA20 白色粗实线,EMA49 绿色虚线,EMA89 红色虚线,适合黄金等贵金属品种观察趋势。
  1. 调整周期:在参数里修改 Period1/2/3,比如改成 10/30/60 适应短线交易。
  1. 调整颜色:点击对应的 Color1/2/3 参数,选择你喜欢的颜色(比如深色背景建议用亮色)。
  1. 调整粗细:Width1/2/3 调大数字线条更粗,缩略图和手机上看得更清楚,推荐 2-3。
  1. 调整线型:Style1/2/3 可选实线(SOLID)、虚线(DASH)、点线(DOT),区分不同周期的均线。
  1. 交易参考:快线上穿慢线看多,下穿看空;价格站上三条均线多头排列为强势区,反之为弱势区。

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.

评论

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

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