EA 开发与 Builder beginner 12 分钟阅读

不用写代码做一个 MT5 MACD EA:完整步骤,以及为什么它最好看的那个结果最危险

MACD EA 免编程做法:在浏览器里用积木接出一套 MACD 交叉智能交易系统,编译成真正的 .ex5,然后老老实实地把它的数字读一遍。文中还包含一个最该让你警惕的结果——Builder 自己的参数搜索,在这个 MACD 模板上找到了一组样本外得分 1.14 的设置,而同一组设置放到它前面那个窗口上,只有 0.74。

发布于 · 审阅于

不用写代码在 MT5 里做一个 MACD EA 智能交易系统,办法是放一个 Start 节点、两个 MACD 积木——一个读主线,一个读信号线——在它们之间放一个 Cross 条件,再加一个下单积木。服务器会替你生成并编译 MQL5,交还给你一个真正的 .ex5。十五分钟,不碰语法。

接下来才是决定这个文件值不值钱的那一半。这套配方有一份实测记录,而其中最讨人喜欢的那个数字,恰恰是你最不该信的那个。

你最终会做出什么

一个只做一个货币对的单持仓 EA:MACD 线上穿信号线时买入,下穿时卖出,配一个固定止损和一个固定止盈,编译成一个真正的 .ex5。八个积木。

这个数目里有两个积木的存在只有一个理由:MACD 指标积木一次只返回一条线。

开始之前:MACD 报告的是什么,以及你在读哪一条线

你需要一个邮箱已验证的免费账户(设计免费,也不需要登录;编译成 .ex5 才需要)、大约十五分钟,以及一个 MetaTrader 5 终端。

MACD 用一条快速移动平均线减去一条慢速移动平均线,然后再把这个差值平滑一次。所以线量的是两条均线彼此拉开了多远,而信号线就是这个量度被平滑之后的样子。一条 MACD 规则所能说出的一切,都是关于两条均线之间距离的陈述——这意味着它是一件穿着振荡指标外衣的趋势工具,而且它继承了造出它的那两条均线各自的滞后。

Builder 的 MACD 积木暴露出下面这些参数:

积木参数默认值它控制什么
fast_ema12那条更快的均线。取值范围 1–999
slow_ema26更慢的那条。这两条之间的差距就是整个信号
signal_period9在你去比较它之前,这个差值被平滑到什么程度
lineMODE_MAIN这个积木输出哪一条线——MODE_MAINMODE_SIGNAL
applied_pricePRICE_CLOSE哪个价格进入计算
shift00 是正在形成的那根K线,1 是最后一根已收盘的
timeframe当前图表M1 到 MN1 中的任意一个,与图表本身无关地读取

line 是那一行会改变你整个流程形状的参数。它是一个二选一的下拉项,所以一个积木只给你一条线。因此信号线交叉需要两个 MACD 积木;零轴交叉只需要一个,外加一次与常数的比较。

分步操作:在 Builder 里把这个 MACD EA 搭出来

  1. 打开 EA Builder,从图库载入 macd_signal 模板,或者从一张空白画布开始自己接线。
  2. 从 Utility 面板放一个 Start 节点。没有它,校验会以 EAB-E202 中止构建。
  3. 加一个 MACD 积木,把 line 留在 MODE_MAIN。第一次搭的时候把 12/26/9 原样留着,这样你的结果才能和下面那条基线对得上。
  4. 再加第二个 MACD 积木,周期完全相同,把 line 设成 MODE_SIGNAL。同一个指标、同样的参数、不同的输出——这一步就是人们会跳过的那一步,而跳过它,正是他们的流程在拿一条线和它自己作比较的原因。
  5. 把两者都接进一个 Cross 条件。Cross 接收两个输入,问的是其中一条有没有在这根K线上穿越另一条;它的 cross_typecrossovercrossunder,所以买入一侧和卖出一侧是两个各自独立的条件,而不是一个反过来用。
  6. 把每个条件分别接进它自己的 Open Buy / Open Sell 积木。把指标直接接到下单积木上会被 EAB-E205 打回来——一个原始数值并不是一个决策。
  7. Settings 标签页里设定风险。共享的默认值是 50 点止损、100 点止盈和固定 0.01 手;一个没有有效止损的流程,会在构建之前触发 CRITICAL 级预检诊断。
  8. Measure,然后对照面板打印出来的那条线来读结果:盈利因子至少 1.2、至少 60 笔交易、回撤不差于 20%。
  9. Compile .ex5,通过 File > Open Data Folder 把文件移进 MQL5/Experts,刷新导航器,然后在策略测试器里测一遍,再让它靠近任何一个账户。
  • Start 节点
  • MACD 积木,line = MODE_MAIN
  • MACD 积木,line = MODE_SIGNAL
  • Cross —— 买入用 crossover,卖出用 crossunder
  • Open Buy 和 Open Sell
  • 止损与止盈
  • 编译成 .ex5
为什么信号线这套配方需要两个 MACD 积木,而零轴那一套不需要

如果你想要的是零轴那一版,就删掉第二个 MACD 积木,把 Cross 换成 Compare,它的运算符是 > < >= <= == !=,它的 offset 默认为 0。“MACD 主线在零轴之上”这句话说的是快速均线压根就在慢速均线之上——这是一个比两条线相触罕见得多、也晚得多的事件。面板里还随附了 OsMA,它直接把主线减信号线的差值作为一个数值输出,所以一条柱状图规则只需要一个积木,而不是两个。

MACD 的进场、出场与参数设置

参数模板取值改动它会怎样
fast_ema12调低反应更早,交叉也频繁得多;交易笔数会比胜率先动
slow_ema26调高会拉大快线必须跨过的那段距离,于是信号来得更晚也更少
signal_period9比较线上的平滑量。越短交叉越多,其中大多是噪声
lineMODE_MAIN这不是一个调参旋钮——它决定你搭出来的是哪一条规则
shift0设为 1 表示只在已收盘的K线上做决定
止损50 点(共享默认值)被搜索过的范围是 30–80
止盈100 点(共享默认值)被搜索过的范围是 60–250

关于滞后,这也是对这个指标最诚实的那一句抱怨。 这里的每一个数值,都是两条均线叠在第三条上的输出。所以一次交叉是一份报告,说的是某段行情已经发生了——问题只在于晚了多少。缩短 fast_ema 买来的是提前,代价付在假交叉上;拉长 slow_ema 买来的是可靠,代价付在行情走完之后才到的入场上。这个模板自己的记录透露了它落在哪里:一年 698 笔交易,在同一套条件下实测的十三个趋势与动能模板里排第二多。那是一套在不停触发的设计,而不停触发正是短滞后的代价。

那次搜索动了什么,又没动什么。 记录在案的参数搜索只改动了止损和止盈——SL30-80 × TP60-250,H1 上跨三个窗口的 12 组组合。它一次都没有改动过 fast_emaslow_emasignal_period 所以本页上没有任何东西能支持“12/26/9 是对的、是错的、或者还能改进”这一类主张。它支持的是一个窄得多、也有用得多的主张:没有任何一组止损与止盈组合救得了这套设计。

回测这个 MACD EA

这是 Builder 自己的实测记录,不是一次重跑,而这份对比里的每一个模板都共用下面那一套条件。我们如何测试说明了这些记录被要求达到的标准。

macd_signal 基线数值
盈利因子0.93
交易笔数698
最大回撤-1.05%
净利-93.93
按盈利因子在邻居中的排名13 个中排第 8
按交易笔数在邻居中的排名13 个中排第 2
通过 Measure 面板自身的合格线
测试条件
实验编号EXP-MACD-RECIPE-BASELINE-001
父实验EXP-BUILDER-TEMPLATE-BASELINE-001
品种 / 时间周期USDJPYm M5
期间2025-06-01 – 2026-06-09
模型M1 OHLC (Model=1)
入金10,000
环境Exness MT5
基线实测于2026-06-18
最近验证2026-08-25
1.14记录在案的那次搜索找到的最好样本外盈利因子
0.74同一组设置在它前面那个窗口上的得分
13 个中排第 8MACD 模板在同样条件下实测的趋势与动能设计中排在哪里

这个搜索结果值得多写几句。 图库里有八个模板带着记录在案的参数搜索,而这八个全部以 no_robust_edge 收场。但它们失败的方式有两种,而这个差别比它们共有的那个结论更要紧。其中两个压根就没产出过一组盈利的设置,连搜索被拟合的那段时期上都没有。macd_signal 是唯一一个产出过样本外越过 1.0 的设置的模板——在最宽的止盈上是 1.14 到 1.15——然后在它前面那个窗口上得分 0.74 到 0.77。清单自己对这件事的用词是依赖市场状态

请读一读这对测试意味着什么。如果你把数据切成两半,在前半段上拟合、在后半段上检验,这个模板会递给你一个通过的结果。唯一抓住它的,是去检验搜索从未见过的第三段时期。这就是前进分析在一个具体案例里的论据,而它比任何一句关于过拟合的泛泛警告都更值钱。

MACD 在它的邻居中间处在什么位置,下面全部是在上面那一套条件下实测的:

模板积木数盈利因子回撤交易笔数
ma_perfect_order_trend101.07-0.36%305
mtf_osc_filter271.04-0.64%187
consecutive_bars_momentum71.03-0.36%377
ao_ama_trend140.97-0.95%239
adx_trend120.96-0.76%534
multi_tf_trend150.96-0.51%247
ma_crossover90.95-0.84%420
macd_signal80.93-1.05%698
ma_slope_trend70.92-1.00%478
mtf_adx_filter140.92-0.84%343
elder_ray90.90-1.34%529
pitch_trail_trend90.77-1.61%467
dynamic_sl_trend90.68-1.62%708

把这十三个按它们自己的交易笔数中位数 420 切开,两半会干净地分离。交易更少的那六个,平均盈利因子 1.00283 笔交易、回撤 -0.61%。交易更多的那六个,平均 0.86569 笔交易、回撤 -1.23%——结果更差,深度是两倍。全部三个越过 1.0 的设计都坐在更安静的那一半里。MACD 坐在更忙的那一半。

这是对一套设置下十三个设计的描述,不是一条定律:入场逻辑、节点数和出场方式也都不一样,所以触发频率并没有被确立为原因。但这就是摆在你面前的规律,而随附的 MACD 模板站在它不好的那一边。

需要避开的常见错误

相信一次样本外通过。 这正是这个模板用来演示的那个错误。一段被留出来的时期只是一个样本,而一条动能规则可以赢下单个样本,因为市场在那段时间里恰好在走趋势。在你相信一个数字之前,先用搜索从未见过的第三个窗口去测它。

拿一条线和它自己作比较。 如果两个 MACD 积木都被留在 MODE_MAIN 上,Cross 条件比较的就是两个完全相同的值,于是永远不会触发——或者靠舍入误差触发。在你纳闷交易笔数为什么是零之前,先检查两个积木上的 line 参数。

把一次交叉读成一个预测。 MACD 是一条均线的两条均线。一次交叉报告的是某段行情已经进行了若干根K线。这里的设计选择是你接受多大的迟到,而不是要不要接受迟到。

一直调止损和止盈,直到资金曲线好看为止。 记录在案的那次搜索已经系统性地做过这件事了——12 组组合、三个窗口——报出来的是 no_robust_edge。如果你手工调参赢过了一次系统性搜索,请先怀疑调参。

堆叠动能过滤器。 上面那套组合就是这种直觉的实测版本:回撤放大到 3.76 倍,换来一个略差一点的盈利因子。

和另一个 EA 并排运行却不把它们分开。 同一个账户上的每一个 EA 都需要自己的魔术号,否则其中一个 EA 的出场逻辑会把另一个的持仓平掉。

下一步与变体

什么时候干脆别用 MACD。 在一个震荡区间里,两条均线会反复交叉,而每一次交叉都是噪声——一个触发飞快的默认设置,恰恰是震荡区间最会惩罚的东西。如果你说不出一个能在横盘期间把这条规则关掉的条件,那就要么补上一个,要么换一个不依赖两条均线拉开距离的思路。

按证据强弱排序、值得一试的变体。 先试零轴那一版:它少一个积木,触发也少得多,而邻居圈里更安静的那一半,正是每一个越过 1.0 的结果所在的地方。然后在 MACD 积木内部把同一条规则放到更高的 timeframe 上试,这样能在不动图表的前提下把信号放慢。只有在这之后才去动周期——而且一次只改一个。

然后认真测一遍。 Measure 面板是K线级别的、近似的;它是一道筛子,不是一份判决。MT5 回测怎么做从头到尾走了一次真实运行,包括报告里那两个回撤数字该信哪一个。不用写代码做一个 RSI EA 是这套配方的姊妹篇,失效方式正好相反——它的搜索什么都没赢过,所以它更容易被否掉,也因此比这一篇更不具启发性。不用写代码做一个 MT5 EA 覆盖了更宽的积木词汇表,而回测指南会更深入地讲本页所主张的那个前进分析步骤。

而如果你想校准一份有文档的记录长什么样已发布的 EA 每一个都带着完整的平仓交易清单和一份运行清单。在你相信任何一套策略之前——包括你自己搭出来的那一套——先拿其中一份去对照上面那张表。

常见问题

MACD 的信号线交叉和零轴交叉有什么区别?
它们问的是两个不同的问题,在 Builder 里也是两套不同的接线。信号线交叉问的是 MACD 线有没有穿越它自己那条 9 周期均线,所以需要两个 MACD 积木——一个设成 MODE_MAIN,一个设成 MODE_SIGNAL——一起接进一个 Cross 条件。零轴交叉问的是动能有没有整个换了符号,所以只要一个设成 MODE_MAIN 的 MACD 积木,再和 0 做一次 Compare 比较。信号线那一版触发得频繁得多,也早得多;零轴那一版触发得很少,而且很晚。随附的模板用的是信号线这一版,而它是它整个邻居圈里第二忙的一套设计。
EA 的 MACD 参数应该设成多少?
本页上没有任何东西能告诉你,而这一点值得直说。Builder 的 MACD 积木默认在收盘价上取 12/26/9,而这个模板记录在案的参数搜索只改动了止损和止盈——SL30-80 乘 TP60-250,跨 3 个窗口的 12 组组合。它一次都没有改动过 fast_ema、slow_ema 或 signal_period。任何一篇报出所谓最佳周期组合的文章,报的都是一种偏好,不是一次测量。那次搜索真正确立的结论是:没有任何一组止损与止盈组合能让这套设计变得稳健。
MACD 交叉策略能赚钱吗?
按它出厂的样子,不能。在美元/日元 M5 上实测一年,Builder 的 macd_signal 模板在 698 笔交易上收在盈利因子 0.93——在同一套条件下实测的十三个趋势与动能模板里,它是第二忙的一套设计,而按结果排是十三个里的第 8。更有用的是,它记录在案的搜索确实找到过一组样本外达到 1.14 到 1.15 的设置,而这组设置在更早的那个窗口上跌到了 0.74 到 0.77。这就是诚实的答案:看起来能赚钱的结果是存在的,而它们没能跨市场状态站住。
我该给 MACD EA 再加几个指标做过滤吗?
在假设它有帮助之前,先去看看这种组合实际上做出了什么。图库随附了一套包含这个模板本身的组合——macd_signal 加上一条 CCI 水平规则再加上 Elder Ray——在完全相同的条件下,它收在盈利因子 0.91,而单独的 MACD 是 0.93,同时在 2,016 笔交易上把回撤放大到了 3.76 倍。这三个部件读的都是同一段价格的动能,所以它们倾向于互相同意、一起触发,而不是分散风险。一道过滤有用,是因为它有时候会和你的入场唱反调;同一个想法的三个版本做不到这一点。