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

黄金三均线交叉信号指标

lm152632·10 小时前发布

三条EMA(20/50/200)+ 金叉死叉箭头提示,适合趋势交易

黄金三均线交叉信号指标
GoldenTripleMA_Signals.mq5195
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
#property copyright   "XAUOF 指标工坊"
#property version     "1.0"
#property strict
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   5

// 均线1(短期)
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDodgerBlue
#property indicator_width1  2
#property indicator_label1  "快线EMA"

// 均线2(中期)
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_width2  2
#property indicator_label2  "中线EMA"

// 均线3(长期)
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrGold
#property indicator_width3  2
#property indicator_label3  "慢线EMA"

// 买入箭头
#property indicator_type4   DRAW_ARROW
#property indicator_color4  clrLime
#property indicator_width4  3
#property indicator_label4  "买入信号"

// 卖出箭头
#property indicator_type5   DRAW_ARROW
#property indicator_color5  clrRed
#property indicator_width5  3
#property indicator_label5  "卖出信号"

//--- 输入参数
input int    FastMA_Period   = 20;      // 快线周期(蓝色):推荐 20
input int    MidMA_Period    = 50;      // 中线周期(红色):推荐 50
input int    SlowMA_Period   = 200;     // 慢线周期(黄色):推荐 200
input ENUM_MA_METHOD MA_Method = MODE_EMA;  // 均线类型:EMA 更灵敏
input ENUM_APPLIED_PRICE AppliedPrice = PRICE_CLOSE;  // 应用价格:收盘价
input bool   ShowArrows      = true;    // 是否显示箭头:true=显示买卖信号
input int    ArrowDistance   = 30;      // 箭头距离K线的点数:调整箭头位置

//--- 指标缓冲区
double FastMABuffer[];   // 快线缓冲区
double MidMABuffer[];    // 中线缓冲区
double SlowMABuffer[];   // 慢线缓冲区
double BuyArrowBuffer[]; // 买入箭头缓冲区
double SellArrowBuffer[];// 卖出箭头缓冲区

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

//+------------------------------------------------------------------+
//| 自定义指标初始化函数                                                |
//+------------------------------------------------------------------+
int OnInit()
{
   //--- 绑定缓冲区到绘图
   SetIndexBuffer(0, FastMABuffer, INDICATOR_DATA);
   SetIndexBuffer(1, MidMABuffer, INDICATOR_DATA);
   SetIndexBuffer(2, SlowMABuffer, INDICATOR_DATA);
   SetIndexBuffer(3, BuyArrowBuffer, INDICATOR_DATA);
   SetIndexBuffer(4, SellArrowBuffer, INDICATOR_DATA);
   
   //--- 设置箭头代码
   PlotIndexSetInteger(3, PLOT_ARROW, 233);  // 买入向上箭头
   PlotIndexSetInteger(4, PLOT_ARROW, 234);  // 卖出向下箭头
   
   //--- 设置数组为时间序列(0 为最新)
   ArraySetAsSeries(FastMABuffer, true);
   ArraySetAsSeries(MidMABuffer, true);
   ArraySetAsSeries(SlowMABuffer, true);
   ArraySetAsSeries(BuyArrowBuffer, true);
   ArraySetAsSeries(SellArrowBuffer, true);
   
   //--- 创建均线指标句柄
   fastHandle = iMA(_Symbol, PERIOD_CURRENT, FastMA_Period, 0, MA_Method, AppliedPrice);
   midHandle = iMA(_Symbol, PERIOD_CURRENT, MidMA_Period, 0, MA_Method, AppliedPrice);
   slowHandle = iMA(_Symbol, PERIOD_CURRENT, SlowMA_Period, 0, MA_Method, AppliedPrice);
   
   //--- 检查句柄是否有效
   if(fastHandle == INVALID_HANDLE || midHandle == INVALID_HANDLE || slowHandle == INVALID_HANDLE)
   {
      Print("均线指标句柄创建失败!");
      return(INIT_FAILED);
   }
   
   //--- 指标名称
   IndicatorSetString(INDICATOR_SHORTNAME, "三均线交叉系统");
   
   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 < SlowMA_Period)
      return(0);
   
   //--- 设置价格数组为时间序列
   ArraySetAsSeries(close, true);
   ArraySetAsSeries(low, true);
   ArraySetAsSeries(high, true);
   
   //--- 从指标句柄拷贝均线数值
   if(CopyBuffer(fastHandle, 0, 0, rates_total, FastMABuffer) <= 0)
   {
      Print("快线数据拷贝失败!");
      return(0);
   }
   if(CopyBuffer(midHandle, 0, 0, rates_total, MidMABuffer) <= 0)
   {
      Print("中线数据拷贝失败!");
      return(0);
   }
   if(CopyBuffer(slowHandle, 0, 0, rates_total, SlowMABuffer) <= 0)
   {
      Print("慢线数据拷贝失败!");
      return(0);
   }
   
   //--- 计算起始位置
   int start = prev_calculated > 0 ? prev_calculated - 1 : SlowMA_Period;
   
   //--- 主循环:生成买卖信号
   for(int i = start; i < rates_total - 1 && i >= 1; i++)
   {
      //--- 初始化箭头缓冲区为空值
      BuyArrowBuffer[i] = EMPTY_VALUE;
      SellArrowBuffer[i] = EMPTY_VALUE;
      
      //--- 跳过没有足够历史数据的K线
      if(i >= rates_total - 1)
         continue;
      
      //--- 只在显示箭头开关打开时计算信号
      if(!ShowArrows)
         continue;
      
      //--- 买入信号:快线上穿中线 且 价格在慢线上方
      // 当前K线:快线 > 中线,上一根K线:快线 <= 中线(发生金叉)
      if(FastMABuffer[i] > MidMABuffer[i] && 
         FastMABuffer[i+1] <= MidMABuffer[i+1] &&
         close[i] > SlowMABuffer[i])
      {
         // 在K线低点下方绘制向上箭头
         BuyArrowBuffer[i] = low[i] - ArrowDistance * _Point;
      }
      
      //--- 卖出信号:快线下穿中线 且 价格在慢线下方
      // 当前K线:快线 < 中线,上一根K线:快线 >= 中线(发生死叉)
      if(FastMABuffer[i] < MidMABuffer[i] && 
         FastMABuffer[i+1] >= MidMABuffer[i+1] &&
         close[i] < SlowMABuffer[i])
      {
         // 在K线高点上方绘制向下箭头
         SellArrowBuffer[i] = high[i] + ArrowDistance * _Point;
      }
   }
   
   //--- 返回当前计算的K线数量
   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 运行截图服务器把编译好的 EX5 挂到黄金 H1 图表上截的,上面的封面就是照着它画的
黄金三均线交叉信号指标 在 MT5 上的真实截图

作品说明

我看到图上有以下几个关键元素:

  1. 三条不同颜色的移动平均线
  • 蓝色线(看起来是短期均线,约 20 周期)
  • 红色线(中期均线,约 50 周期)
  • 黄色线(长期均线,约 200 周期)
  1. 买卖信号箭头
  • 绿色向上箭头标记买入信号(出现在价格下方)
  • 红色向下箭头标记卖出信号(出现在价格上方)
  • 信号逻辑看起来是:短期均线上穿中期均线且价格在长期均线上方时买入,短期均线下穿中期均线且价格在长期均线下方时卖出
  1. 价格蜡烛图:标准的 XAUUSD(黄金)K线图

现在为您复刻这套指标:

使用说明

安装步骤:

  1. 将代码保存为 GoldenTripleMA_Signals.mq5
  2. 放入 MT5 的 MQL5\Indicators 目录
  3. 在 MetaEditor 中编译(F7)
  4. 重启 MT5 或刷新导航器
  5. 从导航器拖到 XAUUSD 图表上

参数调整:

  • 快线周期 20:捕捉短期趋势,数值越小越灵敏但假信号多
  • 中线周期 50:过滤噪音,确认趋势方向
  • 慢线周期 200:判断大趋势,价格在其上方看多,下方看空
  • 箭头距离 30 点:调整箭头到K线的距离,避免重叠遮挡
  • 均线类型 EMA:指数移动平均更贴近当前价格,也可改为 SMA

信号解读:

  • 绿色向上箭头:快线上穿中线 + 价格在慢线上方 = 买入信号(做多)
  • 红色向下箭头:快线下穿中线 + 价格在慢线下方 = 卖出信号(做空)
  • 三条均线多头排列(蓝>红>黄):强势上涨,持有多单
  • 三条均线空头排列(蓝<红<黄):强势下跌,持有空单

注意事项:

  1. 震荡行情中会有假突破,建议结合 RSI/MACD 等指标过滤
  2. 箭头出现在已完成的K线上,不建议在当前K线未收盘时抢跑
  3. 慢线(黄色 200 周期)是关键支撑/阻力,价格远离时谨慎追单
  4. 建议在 H1 或 H4 周期使用,M5/M15 假信号较多

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

这是什么

这是一个基于三条指数移动平均线(EMA)交叉的趋势跟踪指标,在 MT5 图表上同时画出 20/50/200 三条均线,并在快线(蓝色 20 周期)上穿或下穿中线(红色 50 周期)时,结合价格与慢线(黄色 200 周期)的位置关系,在图表上打出绿色向上箭头(买入信号)或红色向下箭头(卖出信号)。适合不想盯盘计算均线交叉的趋势交易者。

逻辑原理

指标用 iMA 函数分别计算三条 EMA,默认应用收盘价。信号逻辑是经典的双均线金叉死叉 + 长期均线过滤:

  • 买入信号(绿色向上箭头):当前 K 线快线数值大于中线,且前一根 K 线快线小于等于中线(刚发生金叉),同时当前收盘价在慢线上方(确认大趋势向上),箭头画在当前 K 线低点下方 30 点(默认)处。
  • 卖出信号(红色向下箭头):当前 K 线快线数值小于中线,且前一根 K 线快线大于等于中线(刚发生死叉),同时当前收盘价在慢线下方(确认大趋势向下),箭头画在当前 K 线高点上方 30 点处。

慢线(200 周期)起过滤作用,只在价格站上慢线时接受金叉做多信号,价格跌破慢线时接受死叉做空信号,避免在震荡市中频繁进出。

参数说明

  • FastMA_Period(默认 20):快线周期。数值越小越灵敏,能更早捕捉趋势转折,但假信号也多;数值越大越平滑,滞后但稳定。
  • MidMA_Period(默认 50):中线周期。与快线构成交叉信号的基准线,50 是常用的中期趋势周期。
  • SlowMA_Period(默认 200):慢线周期。判断长期趋势方向和主要支撑阻力位,200 是市场公认的牛熊分界线。
  • MA_Method(默认 MODE_EMA):均线类型。EMA(指数移动平均)对近期价格反应更快,也可改为 SMA(简单移动平均)、SMMA、LWMA。
  • AppliedPrice(默认 PRICE_CLOSE):应用价格。收盘价是最常用的,也可选开盘价、最高价、最低价、中位价等。
  • ShowArrows(默认 true):是否显示箭头。关闭后只画三条均线不显示信号,适合只看均线排列的交易者。
  • ArrowDistance(默认 30):箭头距离 K 线的点数。调大避免箭头和 K 线重叠看不清,调小让箭头更贴近价格。

怎么用

将代码保存为 .mq5 文件,放入 MT5 安装目录的 MQL5\Indicators 文件夹,在 MetaEditor 里编译(按 F7),然后重启 MT5 或刷新导航器窗口。从导航器的"指标"列表把它拖到 XAUUSD(或任何品种)的图表上,图表会出现三条彩色均线和箭头。

看信号:绿色向上箭头出现在 K 线下方时考虑做多,红色向下箭头出现在 K 线上方时考虑做空。箭头画在已完成的 K 线上,不要在当前 K 线未收盘时抢跑。配合三条均线的排列关系:蓝色快线在最上方、红色中线在中间、黄色慢线在最下方是多头排列(强势上涨),反过来是空头排列(强势下跌)。价格远离慢线时谨慎追单,等回调靠近慢线再进。

适用场景

这套逻辑适合有明显趋势的品种和周期。黄金(XAUUSD)、原油、外汇主要货币对在 H1(1 小时)或 H4(4 小时)图上效果较好,趋势持续时间够长,均线交叉后有足够利润空间。不适合 M5、M15 等短周期,因为小周期噪音多,均线频繁缠绕,假突破信号多。

震荡市中(价格在慢线附近横盘、快中线反复缠绕)会出现连续的金叉死叉假信号,这时最好等价格明确突破慢线并拉开距离后再参与。适合配合 RSI、MACD 等震荡指标过滤:比如 RSI 超买超卖区域反转时的均线交叉信号更可靠。

风险提示

均线是滞后指标,交叉信号出现时趋势已经走了一段,入场点不是最优,可能吃掉部分利润或在趋势末端接盘。快线和中线周期差距不大时(20 和 50),交叉后可能很快再次交叉(假突破),连续止损。代码逻辑是前一根 K 线满足条件就画箭头,不会重绘,但信号出现在 K 线收盘后,实盘进场有滑点和延迟。

慢线过滤虽然减少了震荡市的无效信号,但也会错过趋势初期的机会(价格刚突破慢线但快中线还未金叉)。200 周期均线在小周期图上计算需要大量历史数据,刚上市的品种或周末跳空后可能数据不足导致均线失真。这个指标只管进场信号,不管止损止盈,需要交易者自己设定风险管理规则,比如慢线作为止损位、或固定点数 / ATR 倍数止损。

常见问题

这个指标会重绘吗?信号会消失吗?
不会重绘。代码逻辑是检测前一根 K 线和当前 K 线的均线位置关系,箭头画在已完成的 K 线上后不会改变。但信号出现在 K 线收盘后,当根 K 线未收盘时看到的均线交叉不算数。
可以用在 XAUUSD 以外的品种吗?
可以。代码用 _Symbol 自动适应当前图表品种,外汇、原油、指数、股票都能用。但不同品种的波动特性不同,可能需要调整均线周期和箭头距离参数,建议先在历史数据上回测。
MT4 能用吗?
不能直接用。这是 MQL5 代码,MT4 用的是 MQL4 语言,语法和函数不同。MT4 需要重写,主要改 iMA 的调用方式和缓冲区设置逻辑。
参数默认值(20/50/200)适合什么周期?
默认值是市场通用配置,在 H1 和 H4 周期黄金上比较稳定。如果用在 M15 等短周期,建议把快线和中线周期缩小(比如 10/30)减少滞后;如果用在 D1 日线,可以保持默认或放大到 30/60/250。
为什么有时均线交叉了但没有箭头?
因为代码加了慢线过滤条件。快线上穿中线(金叉)时,如果收盘价在慢线下方,不会显示买入箭头;快线下穿中线(死叉)时,如果收盘价在慢线上方,不会显示卖出箭头。这是为了过滤震荡市的假信号,只在大趋势方向一致时才提示。

Golden Triple EMA Crossover Signal Indicator for MT5

A trend-following indicator for MT5 featuring three EMAs (20/50/200). It displays buy/sell arrows when the fast EMA crosses the mid EMA, filtered by price position relative to the slow EMA. Suitable for H1/H4 timeframes on trending markets like XAUUSD.

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

评论

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

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