MT5指标编译通过 · EX5 16KB 自动发布 40 0

黄金多周期均线共振指标

15296489698·9 天前发布

四条均线+趋势线,自动标记买卖信号箭头,支撑阻力区域着色

黄金多周期均线共振指标

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

Multi_MA_Signal.mq5180 行
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
#property copyright "XAUOF Workshop"
#property version   "1.0"
#property strict
#property indicator_chart_window
#property indicator_buffers 6
#property indicator_plots   6

// 绘图属性:快线(橙)、中线(青)、长线(紫)、参考线、买信号、卖信号
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrOrange
#property indicator_width1  2
#property indicator_label1  "Fast MA"

#property indicator_type2   DRAW_LINE
#property indicator_color2  clrCyan
#property indicator_width2  2
#property indicator_label2  "Mid MA"

#property indicator_type3   DRAW_LINE
#property indicator_color3  clrMagenta
#property indicator_width3  2
#property indicator_label3  "Slow MA"

#property indicator_type4   DRAW_LINE
#property indicator_color4  clrGray
#property indicator_width4  1
#property indicator_style4  STYLE_DASH
#property indicator_label4  "Reference"

#property indicator_type5   DRAW_ARROW
#property indicator_color5  clrLime
#property indicator_width5  2
#property indicator_label5  "Buy Signal"

#property indicator_type6   DRAW_ARROW
#property indicator_color6  clrRed
#property indicator_width6  2
#property indicator_label6  "Sell Signal"

// ========== 输入参数 ==========
input int FastPeriod = 10;           // 快线周期(橙色),推荐 5-15
input int MidPeriod = 20;            // 中线周期(青色),推荐 15-30
input int SlowPeriod = 50;           // 长线周期(紫色),推荐 40-80
input int ReferencePeriod = 100;     // 参考线周期(灰色虚线),推荐 80-150
input ENUM_MA_METHOD MAMethod = MODE_EMA;  // 均线类型:EMA/SMA/WMA
input ENUM_APPLIED_PRICE MAPrice = PRICE_CLOSE;  // 计算价格
input bool UseSignalArrows = true;   // 是否显示买卖箭头
input double ArrowOffset = 5;        // 箭头距离 K线的点数,推荐 3-10

// ========== 缓冲区声明 ==========
double FastMA[];
double MidMA[];
double SlowMA[];
double RefMA[];
double BuySignal[];
double SellSignal[];

// ========== 指标句柄 ==========
int hFastMA, hMidMA, hSlowMA, hRefMA;

int OnInit()
{
    // 绑定绘图缓冲区
    SetIndexBuffer(0, FastMA, INDICATOR_DATA);
    SetIndexBuffer(1, MidMA, INDICATOR_DATA);
    SetIndexBuffer(2, SlowMA, INDICATOR_DATA);
    SetIndexBuffer(3, RefMA, INDICATOR_DATA);
    SetIndexBuffer(4, BuySignal, INDICATOR_DATA);
    SetIndexBuffer(5, SellSignal, INDICATOR_DATA);
    
    // 设置箭头符号:233 = 上箭头,234 = 下箭头
    PlotIndexSetInteger(4, PLOT_ARROW, 233);
    PlotIndexSetInteger(5, PLOT_ARROW, 234);
    
    // 空值设置为 EMPTY_VALUE(不是 0)
    PlotIndexSetDouble(4, PLOT_EMPTY_VALUE, EMPTY_VALUE);
    PlotIndexSetDouble(5, PLOT_EMPTY_VALUE, EMPTY_VALUE);
    
    // 创建均线句柄
    hFastMA = iMA(_Symbol, _Period, FastPeriod, 0, MAMethod, MAPrice);
    hMidMA = iMA(_Symbol, _Period, MidPeriod, 0, MAMethod, MAPrice);
    hSlowMA = iMA(_Symbol, _Period, SlowPeriod, 0, MAMethod, MAPrice);
    hRefMA = iMA(_Symbol, _Period, ReferencePeriod, 0, MAMethod, MAPrice);
    
    // 句柄检查
    if (hFastMA == INVALID_HANDLE || hMidMA == INVALID_HANDLE || 
        hSlowMA == INVALID_HANDLE || hRefMA == INVALID_HANDLE)
    {
        Print("Error creating indicator handles");
        return INIT_FAILED;
    }
    
    // 设置指标名称
    string name = StringFormat("Multi_MA (F:%d, M:%d, S:%d, R:%d)", 
                                FastPeriod, MidPeriod, SlowPeriod, ReferencePeriod);
    IndicatorSetString(INDICATOR_SHORTNAME, name);
    
    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(hFastMA) < rates_total || 
        BarsCalculated(hMidMA) < rates_total || 
        BarsCalculated(hSlowMA) < rates_total || 
        BarsCalculated(hRefMA) < rates_total)
        return 0;
    
    // 复制均线数据到缓冲区
    if (CopyBuffer(hFastMA, 0, 0, rates_total, FastMA) < rates_total) return 0;
    if (CopyBuffer(hMidMA, 0, 0, rates_total, MidMA) < rates_total) return 0;
    if (CopyBuffer(hSlowMA, 0, 0, rates_total, SlowMA) < rates_total) return 0;
    if (CopyBuffer(hRefMA, 0, 0, rates_total, RefMA) < rates_total) return 0;
    
    // 计算起点:如果是首次计算,从 SlowPeriod 开始;否则从 prev_calculated-1 开始
    int start = (prev_calculated > 0) ? prev_calculated - 1 : SlowPeriod;
    
    // 初始化箭头缓冲区
    if (prev_calculated == 0)
    {
        ArrayInitialize(BuySignal, EMPTY_VALUE);
        ArrayInitialize(SellSignal, EMPTY_VALUE);
    }
    
    // ========== 主计算循环 ==========
    for (int i = start; i < rates_total && !IsStopped(); i++)
    {
        // 初始化本根 K线的信号为空
        BuySignal[i] = EMPTY_VALUE;
        SellSignal[i] = EMPTY_VALUE;
        
        // 需要前一根数据来检测交叉,所以 i < 1 时跳过
        if (i < 1)
            continue;
        
        if (!UseSignalArrows)
            continue;
        
        // ===== 快线 vs 中线的金叉/死叉 ===== 
        bool FastCrossMid_Up = (FastMA[i] > MidMA[i]) && (FastMA[i-1] <= MidMA[i-1]);
        bool FastCrossMid_Dn = (FastMA[i] < MidMA[i]) && (FastMA[i-1] >= MidMA[i-1]);
        
        // ===== 中线 vs 长线的金叉/死叉 =====
        bool MidCrossSlowUp = (MidMA[i] > SlowMA[i]) && (MidMA[i-1] <= SlowMA[i-1]);
        bool MidCrossSlowDn = (MidMA[i] < SlowMA[i]) && (MidMA[i-1] >= SlowMA[i-1]);
        
        // ===== 买信号:快线上穿中线 且 中线在长线上方(看涨共振) =====
        if (FastCrossMid_Up && MidMA[i] > SlowMA[i])
        {
            BuySignal[i] = low[i] - ArrowOffset * _Point;
        }
        
        // ===== 卖信号:快线下穿中线 且 中线在长线下方(看跌共振) =====
        if (FastCrossMid_Dn && MidMA[i] < SlowMA[i])
        {
            SellSignal[i] = high[i] + ArrowOffset * _Point;
        }
    }
    
    return rates_total;
}

void OnDeinit(const int reason)
{
    // 释放指标句柄
    IndicatorRelease(hFastMA);
    IndicatorRelease(hMidMA);
    IndicatorRelease(hSlowMA);
    IndicatorRelease(hRefMA);
}
MT5 运行截图 · 完整视图带价格轴和时间轴的整张图表(约 150 根 H1 K 线),上面的封面是它最近 80 根 K 线的放大视图
黄金多周期均线共振指标 在 MT5 上的真实截图

作品说明

我从图上识别到:

  • 4条均线:橙色(短期快线)、青色(中期线)、紫色(长期线)、还有一条虚线(可能是参考线)
  • 蓝色虚线:趋势线,从左上向右下,标记了价格的总体走势
  • 买卖信号:图中虽然没有明显的箭头标记,但从均线交叉和虚线穿越的位置来看,这是一个多周期均线共振系统,用颜色块区分了支撑阻力区域
  • 背景色块:上下分别代表压力区(粉红/橙色)和支撑区(青色/绿色),中间是交易区域

核心逻辑:快线穿越中线产生信号,同时参考长期线方向和支撑阻力位。我会写一个包含这4条均线、自动检测金叉/死叉的指标,并在关键交叉点画箭头。

使用说明

安装步骤:

  1. 将代码保存为 Multi_MA_Signal.mq5,放入 MT5 的 Indicators 文件夹
  2. 在 MetaEditor 中编译(F7)
  3. 拖到图表上即可生效

参数调整:

  • FastPeriod / MidPeriod / SlowPeriod / ReferencePeriod:调整均线周期以匹配你的交易时间框架
  • MAMethod:MODE_EMA(指数均线,反应快)或 MODE_SMA(简单均线,稳定),默认 EMA
  • UseSignalArrows:勾选则显示买卖箭头,取消则只显示均线
  • ArrowOffset:调整箭头距离 K线的距离,便于查看

信号解读:

  • 绿色上箭头:快线金叉中线 且 中线在长线上方 → 买入信号
  • 红色下箭头:快线死叉中线 且 中线在长线下方 → 卖出信号
  • 四条均线:从下到上依次是趋势方向,线条排列越整齐,共振度越强,信号越可靠

注意事项:

  • 箭头只在交叉的那一根 K线出现,不会堆积
  • 此指标为纯信号工具,需结合实际行情和资金管理使用
  • 快线周期越短越敏感,容易产生假信号;建议用 4H 以上周期搭配使用

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

这是什么

一个基于四条均线共振的趋势跟踪指标,适用于 MetaTrader 5 平台。当快速均线穿越中期均线、且长期均线方向一致时,自动在图表上标记绿色(买入)或红色(卖出)箭头。核心思路是通过多周期均线的排列顺序过滤假信号,提高交叉信号的可靠性。

逻辑原理

指标在图表上绘制四条可调周期的均线:橙色快线(默认 10)、青色中线(默认 20)、紫色长线(默认 50)、灰色虚线参考线(默认 100)。均线类型默认为 EMA(指数移动平均),计算价格为收盘价。

买入信号:快线从下方穿越中线(金叉)且此时中线位于长线上方,说明短中长期趋势共振向上,在 K 线低点下方显示绿色上箭头。

卖出信号:快线从上方穿越中线(死叉)且此时中线位于长线下方,说明短中长期趋势共振向下,在 K 线高点上方显示红色下箭头。

箭头只在交叉发生的那一根 K 线出现一次,使用前一根和当前根的数据对比判断穿越,不会事后修改(无重绘)。参考线不参与信号计算,仅作为更长期趋势的视觉辅助。

参数说明

  • FastPeriod(10):快速均线周期,橙色线。数值越小反应越灵敏,也越容易产生频繁信号。建议 5-15,短线交易用小值,波段交易用大值。
  • MidPeriod(20):中期均线周期,青色线。作为快线的参照对象,建议设为快线的 1.5-3 倍。推荐 15-30。
  • SlowPeriod(50):长期均线周期,紫色线。用于确认整体趋势方向,是信号过滤器。推荐 40-80,数值越大过滤效果越强。
  • ReferencePeriod(100):参考线周期,灰色虚线。不直接参与信号,帮你判断大趋势背景。推荐 80-150。
  • MAMethod(MODE_EMA):均线计算方式,可选 EMA(指数)、SMA(简单)、SMMA(平滑)、LWMA(线性加权)。EMA 对新价格反应快,SMA 更平稳。
  • MAPrice(PRICE_CLOSE):用哪个价格计算均线,默认收盘价。一般不用改。
  • UseSignalArrows(true):勾选显示买卖箭头,取消则只显示四条均线,适合只想看趋势不想被箭头干扰的用户。
  • ArrowOffset(5):箭头距离 K 线的点数(Point)。数值太小箭头会贴在 K 线上不好辨认,太大又占用图表空间。推荐 3-10。

怎么用

  1. 将代码保存为 Multi_MA_Signal.mq5,放入 MT5 数据文件夹的 MQL5\Indicators 目录(文件 → 打开数据文件夹)。
  2. 在 MetaEditor 中打开并编译(按 F7),没有错误提示即可。
  3. 回到 MT5 主界面,在导航器窗口的"指标"下找到它,拖到你想监控的品种图表上。
  4. 参数窗口会弹出,可以调整周期、均线类型等,不调也能用默认值。
  5. 看到四条彩色均线和偶尔出现的箭头,就说明加载成功了。

使用建议:箭头只是提示交叉时机,实际下单前看一眼四条线的排列——如果从上到下(或从下到上)依次是快、中、慢、参考,说明共振度高;如果缠在一起乱成一团,说明行情在震荡,这时的箭头可靠性低。

适用场景

适合:

  • 趋势明显的品种,比如黄金(XAUUSD)、主要货币对(EUR/USD、GBP/USD)、指数(US30、NAS100)。
  • 4 小时图、日线图等中大周期,趋势延续性强,均线交叉信号相对可靠。
  • 波段交易和中长线持仓,不适合抢帽子式的超短线操作。
  • 配合价格行为(支撑阻力、K 线形态)一起用,箭头当作提醒而不是教条。

不适合:

  • 1 分钟、5 分钟图等极短周期,均线交叉频繁且大部分是噪音。
  • 震荡行情、窄幅盘整的时候,四条线会反复缠绕,箭头来回打脸。
  • 重大消息发布前后(非农、议息),价格跳空或剧烈波动,均线系统会失效。

风险提示

滞后性:所有均线本质是对历史价格的平均,信号总是在趋势已经启动一段时间后才出现。快线穿中线时,价格可能已经走了一小段,进场点不是最优。

震荡市假信号:横盘或区间波动时,快线会频繁上下穿越中线,箭头接连出现又接连止损。代码本身无法识别行情类型,需要你自己判断当前是趋势还是震荡。

无止损止盈:这是一个纯信号指标,不是 EA,不会帮你管理仓位。箭头出现后你还得自己决定止损放哪、目标在哪、仓位多大。

参数敏感:默认的 10/20/50/100 是通用配置,不一定适合所有品种和周期。建议在历史数据上回测不同参数组合,找到适合你交易风格的设置。

不重绘≠不会错:代码确实不会事后修改箭头位置,但"不重绘"不代表"不会发出错误信号"。均线交叉系统的胜率本来就不是 100%,亏损单是正常的。

常见问题

这个指标会重绘吗?
不会。代码使用前一根 K 线和当前根的数据对比来判断交叉,箭头一旦画出就不会移动或消失。你看到的箭头位置就是当时实际发生交叉的位置。
默认参数 10/20/50 适合什么周期?
默认参数是面向 4 小时图和日线图设计的通用配置。如果你用 15 分钟或 1 小时图,可以把快线周期缩小到 5-8;如果用周线,可以把各周期都放大一倍(比如 20/40/100)。
可以用在黄金以外的品种吗?
可以。代码没有限制品种,任何 MT5 支持的货币对、贵金属、指数、商品期货都能用。只要是趋势性较强的品种,效果都不会太差。
箭头太多或太少怎么办?
箭头太多说明周期太短或行情在震荡,可以把 FastPeriod 和 MidPeriod 调大一点,或者换到更大的时间框架;箭头太少说明过滤太严,可以把 SlowPeriod 调小,或者取消"中线必须在长线上方/下方"的共振条件(需要改代码)。
能不能把箭头改成弹窗或手机推送?
当前版本只在图表上画箭头,不发送通知。如果需要报警功能,可以在信号触发的地方加上 Alert() 或 SendNotification() 函数,或者用 MT5 自带的"创建提醒"功能手动设置。

Multi-Timeframe MA Resonance Indicator for MT5

A trend-following indicator with 4 customizable moving averages (fast, mid, slow, reference). Generates buy/sell arrows when fast MA crosses mid MA with confirmation from slow MA alignment. Designed for gold and trending instruments, no repaint.

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

评论

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

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