MT5指标编译通过 · EX5 15KB 自动发布 7 0

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

taiyu1983·1 天前发布

三条可调周期的指数移动平均线,用于趋势判断和多空共振

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

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

TripleEMA.mq5171 行
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
#property copyright "XAUOF指标工坊"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3

// 第一条均线
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDodgerBlue
#property indicator_width1  2
#property indicator_label1  "EMA快线"

// 第二条均线
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrOrange
#property indicator_width2  2
#property indicator_label2  "EMA中线"

// 第三条均线
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrMagenta
#property indicator_width3  2
#property indicator_label3  "EMA慢线"

//--- 输入参数
input group "===== 快线设置 ====="
input int    FastPeriod  = 20;              // 快线周期(推荐20)
input color  FastColor   = clrDodgerBlue;   // 快线颜色
input int    FastWidth   = 2;               // 快线粗细(1-5)

input group "===== 中线设置 ====="
input int    MidPeriod   = 49;              // 中线周期(推荐49)
input color  MidColor    = clrOrange;       // 中线颜色
input int    MidWidth    = 2;               // 中线粗细(1-5)

input group "===== 慢线设置 ====="
input int    SlowPeriod  = 89;              // 慢线周期(推荐89)
input color  SlowColor   = clrMagenta;      // 慢线颜色
input int    SlowWidth   = 2;               // 慢线粗细(1-5)

//--- 指标缓冲区
double FastBuffer[];
double MidBuffer[];
double SlowBuffer[];

//--- 指标句柄
int FastHandle;
int MidHandle;
int SlowHandle;

//+------------------------------------------------------------------+
//| 自定义指标初始化函数                                                |
//+------------------------------------------------------------------+
int OnInit()
{
   // 参数合法性检查
   if(FastPeriod < 1 || MidPeriod < 1 || SlowPeriod < 1)
   {
      Print("均线周期必须大于0");
      return INIT_PARAMETERS_INCORRECT;
   }
   
   // 绑定指标缓冲区
   SetIndexBuffer(0, FastBuffer, INDICATOR_DATA);
   SetIndexBuffer(1, MidBuffer, INDICATOR_DATA);
   SetIndexBuffer(2, SlowBuffer, INDICATOR_DATA);
   
   // 创建EMA句柄
   FastHandle = iMA(_Symbol, PERIOD_CURRENT, FastPeriod, 0, MODE_EMA, PRICE_CLOSE);
   MidHandle  = iMA(_Symbol, PERIOD_CURRENT, MidPeriod, 0, MODE_EMA, PRICE_CLOSE);
   SlowHandle = iMA(_Symbol, PERIOD_CURRENT, SlowPeriod, 0, MODE_EMA, PRICE_CLOSE);
   
   if(FastHandle == INVALID_HANDLE || MidHandle == INVALID_HANDLE || SlowHandle == INVALID_HANDLE)
   {
      Print("创建均线句柄失败");
      return INIT_FAILED;
   }
   
   // 设置绘图属性
   PlotIndexSetInteger(0, PLOT_LINE_COLOR, FastColor);
   PlotIndexSetInteger(0, PLOT_LINE_WIDTH, FastWidth);
   
   PlotIndexSetInteger(1, PLOT_LINE_COLOR, MidColor);
   PlotIndexSetInteger(1, PLOT_LINE_WIDTH, MidWidth);
   
   PlotIndexSetInteger(2, PLOT_LINE_COLOR, SlowColor);
   PlotIndexSetInteger(2, PLOT_LINE_WIDTH, SlowWidth);
   
   // 设置指标标签
   PlotIndexSetString(0, PLOT_LABEL, "EMA(" + IntegerToString(FastPeriod) + ")");
   PlotIndexSetString(1, PLOT_LABEL, "EMA(" + IntegerToString(MidPeriod) + ")");
   PlotIndexSetString(2, PLOT_LABEL, "EMA(" + IntegerToString(SlowPeriod) + ")");
   
   // 设置指标名称
   IndicatorSetString(INDICATOR_SHORTNAME, 
      "三均线系统(" + IntegerToString(FastPeriod) + "," + 
      IntegerToString(MidPeriod) + "," + IntegerToString(SlowPeriod) + ")");
   
   // 设置指标精度
   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 < SlowPeriod)
      return 0;
   
   // 等待指标数据计算完成
   if(BarsCalculated(FastHandle) < rates_total) return 0;
   if(BarsCalculated(MidHandle) < rates_total) return 0;
   if(BarsCalculated(SlowHandle) < rates_total) return 0;
   
   // 确定计算起点
   int start = 0;
   if(prev_calculated > 0)
      start = prev_calculated - 1;
   
   // 计算需要复制的数据量
   int to_copy = rates_total - start;
   
   // 从指标句柄复制数据到缓冲区
   if(CopyBuffer(FastHandle, 0, start, to_copy, FastBuffer) <= 0)
   {
      Print("复制快线数据失败");
      return 0;
   }
   
   if(CopyBuffer(MidHandle, 0, start, to_copy, MidBuffer) <= 0)
   {
      Print("复制中线数据失败");
      return 0;
   }
   
   if(CopyBuffer(SlowHandle, 0, start, to_copy, SlowBuffer) <= 0)
   {
      Print("复制慢线数据失败");
      return 0;
   }
   
   return rates_total;
}

//+------------------------------------------------------------------+
//| 指标清理函数                                                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // 释放指标句柄
   if(FastHandle != INVALID_HANDLE)
      IndicatorRelease(FastHandle);
   if(MidHandle != INVALID_HANDLE)
      IndicatorRelease(MidHandle);
   if(SlowHandle != INVALID_HANDLE)
      IndicatorRelease(SlowHandle);
}
//+------------------------------------------------------------------+
MT5 运行截图 · 完整视图带价格轴和时间轴的整张图表(约 150 根 H1 K 线),上面的封面是它最近 80 根 K 线的放大视图
三均线系统指标(EMA20/49/89) 在 MT5 上的真实截图

作品说明

这是一个三均线系统指标,画出三条可调周期的EMA均线,常用于判断趋势方向和多空共振。

使用说明

  1. 安装方法:将代码保存为 TripleEMA.mq5,放入 MT5 的 MQL5/Indicators 文件夹,编译后拖到图表上即可
  1. 参数调节:
  • 快线周期:默认20,适合短期趋势
  • 中线周期:默认49,适合中期趋势
  • 慢线周期:默认89,适合长期趋势
  • 每条线的颜色和粗细都可以单独调整
  1. 信号判断:
  • 多头排列:快线 > 中线 > 慢线,趋势向上
  • 空头排列:快线 < 中线 < 慢线,趋势向下
  • 均线粘合:三线靠近,市场震荡
  • 金叉/死叉:快线穿越中线或慢线时产生信号
  1. 适用品种:适合黄金、外汇、指数等趋势性品种,所有周期皆可
  1. 建议用法:配合K线形态和成交量使用,避免在震荡市单独依赖均线信号

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

这是什么

这是一个在MT5图表上画出三条指数移动平均线(EMA)的趋势指标,默认周期是20、49、89,分别代表短期、中期、长期趋势。通过观察三条均线的排列关系,交易者可以判断当前趋势方向和多空力量的强弱。

逻辑原理

指标调用MT5内置的iMA函数计算三条EMA均线,分别基于收盘价(PRICE_CLOSE)和指数加权方式(MODE_EMA)。EMA相比简单均线对近期价格更敏感,能更快反应趋势变化。

信号判断逻辑:

  • 多头排列:快线(蓝色)在中线(橙色)上方,中线在慢线(紫红色)上方,三线向上发散,趋势向上
  • 空头排列:快线在中线下方,中线在慢线下方,三线向下发散,趋势向下
  • 均线粘合:三线靠近甚至交织,表示市场震荡,趋势不明
  • 金叉/死叉:快线向上穿越中线或慢线为金叉(做多信号),向下穿越为死叉(做空信号)

指标不产生箭头或报警,只画线,需要交易者自行观察。

参数说明

  • FastPeriod(默认20):快线周期,数值越小越灵敏,但假信号更多;建议10-30之间调整
  • MidPeriod(默认49):中线周期,作为中期趋势参考;建议30-60之间调整
  • SlowPeriod(默认89):慢线周期,代表长期趋势;建议60-200之间调整
  • FastColor(默认蓝色):快线颜色,可在参数窗口修改
  • FastWidth(默认2):快线粗细,1-5之间,数值越大越粗
  • MidColor(默认橙色):中线颜色
  • MidWidth(默认2):中线粗细
  • SlowColor(默认紫红色):慢线颜色
  • SlowWidth(默认2):慢线粗细

所有周期必须大于0,否则指标会报错并停止加载。

怎么用

将代码保存为 TripleEMA.mq5,放入MT5数据文件夹的 MQL5/Indicators 目录,重启MT5或按F4打开MetaEditor编译。编译成功后,在导航器窗口的"指标"列表里找到它,拖到任意图表上。

指标会在主图(价格图表窗口)上画出三条彩色均线。观察它们的相对位置和斜率:

  • 三线向上且快线在上方 = 多头趋势,可以找回调做多机会
  • 三线向下且快线在下方 = 空头趋势,可以找反弹做空机会
  • 三线缠绕粘合 = 震荡市,等待突破方向

建议配合K线形态(如吞没、锤子线)和支撑阻力位一起使用,不要单独依靠均线交叉信号入场。

适用场景

适合有明显趋势的品种,如黄金(XAUUSD)、主要外汇对(EURUSD、GBPUSD等)、原油、指数等。所有周期都可以用,但短周期(M1、M5)假信号较多,H1、H4、D1更可靠。

不适合:窄幅震荡行情、流动性极差的小众品种、新闻发布前后的剧烈波动时段。在这些情况下,均线会频繁交叉但价格来回拉锯,假信号成本高。

风险提示

  1. 滞后性:均线是基于历史价格计算的,天然滞后,趋势反转时可能已经回撤较多才产生信号
  2. 震荡市失效:在横盘整理阶段,均线会反复交叉产生假信号,频繁进出容易亏损
  3. 参数敏感:周期选择对信号质量影响很大,默认的20/49/89适合日线和4小时图,但不一定适合所有品种和周期,需要自行回测优化
  4. 无止损逻辑:指标只提供趋势判断,不包含止损、止盈或仓位管理,必须自行设置风控
  5. 单一指标局限:仅用均线容易被洗盘,建议结合成交量、RSI、MACD等其他指标或价格行为分析

代码本身不会重绘(EMA是确定性计算),但均线值会随着新K线出现而更新,历史K线上的均线值不变。

常见问题

这个指标会重绘吗?
不会。EMA是确定性计算,历史K线上的均线值确定后不会改变,只有当前K线的均线值会随着价格波动实时更新。
默认参数20/49/89适合什么周期?
代码里没有限制周期,但根据经验,这组参数在H1、H4和D1图表上效果较好,M5和M15周期建议缩小参数如10/21/50,需自行测试。
可以用在黄金以外的品种吗?
可以。代码使用当前图表品种(_Symbol)和周期(PERIOD_CURRENT),适用于MT5支持的所有品种,包括外汇、贵金属、原油、指数、加密货币等。
能不能只显示两条均线?
不能直接关闭某条线,但可以把不想看的那条均线的颜色(比如SlowColor)设置为clrNone或者和背景色相同,或者把粗细(SlowWidth)设为1并调浅颜色。
MT4能用吗?
不能。这是MQL5代码,只能在MetaTrader 5平台使用。MT4需要用MQL4重写,语法和函数都不同。

Triple EMA Trend System Indicator for MT5 (EMA 20/49/89)

A customizable triple exponential moving average (EMA) indicator with default periods of 20, 49, and 89. Designed for trend identification and bullish/bearish alignment analysis across all timeframes and trending instruments.

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

评论

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

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