多周期多指标共振自动交易 EA
M1/M5/M15 均线共振 + RSI 强弱 + MACD 趋势,四重过滤开仓
效果示意图 · AI 根据源码绘制,仅示意画了哪些元素,细节以实际运行为准
#property copyright "XAUOF 指标工坊"
#property version "1.00"
#property strict
#include <Trade\Trade.mqh>
//--- 输入参数
input group "========== 均线参数 =========="
input int Fast_Period = 7; // 快速均线周期(EMA 7)
input int Slow_Period = 63; // 慢速均线周期(EMA 63)
input group "========== 多周期设置 =========="
input bool Use_M1 = true; // 启用 1 分钟周期
input bool Use_M5 = true; // 启用 5 分钟周期
input bool Use_M15 = true; // 启用 15 分钟周期
input int Min_Timeframes = 2; // 最少共振周期数(1~3)
input bool Require_Cross = false; // 要求至少一个周期出现均线交叉
input group "========== RSI 参数 =========="
input int RSI_Period = 14; // RSI 周期
input double RSI_Level = 50.0; // RSI 强弱分界线
input ENUM_TIMEFRAMES RSI_Timeframe = PERIOD_M5; // RSI 使用的周期
input group "========== MACD 参数 =========="
input int MACD_Fast = 12; // MACD 快线周期
input int MACD_Slow = 26; // MACD 慢线周期
input int MACD_Signal = 9; // MACD 信号线周期
input ENUM_TIMEFRAMES MACD_Timeframe = PERIOD_M5; // MACD 使用的周期
input group "========== 交易参数 =========="
input double Lot_Size = 0.1; // 固定手数
input int Stop_Loss = 300; // 止损点数(0=不设止损)
input int Take_Profit = 600; // 止盈点数(0=不设止盈)
input bool Close_On_Opposite = true; // 反向信号平仓
input ulong Magic_Number = 777777; // 魔术号
input string Trade_Comment = "多周期共振"; // 订单备注
//--- 全局变量
CTrade trade;
// M1 均线句柄
int handleM1_Fast, handleM1_Slow;
double m1_fast[], m1_slow[];
// M5 均线句柄
int handleM5_Fast, handleM5_Slow;
double m5_fast[], m5_slow[];
// M15 均线句柄
int handleM15_Fast, handleM15_Slow;
double m15_fast[], m15_slow[];
// RSI 句柄
int handleRSI;
double rsiBuffer[];
// MACD 句柄
int handleMACD;
double macdMain[], macdSignal[];
datetime lastBarTime = 0;
//+------------------------------------------------------------------+
//| 初始化函数 |
//+------------------------------------------------------------------+
int OnInit()
{
trade.SetExpertMagicNumber(Magic_Number);
trade.SetDeviationInPoints(20);
// 创建 M1 均线句柄
if(Use_M1)
{
handleM1_Fast = iMA(_Symbol, PERIOD_M1, Fast_Period, 0, MODE_EMA, PRICE_CLOSE);
handleM1_Slow = iMA(_Symbol, PERIOD_M1, Slow_Period, 0, MODE_EMA, PRICE_CLOSE);
if(handleM1_Fast == INVALID_HANDLE || handleM1_Slow == INVALID_HANDLE)
{
Print("创建 M1 均线句柄失败");
return INIT_FAILED;
}
ArraySetAsSeries(m1_fast, true);
ArraySetAsSeries(m1_slow, true);
}
// 创建 M5 均线句柄
if(Use_M5)
{
handleM5_Fast = iMA(_Symbol, PERIOD_M5, Fast_Period, 0, MODE_EMA, PRICE_CLOSE);
handleM5_Slow = iMA(_Symbol, PERIOD_M5, Slow_Period, 0, MODE_EMA, PRICE_CLOSE);
if(handleM5_Fast == INVALID_HANDLE || handleM5_Slow == INVALID_HANDLE)
{
Print("创建 M5 均线句柄失败");
return INIT_FAILED;
}
ArraySetAsSeries(m5_fast, true);
ArraySetAsSeries(m5_slow, true);
}
// 创建 M15 均线句柄
if(Use_M15)
{
handleM15_Fast = iMA(_Symbol, PERIOD_M15, Fast_Period, 0, MODE_EMA, PRICE_CLOSE);
handleM15_Slow = iMA(_Symbol, PERIOD_M15, Slow_Period, 0, MODE_EMA, PRICE_CLOSE);
if(handleM15_Fast == INVALID_HANDLE || handleM15_Slow == INVALID_HANDLE)
{
Print("创建 M15 均线句柄失败");
return INIT_FAILED;
}
ArraySetAsSeries(m15_fast, true);
ArraySetAsSeries(m15_slow, true);
}
// 创建 RSI 句柄
handleRSI = iRSI(_Symbol, RSI_Timeframe, RSI_Period, PRICE_CLOSE);
if(handleRSI == INVALID_HANDLE)
{
Print("创建 RSI 句柄失败");
return INIT_FAILED;
}
ArraySetAsSeries(rsiBuffer, true);
// 创建 MACD 句柄
handleMACD = iMACD(_Symbol, MACD_Timeframe, MACD_Fast, MACD_Slow, MACD_Signal, PRICE_CLOSE);
if(handleMACD == INVALID_HANDLE)
{
Print("创建 MACD 句柄失败");
return INIT_FAILED;
}
ArraySetAsSeries(macdMain, true);
ArraySetAsSeries(macdSignal, true);
Print("========== 多周期多指标共振 EA 初始化成功 ==========");
Print("均线参数:快线 EMA", Fast_Period, " 慢线 EMA", Slow_Period);
Print("监控周期:M1=", Use_M1, " M5=", Use_M5, " M15=", Use_M15);
Print("最少共振周期数:", Min_Timeframes, " 要求交叉:", Require_Cross);
Print("RSI 周期:", RSI_Period, " 分界线:", RSI_Level, " 周期:", EnumToString(RSI_Timeframe));
Print("MACD 参数:", MACD_Fast, "/", MACD_Slow, "/", MACD_Signal, " 周期:", EnumToString(MACD_Timeframe));
Print("手数:", Lot_Size, " 止损:", Stop_Loss, " 止盈:", Take_Profit);
return INIT_SUCCEEDED;
}
//+------------------------------------------------------------------+
//| 清理函数 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
if(Use_M1)
{
if(handleM1_Fast != INVALID_HANDLE) IndicatorRelease(handleM1_Fast);
if(handleM1_Slow != INVALID_HANDLE) IndicatorRelease(handleM1_Slow);
}
if(Use_M5)
{
if(handleM5_Fast != INVALID_HANDLE) IndicatorRelease(handleM5_Fast);
if(handleM5_Slow != INVALID_HANDLE) IndicatorRelease(handleM5_Slow);
}
if(Use_M15)
{
if(handleM15_Fast != INVALID_HANDLE) IndicatorRelease(handleM15_Fast);
if(handleM15_Slow != INVALID_HANDLE) IndicatorRelease(handleM15_Slow);
}
if(handleRSI != INVALID_HANDLE) IndicatorRelease(handleRSI);
if(handleMACD != INVALID_HANDLE) IndicatorRelease(handleMACD);
Print("========== 多周期多指标共振 EA 已停止 ==========");
}
//+------------------------------------------------------------------+
//| 主循环函数 |
//+------------------------------------------------------------------+
void OnTick()
{
// 以 M1 为基准判断新 K 线
datetime currentBarTime = iTime(_Symbol, PERIOD_M1, 0);
if(currentBarTime == lastBarTime)
return;
lastBarTime = currentBarTime;
// 等待 RSI 和 MACD 数据准备就绪
if(BarsCalculated(handleRSI) < 2 || BarsCalculated(handleMACD) < 2)
return;
// 复制 RSI 和 MACD 数据
if(CopyBuffer(handleRSI, 0, 0, 3, rsiBuffer) < 3) return;
if(CopyBuffer(handleMACD, 0, 0, 3, macdMain) < 3) return;
if(CopyBuffer(handleMACD, 1, 0, 3, macdSignal) < 3) return;
// 统计多头、空头、交叉信号的周期数
int bullCount = 0;
int bearCount = 0;
bool hasBullCross = false;
bool hasBearCross = false;
// 判断各个时间周期的均线排列
if(Use_M1 && CheckTimeframe(PERIOD_M1, handleM1_Fast, handleM1_Slow, m1_fast, m1_slow,
bullCount, bearCount, hasBullCross, hasBearCross) == false)
return;
if(Use_M5 && CheckTimeframe(PERIOD_M5, handleM5_Fast, handleM5_Slow, m5_fast, m5_slow,
bullCount, bearCount, hasBullCross, hasBearCross) == false)
return;
if(Use_M15 && CheckTimeframe(PERIOD_M15, handleM15_Fast, handleM15_Slow, m15_fast, m15_slow,
bullCount, bearCount, hasBullCross, hasBearCross) == false)
return;
// 判断开仓信号
bool buySignal = false;
bool sellSignal = false;
// 多头信号:多周期均线共振 + RSI > 50 + MACD 主线 > 信号线
if(bullCount >= Min_Timeframes &&
rsiBuffer[0] > RSI_Level &&
macdMain[0] > macdSignal[0])
{
// 如果要求交叉信号
if(Require_Cross)
{
if(hasBullCross) buySignal = true;
}
else
{
buySignal = true;
}
}
// 空头信号:多周期均线共振 + RSI < 50 + MACD 主线 < 信号线
if(bearCount >= Min_Timeframes &&
rsiBuffer[0] < RSI_Level &&
macdMain[0] < macdSignal[0])
{
// 如果要求交叉信号
if(Require_Cross)
{
if(hasBearCross) sellSignal = true;
}
else
{
sellSignal = true;
}
}
// 检查当前持仓
bool hasPosition = false;
int positionType = -1;
for(int i = PositionsTotal() - 1; i >= 0; i--)
{
ulong ticket = PositionGetTicket(i);
if(ticket > 0 && PositionGetString(POSITION_SYMBOL) == _Symbol &&
PositionGetInteger(POSITION_MAGIC) == Magic_Number)
{
hasPosition = true;
positionType = (int)PositionGetInteger(POSITION_TYPE);
// 反向信号平仓
if(Close_On_Opposite)
{
if(positionType == POSITION_TYPE_BUY && sellSignal)
{
trade.PositionClose(ticket);
Print("反向信号触发,平多单,票号:", ticket);
}
else if(positionType == POSITION_TYPE_SELL && buySignal)
{
trade.PositionClose(ticket);
Print("反向信号触发,平空单,票号:", ticket);
}
}
break;
}
}
// 如果没有持仓,根据信号开仓
if(!hasPosition)
{
double price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double sl = 0, tp = 0;
if(buySignal)
{
if(Stop_Loss > 0)
sl = NormalizeDouble(price - Stop_Loss * _Point, _Digits);
if(Take_Profit > 0)
tp = NormalizeDouble(price + Take_Profit * _Point, _Digits);
if(trade.Buy(Lot_Size, _Symbol, price, sl, tp, Trade_Comment))
{
Print("========== 多周期多指标共振开多单 ==========");
Print("多头周期数:", bullCount, " 有金叉:", hasBullCross);
Print("RSI:", NormalizeDouble(rsiBuffer[0], 2), " MACD主线:", NormalizeDouble(macdMain[0], 5));
Print("价格:", price, " 止损:", sl, " 止盈:", tp);
}
else
{
Print("开多单失败,错误代码:", GetLastError());
}
}
else if(sellSignal)
{
price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
if(Stop_Loss > 0)
sl = NormalizeDouble(price + Stop_Loss * _Point, _Digits);
if(Take_Profit > 0)
tp = NormalizeDouble(price - Take_Profit * _Point, _Digits);
if(trade.Sell(Lot_Size, _Symbol, price, sl, tp, Trade_Comment))
{
Print("========== 多周期多指标共振开空单 ==========");
Print("空头周期数:", bearCount, " 有死叉:", hasBearCross);
Print("RSI:", NormalizeDouble(rsiBuffer[0], 2), " MACD主线:", NormalizeDouble(macdMain[0], 5));
Print("价格:", price, " 止损:", sl, " 止盈:", tp);
}
else
{
Print("开空单失败,错误代码:", GetLastError());
}
}
}
}
//+------------------------------------------------------------------+
//| 检查单个时间周期的均线状态 |
//+------------------------------------------------------------------+
bool CheckTimeframe(ENUM_TIMEFRAMES period, int handleFast, int handleSlow,
double &fastBuf[], double &slowBuf[],
int &bullCount, int &bearCount,
bool &hasBullCross, bool &hasBearCross)
{
// 等待指标计算完成
if(BarsCalculated(handleFast) < 2 || BarsCalculated(handleSlow) < 2)
return false;
// 复制最近 3 根 K 线的数据
if(CopyBuffer(handleFast, 0, 0, 3, fastBuf) < 3) return false;
if(CopyBuffer(handleSlow, 0, 0, 3, slowBuf) < 3) return false;
// 判断当前排列(索引 0 = 最新 K 线)
bool isBull = (fastBuf[0] > slowBuf[0]);
bool isBear = (fastBuf[0] < slowBuf[0]);
if(isBull) bullCount++;
if(isBear) bearCount++;
// 判断是否出现交叉(前一根关系相反)
if(isBull && fastBuf[1] <= slowBuf[1])
hasBullCross = true; // 金叉
if(isBear && fastBuf[1] >= slowBuf[1])
hasBearCross = true; // 死叉
return true;
}作品说明
这是一个多周期均线 + 多指标四重过滤策略,结合了空间(多周期)和强度(RSI/MACD)两个维度的验证:
核心逻辑:
- 同时监控 1 分钟、5 分钟、15 分钟三个周期的 EMA7/63 排列
- 至少 N 个周期(可设置)同时多头/空头排列
- RSI 在 50 上方(多头区)或下方(空头区)
- MACD 主线与信号线关系确认趋势方向
- 四重验证通过才开仓,大幅降低假信号
使用说明
一、安装步骤
- 将代码保存为
Multi_TF_Multi_Indicator_EA.mq5 - 放入 MT5 数据文件夹:
文件 → 打开数据文件夹 → MQL5 → Experts - 在 MetaEditor 中编译(F7)
- 重启 MT5,在"智能交易系统"中找到该 EA
- 拖到任意周期图表上(建议 M1 或 M5 图表)
- 勾选"允许自动交易",调整参数后点击确定
二、核心参数调整
均线设置
- 快速周期:默认 EMA 7
- 慢速周期:默认 EMA 63
- 这两个参数会同时应用到 M1、M5、M15 三个周期
多周期共振设置
- 启用的周期:可单独关闭某个周期
- 最少共振周期数:
- 1 = 任意一个周期满足(激进)
- 2 = 至少两个周期同向(推荐)
- 3 = 三个周期完全共振(保守)
- 要求交叉信号:开启后必须至少一个周期出现均线交叉
RSI 设置
- 周期:默认 14
- 分界线:默认 50(> 50 多头,< 50 空头)
- 使用的周期:默认 M5(可改为 M1、M15 等)
MACD 设置
- 参数:默认 12/26/9(标准设置)
- 使用的周期:默认 M5(可改为 M1、M15 等)
- 判断逻辑:主线 > 信号线 = 多头,主线 < 信号线 = 空头
交易参数
- 手数:黄金建议 0.1~0.5
- 止损:黄金 300~500 点
- 止盈:建议止盈 = 止损 × 2
- 反向信号平仓:开启后四重验证反转立即平仓
三、策略逻辑
开多条件(必须同时满足四项):
- 至少 N 个周期(M1/M5/M15)EMA7 > EMA63
- RSI > 50(强势区)
- MACD 主线 > 信号线(多头趋势)
- 可选:至少一个周期出现金叉
开空条件(必须同时满足四项):
- 至少 N 个周期 EMA7 < EMA63
- RSI < 50(弱势区)
- MACD 主线 < 信号线(空头趋势)
- 可选:至少一个周期出现死叉
平仓方式:
- 触及止盈/止损
- 四重验证反转(可选)
四、参数组合推荐
黄金 XAUUSD
- 保守型:最少共振 3 + 要求交叉 + 止损 500 点
- 平衡型:最少共振 2 + 不要求交叉 + 止损 300 点(推荐)
- 激进型:最少共振 1 + 不要求交叉 + 止损 200 点
外汇货币对(如 EURUSD)
- 参数需调整:止损 50~100 点,止盈 100~200 点
- 可将 EMA 改为 12/26 或 20/50
RSI 和 MACD 周期选择
- 短线:都用 M1 或 M5
- 中线:都用 M5 或 M15
- 混合:RSI 用 M5,MACD 用 M15(更稳健)
五、优势与风险
优势
- 四重验证大幅降低假信号
- 多周期共振捕捉趋势启动点
- RSI 和 MACD 确认趋势强度和方向
- 参数灵活,可适配不同品种和风格
风险
- 信号较少,可能错过部分行情
- 多重验证导致入场稍晚
- 震荡行情仍可能出现连续止损
- 需要足够历史数据(至少 100 根 M15 K 线)
六、使用建议
- 实盘前测试
- 模拟账户测试 1~2 周
- 策略测试器回测至少 3~6 个月
- 观察最大回撤和盈亏比
- 适用场景
- 趋势明显的品种(黄金、原油)
- 避开重大新闻时段(非农、加息)
- 震荡行情暂停或调高共振要求
- 资金管理
- 单次风险不超过账户 2%
- 回撤超过 15% 立即停止检查
- 可配合固定止损 + 移动止损
- 优化方向
- 可增加 ATR 动态止损
- 可添加时间过滤(避开亚洲盘)
- 可加入持仓时间管理(超过 N 根 K 线强制平仓)
- 监控要点
- 定期查看"智能交易"日志
- 关注开仓时的多头/空头周期数
- 观察 RSI 和 MACD 数值是否合理
七、注意事项
- 服务器断线可能漏掉信号,保持网络稳定
- 不同经纪商点差不同,影响止损止盈效果
- 历史数据不足时指标计算会失败,需等待数据加载
- 每次修改参数后建议先观察几天再加大仓位
- 本策略适合趋势品种,不适合窄幅震荡品种
AI 解读根据源码逐行分析写成,供参考,以实际运行为准
这是什么
这是一个多周期多指标四重过滤 EA,同时监控 1 分钟、5 分钟、15 分钟三个周期的均线排列,结合 RSI 强弱区和 MACD 趋势方向,只有四个维度全部验证通过才开仓。用空间(多周期共振)和强度(指标过滤)两个维度筛选信号,目标是在趋势行情中减少假突破和震荡噪音。
逻辑原理
均线共振判断:在 M1、M5、M15 三个周期上分别计算 EMA7(快线)和 EMA63(慢线)。每个周期独立判断快线在慢线上方(多头排列)还是下方(空头排列)。统计有多少个周期满足同一方向,达到设定的最少周期数(比如至少 2 个)才算共振成立。如果开启"要求交叉",还会检查至少一个周期出现了金叉(快线上穿慢线)或死叉(快线下穿慢线)。
RSI 强弱过滤:在指定周期(默认 M5)读取 RSI 值,判断当前是强势区还是弱势区。多头信号要求 RSI > 50,空头信号要求 RSI < 50。这一层过滤排除了均线排列与市场动能不一致的情况。
MACD 趋势过滤:在指定周期(默认 M5)读取 MACD 主线和信号线。多头信号要求主线 > 信号线,空头信号要求主线 < 信号线。这一层再次确认当前趋势方向与均线共振一致。
开仓逻辑:
- 多单:至少 N 个周期多头排列 + RSI > 50 + MACD 主线 > 信号线(+ 可选:有金叉)
- 空单:至少 N 个周期空头排列 + RSI < 50 + MACD 主线 < 信号线(+ 可选:有死叉)
平仓逻辑:触及止盈或止损。如果开启"反向信号平仓",当四重验证出现反向信号时立即平仓(多单遇到空头信号平仓,空单遇到多头信号平仓)。
仓位和风控:固定手数开仓,每个订单设置固定点数的止损和止盈。EA 在 M1 周期 K 线更新时检查信号,但均线、RSI、MACD 都从各自设定的周期读取数据。
参数说明
均线参数
- Fast_Period(默认 7):快速均线周期,用 EMA 算法
- Slow_Period(默认 63):慢速均线周期,用 EMA 算法
多周期设置
- Use_M1(默认 true):启用 1 分钟周期的均线判断
- Use_M5(默认 true):启用 5 分钟周期的均线判断
- Use_M15(默认 true):启用 15 分钟周期的均线判断
- Min_Timeframes(默认 2):最少共振周期数,1 = 任意一个满足就开仓(激进),2 = 至少两个同向(平衡),3 = 三个全部同向(保守)
- Require_Cross(默认 false):是否要求至少一个周期出现均线交叉才开仓,开启后更保守
RSI 参数
- RSI_Period(默认 14):RSI 计算周期
- RSI_Level(默认 50.0):强弱分界线,> 50 多头区,< 50 空头区
- RSI_Timeframe(默认 PERIOD_M5):RSI 从哪个周期读取,可改为 M1、M15 等
MACD 参数
- MACD_Fast(默认 12):MACD 快线周期
- MACD_Slow(默认 26):MACD 慢线周期
- MACD_Signal(默认 9):MACD 信号线周期
- MACD_Timeframe(默认 PERIOD_M5):MACD 从哪个周期读取
交易参数
- Lot_Size(默认 0.1):固定手数,黄金建议 0.1~0.5,外汇根据账户调整
- Stop_Loss(默认 300):止损点数,黄金 300~500 点常见,设为 0 不设止损(不推荐)
- Take_Profit(默认 600):止盈点数,建议是止损的 2 倍,设为 0 不设止盈
- Close_On_Opposite(默认 true):反向信号平仓,开启后四重验证反转立即平仓,关闭后只靠止盈止损
- Magic_Number(默认 777777):魔术号,区分不同 EA 的订单
- Trade_Comment(默认"多周期共振"):订单备注
怎么用
将代码保存为 .mq5 文件,放到 MT5 数据文件夹的 MQL5\Experts 目录,在 MetaEditor 中编译。重启 MT5 后在导航器的"智能交易系统"中找到这个 EA,拖到任意周期的图表上(建议用 M1 或 M5 图表)。勾选"允许自动交易",调整参数后确定。EA 会在后台同时监控三个周期的均线和指标,在 M1 K 线更新时检查信号。图表上不会画任何东西,开平仓信息在"交易"选项卡和日志里查看。
适用场景
适合品种:黄金(XAUUSD)、原油等波动大的品种,外汇主要货币对(EURUSD、GBPUSD 等)也可以,但需调整止损止盈点数和均线周期。
适合行情:中短期趋势行情,或震荡后的突破行情。多周期共振 + 多指标过滤能在趋势确认后再进场,避免单周期假突破。不适合极端震荡行情,因为多周期很难同时满足,信号会很少。
周期选择:EA 可以挂在任何周期图表上,但它在 M1 K 线更新时检查信号。如果你希望降低检查频率节省资源,可以改代码把 iTime(_Symbol, PERIOD_M1, 0) 改成 M5 或更高周期。
参数组合建议:
- 保守型:Min_Timeframes = 3,Require_Cross = true,Stop_Loss = 500,信号很少但质量高
- 平衡型:Min_Timeframes = 2,Require_Cross = false,Stop_Loss = 300(默认推荐)
- 激进型:Min_Timeframes = 1,Require_Cross = false,Stop_Loss = 200,信号多但可能误判
外汇品种需调整止损止盈(一般 50~100 点),均线周期也可以改成 12/26 或 20/50。
风险提示
信号滞后:均线本身是滞后指标,EMA7/63 在黄金上可能滞后几十点。多周期共振进一步要求多个周期确认,会让入场点更晚。适合抓中段趋势,不适合抢短线反转。
震荡行情信号少:四重过滤大幅降低假信号,但副作用是震荡时可能长时间没有信号。如果市场在多空反复,多周期很难同时满足条件。
止损设置:默认 300 点止损在黄金上是常见值,但不同品种和账户点值不同。外汇品种要改小,指数或原油要根据波动率调整。止损设为 0 会导致扛单风险,不推荐。
参数敏感性:Min_Timeframes 和 Require_Cross 对信号数量影响很大。如果设得太严格(Min_Timeframes = 3 + Require_Cross = true),可能一个月都没几个信号。建议先在策略测试器里回测不同参数组合。
反向平仓逻辑:Close_On_Opposite = true 时,四重验证反转会立即平仓。如果行情剧烈波动导致指标短暂反转,可能过早平仓错过后续利润。保守用户可以关闭这个选项,只靠止盈止损出场。
指标周期选择:RSI 和 MACD 默认从 M5 读取。如果你把它们改成 M1,信号会更敏感但噪音更多;改成 M15 会更稳健但可能错过短期机会。建议根据自己的交易风格测试。
无重绘:代码从已完成 K 线(索引 0)读取数据,不会重绘。但要注意 MT5 的 K 线索引 0 是当前未完成的 K 线,在 K 线内指标值会随价格变化。EA 在 M1 K 线更新时检查,所以实际是在 M1 新 K 线开盘时判断,此时其他周期的 K 线可能还没完成,指标值可能继续变化。
常见问题
- 这个 EA 会重绘吗?
- 不会。代码从已完成 K 线读取均线和指标数据,不会事后改变历史信号。但要注意在 K 线内指标值会随价格变化,EA 在 M1 新 K 线时判断,此时其他周期 K 线可能未完成。
- 最少共振周期数设多少合适?
- 默认 2 是平衡选择,至少两个周期同向既能过滤假信号又不会太保守。设 1 信号多但质量低,设 3 信号很少但更可靠。建议先用默认值回测,再根据信号频率调整。
- 可以用在黄金以外的品种吗?
- 可以。外汇主要货币对、原油、指数都能用,但要调整止损止盈点数(外汇一般 50~100 点)和均线周期(可以改成 12/26 或 20/50)。波动小的品种信号会更少。
- 为什么长时间没有信号?
- 四重过滤要求多周期均线排列 + RSI 强弱 + MACD 趋势全部一致,震荡行情很难满足。如果觉得信号太少,可以降低 Min_Timeframes 或关闭 Require_Cross,但会增加假信号风险。
- RSI 和 MACD 用哪个周期比较好?
- 默认都用 M5 是平衡选择。短线交易可以改成 M1,中线可以改成 M15。也可以混合使用(比如 RSI 用 M5,MACD 用 M15)会更稳健但信号更少。需自行测试找到适合自己的组合。
Multi-Timeframe EMA RSI MACD Resonance EA for MT5
This EA monitors EMA7/63 alignment across M1, M5, and M15 simultaneously, combined with RSI strength and MACD trend filters. It only opens positions when at least N timeframes resonate and all four conditions align, significantly reducing false signals.
Source code is shown above. Compiled EX5 files are available to VIP members.
评论
还没有人评论,来抢个沙发。