有些用户花了不少时间修改一个 EA,反复测试参数、修正逻辑、排查日志,终于得到一份能够正常运行的程序。到了需要让合作方试用、让客户查看效果,或者把指标交给其他设备运行时,新的担心又出现了:文件发出去以后,对方会不会看到自己写下的源码?自己究竟应该发 .mq5,还是发 .ex5?如果想减少源码暴露风险,MetaEditor 里看到的 MQL5 Cloud Protector 又是做什么的?

也有人把源码和成品文件混为一谈,觉得“反正都能运行,发 MQ5 和发 EX5 应该差不多”。等到文件真正交出去以后,才意识到:把源码交给别人,和把可执行成品交给别人,权限边界完全不同。

能运行的成品文件和能继续修改的源码,从来不是一回事。

在 MT5 开发与交付中,.mq5 源码承担的是阅读、修改、维护和继续开发的角色;.ex5 文件承担的是在平台中运行程序的角色。而 MQL5 Cloud Protector 讨论的,是在你准备交付可运行成品文件时,如何为已经编译好的 EX5 增加保护,减少源码逻辑被暴露的风险。

它不是源码备份工具,也不是授权协议,更不能替你决定哪些文件有权分享。

程序保护解决的是交付边界问题,不是帮你找回丢失的源码。

本文将从新手容易理解的角度,说明 MQ5 源码、EX5 成品文件、MQL5 Cloud Protector、MetaTrader Market 产品保护机制与源码分享边界之间的关系。平台功能说明可参考 MetaTrader 5官网。本文不讨论破解、反编译或绕过保护的方法,也不指导传播未经授权的代码。

MQ5 源码、EX5 成品与受保护 EX5 三种文件区别示意图
图 1:MQ5 源码可继续开发维护;EX5 供 MT5 运行;受保护 EX5 在成品基础上增加交付保护,三者用途与权限边界不同。

一、MQ5 源码文件和 EX5 可执行文件有什么区别?

想理解 MT5 EX5 保护,第一步不是先研究 Cloud Protector,而是先分清 .mq5 和 .ex5。

MQ5:可以继续阅读和修改的源码

.mq5 是 MQL5 程序的源代码文件。

如果你写的是 EA、指标或脚本,真正承载程序结构、变量、函数和逻辑说明的,通常就是 MQ5 源码。

拥有 MQ5 源码的人,在具备开发能力和授权的前提下,通常可以:

  • 打开文件查看代码;
  • 修改程序逻辑;
  • 调整参数和功能;
  • 修复错误;
  • 重新编译新版本;
  • 继续维护或二次开发。

可以把 MQ5 理解为一份完整的制作说明书,里面写清楚程序是怎样组成的。

EX5:用于平台运行的编译文件

.ex5 是将 MQ5 源码经过 MetaEditor 编译后生成的可执行文件。

MT5 平台加载 EA、指标或脚本时,实际运行的通常是 EX5 文件,而不是直接把源码逐行拿来执行。

EX5 更像按照制作说明完成后的成品。它可以被平台加载运行,但它并不等于你保存了原始源码,也不适合代替开发版本管理。

通俗来说:

  • MQ5 是能继续修改的源文件;
  • EX5 是供 MT5 运行的成品文件。

因此,在把程序提供给别人使用之前,最先要想清楚的是:对方需要的是“能够运行”,还是“能够阅读和修改”。

如果对方只是试用或运行程序,通常没有必要直接交付 MQ5 源码。如果合作内容确实包括继续修改、共同开发或代码验收,那就应先通过明确授权约定,再决定是否提供源码。

关于从 MQ5 编译为 EX5 的基本流程,可参考 MQL5 Wizard 与 EA 编译入门 中的说明。

二、MQL5 Cloud Protector 是什么?

MQL5 Cloud Protector 是 MetaEditor 中用于为 MQL 程序可执行文件增加额外保护的在线服务。

简单理解,它服务的对象不是“正在编辑的代码文本”,而是程序已经编译形成的运行文件。

在常规流程中,你先在 MetaEditor 中把自己的 MQ5 源码编译成 EX5,然后通过 Tools / 工具 → MQL5 Cloud Protector 对生成的可执行文件应用额外保护。处理完成后,你会得到可以用于后续运行或交付的受保护 EX5 文件。

它适合解决这样一种实际需求:希望别人可以在 MT5 中运行你的程序,但不希望为了让对方试用,就直接把可继续阅读和修改的源码交出去。

不过,需要把边界说清楚:

  • Cloud Protector 是可执行文件保护工具;
  • 它不是源码版本管理工具;
  • 它不是商业授权合同;
  • 它不能替你确认某段代码是否拥有分享权;
  • 它也不代表程序经过保护后就具备某种使用效果或交易可靠性。

如果你准备提供的是自己有权交付的 EA、指标或脚本成品文件,它可以成为交付流程中的一个保护环节。

MQL5 Cloud Protector 处理流程图:本机编译 EX5、上传可执行部分、云端保护后返回受保护文件
图 2:MQL5 Cloud Protector 处理流程——先在本地将 MQ5 编译为 EX5,再对可执行部分做云端保护;MQ5 源码不作为处理对象提交。

三、为什么“只处理编译后的 EX5,不直接上传源码”很重要?

很多开发用户第一次听到“Cloud Protector”时,会本能担心:既然是云端保护,是不是要把自己的源码传到服务器上?

这是源码隐私中最需要确认的一点。

MQL5 Cloud Protector 的处理逻辑是:

  1. 源码先在用户自己的电脑上编译;
  2. 本地生成 EX5 可执行文件;
  3. 发送到服务端的是已编译文件的可执行部分;
  4. 服务端对可执行文件进行额外保护并返回结果;
  5. MQ5 源码本身不作为处理对象提交给该服务。

为什么这一点重要?

因为对于开发者来说,最敏感的内容往往不是“别人能不能运行程序”,而是源码中的结构、判断逻辑、实现方式和后续可修改能力。

如果保护流程需要直接上传源码,用户自然会更担心源码隐私。Cloud Protector 的定位,是让额外保护施加在已经编译过的成品文件上,而不是让用户用源码交换保护。

不过,这并不意味着开发者从此可以忽略所有安全问题。你的 MQ5 源码仍然要自行备份,编译文件仍然要确认交付对象,合作范围仍然要通过授权与协议说明清楚。

四、如何在 MetaEditor 中使用 MQL5 Cloud Protector?

对已经拥有源码并准备生成交付文件的用户来说,基本流程并不复杂。

步骤 1:确认自己拥有交付权限

在操作之前,先确认程序是否属于:

  • 自己独立编写的源码;
  • 已获得明确授权可以交付的定制代码;
  • 合作协议中允许生成并提供运行文件的项目。

如果源码属于他人、购买产品、客户保密项目或未经授权的商业程序,不应因为自己能接触文件,就擅自进行保护后再传播。

步骤 2:保留 MQ5 源码备份

保护 EX5 之前,应确保自己妥善保存了 .mq5 源码、.mqh 依赖文件、参数文件、相关项目文件、当前可回退版本,以及必要的测试与变更记录。

因为受保护 EX5 的目的是运行和交付,不是日后继续开发所依赖的源码版本。

步骤 3:在 MetaEditor 中打开项目或主源码文件

打开你要发布或提供测试的 MQL5 项目,确认当前源码版本就是你准备交付的版本。

这一步不要大意。很多人保护了文件之后才发现,自己处理的是旧版本、测试版本,或者带有不该交付功能的内部文件。

步骤 4:执行 MQL5 Cloud Protector

在 MetaEditor 中通过 Tools / 工具 → MQL5 Cloud Protector 启动保护流程。平台会先完成编译,再对生成的可执行文件进行额外保护。

步骤 5:查看编译日志和生成文件位置

处理完成后,应查看 MetaEditor 的编译日志,确认是否成功生成受保护文件、输出文件位置在哪里、当前处理的是哪个项目或主源码,以及是否存在错误或警告。

步骤 6:在受控环境中重新测试成品文件

不要因为保护过程完成,就直接把文件发出去。应先在自己控制的测试环境或模拟环境中确认:文件是否能正常加载、基本功能是否符合预期、参数是否正确、所需依赖是否齐全、日志是否出现异常,以及交付包中是否混入源码或敏感内容。

五、经过保护的 EX5 文件适合哪些交付或测试场景?

MQL5 Cloud Protector 更适合“需要运行成品,但不需要直接开放源码”的情形。

向合作方提供功能试用文件

如果合作方只需要加载程序观察功能,而不需要查看或修改源码,可以考虑交付经过保护的 EX5 文件,而不是直接发送 MQ5。

向客户提供已约定的运行版本

在定制开发项目中,如果协议约定交付的是可运行成品,而不是完整源码,那么保护后的 EX5 可以作为交付文件的一部分。

但这里必须以双方授权约定为前提。不能把“程序受到保护”理解成可以忽略交付合同、验收范围和后续维护安排。

在多台本人控制的设备上运行成品

Cloud Protector 生成的受保护文件不与特定用户电脑绑定,因此可以像普通 EX5 一样在其他电脑上运行。这对开发者在本人控制的不同测试环境中验证成品文件,也可能比较方便。

不适合用它解决什么问题?

它不适合替代:

  • MQ5 源码备份;
  • MQL5 Storage 或版本管理;
  • 合作授权协议;
  • 代码审查;
  • 程序功能测试;
  • 第三方源码的合法使用确认。

Cloud Protector 帮助保护交付的运行文件,但不能替代完整的开发管理流程。

六、MQL5 Cloud Protector 和 Market 产品保护有什么区别?

有些用户会看到官方说明提到,MQL5 Cloud Protector 的保护方式与 MetaTrader Market 中产品文件所采用的保护机制相近,于是误以为两者完全一样。

可以用比较简单的方式理解。

Market 产品保护:和产品分发及用户设备授权结合

在 MetaTrader Market 中,开发者提交的产品文件会经过相应保护流程,并且产品的使用通常与购买、授权和特定用户设备激活机制结合。

也就是说,Market 不只是“保护文件”,它还处在一个产品销售、下载安装和授权管理体系中。

Cloud Protector:为开发者自己的可执行文件增加保护

MQL5 Cloud Protector 则更偏向开发者主动对自己生成的 EX5 成品文件进行额外保护。

官方说明中的一个关键区别是:通过 Cloud Protector 处理的文件不会绑定到某个用户电脑,可以像普通 EX5 文件一样在其他电脑中运行。

可以通俗总结为:

对比项目 MQL5 Cloud Protector MetaTrader Market 产品保护
主要目的 为开发者的 EX5 成品增加保护 为 Market 分发产品提供保护与授权体系支持
是否针对编译文件
是否直接上传 MQ5 源码进行处理 不是 产品提交与市场规则应以官方流程为准
是否绑定特定用户电脑 不绑定 与产品购买和设备激活机制相关
更适合的场景 自行交付、测试或授权范围内分发运行文件 通过 Market 发布和授权产品

对于普通开发新手来说,不需要把两套机制研究得过于复杂。只要知道:Cloud Protector 不是把文件自动变成 Market 产品,也不会自动增加销售授权限制,它更关注可执行文件本身的额外保护。

MQL5 Cloud Protector 与 MetaTrader Market 产品保护区别对比示意图
图 3:Cloud Protector 侧重开发者自行保护 EX5 成品、不绑定单台电脑;Market 保护还与购买、下载及设备授权体系结合。

七、为什么保护 EX5 仍然不能替代自己保存 MQ5 源码?

这是源码管理里最容易后悔的一件事。

有些用户在生成了 EX5,甚至又通过 Cloud Protector 进行了保护后,就觉得成品已经很安全,不再认真保存源码。等到后来想修改参数逻辑、修复问题、适配新版本或继续开发时,才发现自己只剩一个能运行的文件,却没有可以继续修改的原始源码。

程序保护解决的是交付边界问题,不是帮你找回丢失的源码。

你可以继续用之前的比喻理解:

  • MQ5 像完整菜谱;
  • 普通 EX5 像已经做好的成品菜;
  • 受保护 EX5 像包装好、便于交付的成品菜。

不管包装做得多好,它都不能代替你手里的原始菜谱。

因此,在任何交付或发布动作之前,都应该先确保:源码有可靠备份;当前版本有清晰记录;依赖文件没有遗漏;参数文件已保存;重要变更有说明;交付文件和开发源码分开放置。

如果你已经开始认真维护 EA 或指标项目,最好把源码备份与版本管理当成固定习惯,而不是等到文件丢失后才补救。

八、向合作方发送文件前,为什么还要明确授权范围?

技术保护只是文件层面的手段,不能代替人与人之间对使用边界的确认。

在把程序文件交给别人之前,先想清楚:对方需要的是试用、运行,还是修改权限?不同需求对应的交付方式和授权范围完全不同。

只允许试用或运行

如果对方只需要在约定环境中测试或运行程序,可以说明:提供的是 EX5 运行文件;是否允许转交他人;是否限制测试用途;是否包含后续更新;是否允许在其他设备使用;测试反馈如何提交。

允许共同修改或继续开发

如果合作方需要阅读或修改代码,那么可能涉及 MQ5 源码交付。此时更应该说明:谁拥有源码著作权或使用权;哪些部分允许修改;是否允许再分发;修改后的版本如何归属;是否涉及第三方库或保密内容;如何保存版本和协作记录。

委托开发项目

如果源码来自定制委托开发,不能只靠“文件已经交付”判断所有权与分享边界。开发方和委托方应依据合同或明确约定确认源码、成品、修改权和再发布权。

程序保护能减少文件暴露风险,但无法替代授权关系。

九、商业源码、委托代码和第三方代码为什么更要谨慎?

并不是所有出现在你电脑里的 MQ5 或 EX5 文件,你都有权重新保护、分享或发布。

购买或租用的商业工具

如果你通过正规渠道取得一个商业 EA 或指标,通常获得的是约定范围内的使用权,而不是将文件重新分发、重新包装或提供给其他人的权利。

委托开发代码

定制项目中的源码归属、运行文件交付、维护和再分发权限,应该以双方协议为准。如果这些内容没有说清楚,不要擅自把文件发送给额外第三方。

团队或合作项目代码

多人共同开发的项目中,可能包含他人编写的模块、客户保密要求或尚未公开的功能。任何对外提供文件的动作,都应该先确认权限。

来源不明的文件

如果你根本不知道一个文件来自哪里,更不应该通过保护后重新对外传播。保护不是洗清来源问题的工具,更不是把不明代码变成自己作品的方法。

源码隐私保护的前提,是你本来就有权管理和交付这些文件。加载第三方程序前的权限核对,可参考 MT5 EA 权限与加载前安全检查

十、新手发布 EA 或指标文件前的源码安全检查清单

  1. 这个程序是我自己编写的,还是来自他人或商业渠道?
  2. 我是否拥有向对方提供该文件的明确授权?
  3. 对方真正需要的是运行文件,还是需要查看和修改源码?
  4. 如果只需要运行,是否没有必要直接发送 MQ5 源码?
  5. 当前准备交付的源码版本是否已经确认无误?
  6. 是否已经妥善备份 MQ5、MQH 和必要依赖文件?
  7. 是否保存了参数文件、测试说明和版本记录?
  8. 是否需要对 EX5 成品文件使用 MQL5 Cloud Protector?
  9. 保护完成后,是否在受控环境中重新测试过 EX5 文件?
  10. 交付文件夹里是否误放了 MQ5 源码或内部说明文件?
  11. 源码或参数中是否包含账号、路径、密钥或其他敏感资料?
  12. 是否向对方明确说明文件的试用、运行、转发与修改边界?
  13. 如果属于委托或合作项目,是否确认双方对源码归属的约定?
  14. 是否避免传播未经授权的第三方或商业代码?
  15. 是否理解保护文件不等于程序功能已经验证可靠?

十一、源码与成品文件分享检查清单

检查内容 MQ5 源码文件 EX5 成品文件 受保护 EX5 文件
主要用途 阅读、修改、维护和继续开发 在 MT5 中加载运行 在 MT5 中运行,并增加成品保护
是否适合直接提供给只需试用的人 通常不适合 视授权范围决定 更适合已明确授权的运行交付场景
是否能继续修改程序逻辑 可以 不能替代源码开发 不能替代源码开发
是否需要自己保留源码备份 必须 必须另存 MQ5 必须另存 MQ5
是否能替代版本管理 不能 不能 不能
是否解决授权协议问题 不能 不能 不能
分享前重点检查 源码归属与隐私内容 功能版本与交付权限 功能验证、权限边界与源码备份
源码与成品文件交付前检查清单示意图:授权、备份、保护测试与交付边界
图 4:交付前检查——确认授权与交付对象、备份 MQ5、按需使用 Cloud Protector、受控环境重测,并避免误发源码或敏感信息。

十二、总结:保护成品之前,先分清源码和交付边界

对于自己写过或定制过 EA、指标、脚本的用户来说,源码隐私确实值得重视。辛苦调整出来的程序,不应因为一次随意交付,就把可继续修改的源码能力一起暴露出去。

MQ5 源码 是开发和维护的基础;EX5 文件 是供 MT5 加载运行的成品;MQL5 Cloud Protector 则用于在交付成品文件时,为已编译的 EX5 增加额外保护。

重要的是,Cloud Protector 处理的是编译后的可执行文件,而不是把 MQ5 源码直接提交出去。这对关注源码隐私的开发者来说,是理解该功能时最关键的一点。

但再好的成品保护,也不能替代源码备份、版本管理、授权约定和交付前检查。

能运行的成品文件和能继续修改的源码,从来不是一回事。程序保护解决的是交付边界问题,不是帮你找回丢失的源码。在把文件交给别人之前,先想清楚对方需要的是试用、运行,还是修改权限。

本文仅作 MQL5 Cloud Protector、MT5 EX5 保护、MQ5 源码隐私与程序交付边界科普,不讨论破解、反编译或绕过保护的方法,不指导传播未经授权的代码,也不将程序保护与任何交易结果挂钩。

FAQ:MQL5 Cloud Protector 与源码保护常见问题

  1. 1. MQL5 Cloud Protector 是什么?

    MQL5 Cloud Protector 是 MetaEditor 提供的在线程序保护服务,用于对已经编译生成的 EX5 可执行文件增加额外保护,适合在授权范围内交付可运行程序文件时使用。

  2. 2. MQ5 和 EX5 有什么区别?

    MQ5 是可以阅读和修改的源代码文件;EX5 是源码编译后生成、供 MT5 平台加载运行的可执行文件。能运行的 EX5 不能替代需要长期保存的 MQ5 源码。

  3. 3. 使用 Cloud Protector 时会上传 MQ5 源码吗?

    按照官方说明,Cloud Protector 的额外保护应用于已经编译的可执行文件,源码本身不会被发送到该服务。程序会先在本机编译为 EX5,再对可执行部分进行保护处理。

  4. 4. 在 MetaEditor 中怎样使用 MQL5 Cloud Protector?

    打开需要处理的项目或主 MQ5 源码文件后,可以通过 Tools / 工具 → MQL5 Cloud Protector 启动保护流程。完成后应查看编译日志确认输出文件位置,并重新测试成品文件。

  5. 5. 受保护的 EX5 可以在其他电脑运行吗?

    按照官方说明,MQL5 Cloud Protector 生成的文件不会绑定到特定用户电脑,可以像普通 EX5 文件一样在其他电脑上运行。

  6. 6. Cloud Protector 和 MetaTrader Market 产品保护是一样的吗?

    两者使用的保护方式相近,但用途不同。Market 还涉及产品发布、购买和设备授权体系;Cloud Protector 更适合开发者自行保护可执行文件,并且其生成文件不与特定用户电脑绑定。

  7. 7. 使用了 Cloud Protector 后,还需要保存 MQ5 源码吗?

    必须保存。受保护 EX5 仍然只是运行成品,不能替代源码备份、修改维护和版本恢复。开发者应妥善保存 MQ5、MQH 和相关项目文件。

  8. 8. 向合作方提供试用文件时,可以直接发 MQ5 吗?

    是否提供源码取决于授权范围和合作需求。如果对方只需要运行或试用程序,通常没有必要直接提供可修改的 MQ5 源码;具体交付方式应由双方明确约定。

  9. 9. 可以使用 Cloud Protector 保护购买来的商业 EA 后再分享吗?

    不应该。只有在你拥有明确保存、处理和交付授权的情况下,才可以处理相关程序文件。未经授权的商业代码或第三方程序不应重新保护、传播或发布。

  10. 10. Cloud Protector 能保证程序不会出现问题或获得更好结果吗?

    不能。Cloud Protector 关注的是可执行文件的保护和交付边界,不负责验证程序逻辑、运行稳定性或任何交易表现。