想象一下,你精心聘请了一位顶级的交易员(你的EA)来管理账户。你把他带到了交易大厅,却忘记给他办理进入交易室的“门禁卡”。他空有一身本领,却什么也做不了。
在MetaTrader平台中,“允许实时交易”、“允许导入DLL”这些选项,就是我们必须授予EA的“门禁卡”。作为专业的EA开发者,我们不能假设用户总会正确地设置好一切。我们必须教会EA在开始工作前,先自己检查一下“门禁卡”是否都已配齐。
这项检查,最佳的执行地点,就是在OnInit()
函数的开头。这是EA的“岗前培训”,确保一切就绪,才能上岗。
第一项检查:“我被授权交易了吗?” —— IsTradeAllowed()
这是最基础、也是最重要的权限。如果用户没有勾选“允许实时交易”,那么你所有的OrderSend()
, OrderClose()
等函数都将失效。
- 视觉信号:当这项权限被禁用时,图表右上角的EA名称旁边,会出现一个标志性的“哭脸”☹️。
- 函数检测:我们可以用
IsTradeAllowed()
函数来检测。如果它返回false
,就意味着EA被“绑住了手脚”。
提示用户进行正确设置:
if (IsTradeAllowed() == false)
{
Alert("EA 交易功能未启用! \n请在智能交易系统属性 -> 常规 -> 勾选 '允许实时交易 (Allow live trading)'。");
// 也可以考虑 return(INIT_FAILED); 来阻止EA继续加载
}
学长建议:一个清晰、准确、指导性强的Alert()
弹窗,能为你省去大量的售后沟通成本。它直接告诉用户“问题是什么”以及“如何解决”。
第二项检查:“我能使用我的‘黑匣子’工具吗?” —— IsLibrariesAllowed()
如果你的EA像我们之前讨论的那样,调用了一个外部编译好的.ex4
库文件(我们称之为“黑匣子”工具),那么用户就必须勾选“允许导入外部EA的函数”这个选项。
函数检测:使用IsLibrariesAllowed()
函数。
提示用户进行正确设置:
if (IsLibrariesAllowed() == false)
{
Alert("EA 调用外部 MQL 库的功能未启用! \n请在智能交易系统属性 -> 常规 -> 勾选 '允许导入外部EA的函数 (Allow import of external experts)'。");
}
第三项检查:“我能呼叫‘C++外援’吗?” —— IsDllsAllowed()
如果你的EA更进一步,需要调用外部的.dll
动态链接库(比如用C++写的复杂算法模块),这需要一项更高级别的授权。因为DLL可以与操作系统进行更深度的交互,所以MT4默认对此项权限的把控非常严格。
函数检测:使用IsDllsAllowed()
函数。
提示用户进行正确设置:
if (IsDllsAllowed() == false)
{
Alert("EA 调用 DLL 动态链接库的功能未启用! \n请在智能交易系统属性 -> 常规 -> 勾选 '允许导入 DLL (Allow DLL imports)'。");
}
参考下图,它展示了“EA属性”对话框中这些关键的勾选项:
通过在EA启动时加入这些自检程序,你的EA就从一个被动的“工具”,进化成了一个能与用户沟通、能自我诊断问题的“智能助手”,这正是专业EA所应具备的品质。