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

黄金三均线交叉信号指标

lm152632·2 小时前发布

三条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 假信号较多

评论

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

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