当您开发出一款盈利的EA)并打算将其商业化出售,或者希望提供一个功能受限的演示版本供潜在用户测试时,通常需要为 EA 加入一些使用限制机制。这些机制可以防止您的 EA 被未经授权的人员随意传播和使用,确保只有付费用户或在特定条件下才能运行。您甚至可以考虑将 EA 的使用范围限制在特定的交易账户或经纪商。
-
仅限模拟账户运行 (
IsDemo()
): 如果想让 EA 只能在模拟账户上运行(例如,作为免费试用版),可以使用 MQL4内置函数IsDemo()
。该函数会检查当前 EA 运行的账户是否为模拟账户。// 在 OnInit()函数的早期进行检查 if (IsDemo() == false) // 如果当前不是模拟账户 { Alert("重要提示:此 EA 版本仅限在模拟账户上使用!"); // ExpertRemove(); // 可以选择直接移除EA return(INIT_FAILED); // 推荐返回 INIT_FAILED 阻止EA加载 // MQL4 中可以在 init() 返回非0值,或在 start() 中 return(0) }
-
基于账户信息进行限制: 您还可以通过检查特定的账户信息(如账户名称、账号、经纪商名称)来限制 EA 的使用。
AccountNumber()
: 返回当前账户的账号。这是最常用且易于实现的授权方式,您可以将 EA 绑定到特定的客户账号。// 假设您为客户 123456 授权 long authorizedAccount = 123456; // 将客户账号硬编码或通过其他安全方式获取 if (AccountNumber() != authorizedAccount) { Alert("授权失败:当前账户 (", AccountNumber(), ") 未被授权使用此 EA!"); // ExpertRemove(); return(INIT_FAILED); // 或其他终止方式 }
AccountName()
: 返回账户持有人的名称。AccountBroker()
: 返回账户所属经纪商的服务器名称。 若要使用AccountName()
或AccountBroker()
进行精确匹配,建议先通过Print()
函数在您的测试账户上打印出这些函数的实际返回值,以确保您用于比较的字符串完全一致(包括大小写、空格等)。
-
关于MQL4代码保护的提醒: 如果您决定商业化销售 EA,需要意识到MQL4的
.ex4
文件尽管是编译后的可执行文件,但仍存在被反编译的风险,使得源代码可能被破解者获取。虽然可以通过一些技术手段(例如,将核心逻辑封装到外部的 MQL 库文件.ex4
或 Windows DLL 文件中)来增加破解难度,但并不能完全杜绝坚定的破解行为。