保持敬畏之心
交易是一场持久战

MQL4(46):EA演示版或账户使用限制

当您开发出一款盈利的EA)并打算将其商业化出售,或者希望提供一个功能受限的演示版本供潜在用户测试时,通常需要为 EA 加入一些使用限制机制。这些机制可以防止您的 EA 被未经授权的人员随意传播和使用,确保只有付费用户或在特定条件下才能运行。您甚至可以考虑将 EA 的使用范围限制在特定的交易账户或经纪商。

  1. 仅限模拟账户运行 (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)
    }
    
  2. 基于账户信息进行限制: 您还可以通过检查特定的账户信息(如账户名称、账号、经纪商名称)来限制 EA 的使用。

    • AccountNumber(): 返回当前账户的账号。这是最常用且易于实现的授权方式,您可以将 EA 绑定到特定的客户账号。
      // 假设您为客户 123456 授权
      long authorizedAccount = 123456; // 将客户账号硬编码或通过其他安全方式获取
      
      if (AccountNumber() != authorizedAccount)
      {
          Alert("授权失败:当前账户 (", AccountNumber(), ") 未被授权使用此 EA!");
          // ExpertRemove();
          return(INIT_FAILED); // 或其他终止方式
      }
      
    • AccountName(): 返回账户持有人的名称。
    • AccountBroker(): 返回账户所属经纪商的服务器名称。 若要使用 AccountName()AccountBroker() 进行精确匹配,建议先通过 Print() 函数在您的测试账户上打印出这些函数的实际返回值,以确保您用于比较的字符串完全一致(包括大小写、空格等)。
  3. 关于MQL4代码保护的提醒: 如果您决定商业化销售 EA,需要意识到MQL4的 .ex4 文件尽管是编译后的可执行文件,但仍存在被反编译的风险,使得源代码可能被破解者获取。虽然可以通过一些技术手段(例如,将核心逻辑封装到外部的 MQL 库文件 .ex4或 Windows DLL 文件中)来增加破解难度,但并不能完全杜绝坚定的破解行为。

赞(0)
未经允许不得转载:图道交易 » MQL4(46):EA演示版或账户使用限制
分享到