IsTradeAllowed 没有返回我所期望的

IsTradeAllowed not returning what I would expect

请看下面的脚本:

void OnStart()
{
   Alert(IsTradeAllowed()); //alert 1
   Alert(IsTradeAllowed(NULL, TimeGMT())); //alert 2
   Alert(IsTradeAllowed(Symbol(), TimeGMT())); //alert 3
   Alert(IsTradeAllowed("GBPUSD", TimeGMT())); //alert 4
}

这个returns:

true //for alert 1
true //for alert 2
false //for alert 3
false //for alert 4

作为警报 2 returns: true,那么我希望警报 3 和警报 4 为 return true。

我在工作日的一天中的多个时间尝试过 运行ning 代码。代码 return 在周末的结果相同。我还尝试将代码放入脚本和 EA 中。每次我得到相同的结果。对此有解释吗?我已经尝试了这里的建议:https://www.mql5.com/en/docs/runtime/tradepermission

Symbol() returns:“GBPUSD”。在我看来,每个警报都应该 return 为真,但这里似乎并非如此。顺便说一句,如果脚本在 MetaEditor 中 运行,我注意到 Symbol() returns 是模拟账户观察列表顶部的符号,但是它 returns 是图表上显示的符号if 运行 在模拟账户内。

经纪人是Oanda

更新时间为 04/03/21 19:55

我现在发现,如果我右键单击市场观察并 select: 显示全部,则会出现更多符号。然后我可以看到有些符号是灰色的,有些符号不是。未变灰的符号,例如USDGBP-g return 当 运行 运行上面的程序时我会期望什么,即 alert 1-alert 4 =true。变灰的符号,例如USDGBP return 正确;真的;错误的;在上面的程序中为假。我现在有两个问题:

  1. 为什么:IsTradeAllowed(NULL, TimeGMT()); //alert 2 return 对于变灰的符号为真?

  2. GBPUSD-g中的-g是什么意思?

我在我的 ICMarkets 版本的 MetaTrader4 中尝试了您的脚本。在禁用自动交易的情况下,我得到结果:

当我将自动交易设置为启用使用 Ctrl+E 快捷方式时,在所有情况下脚本 return true.

我建议您在另一个帐户或不同的经纪商上尝试这个脚本。如果这有帮助,您应该与您的经纪人就此问题进行沟通。最后一个选项是重新安装 MetaTrader 以确保所有配置文件都是正确的。

IsTradeAllowed 检查 Expert Advisor 是否允许交易以及交易环境是否繁忙。

没有任何参数的函数版本将检查 EA 是否已应用正确的权限(勾选“允许实时交易”并启用“自动交易”)。

函数的第二种形式:

bool IsTradeAllowed(const string symbol, datetime tested_time);

检查 EA 是否被允许根据图表的规范进行交易 selected(要查看此内容,请从市场观察 window 右键单击​​一个符号,从菜单中弹出select“规范”)。

例如

IsTradeAllowed(Symbol(), D'2021.03.06 12:00');

将检查当前交易品种是否可以在即将到来的周六进行交易(应该是 false)。

如果您得到了不理想的结果,您应该检查您的经纪商是否正确设置了“规格”。

编辑

我已经在您正在使用的代理 OANDA 中测试了该命令,该命令按预期运行。

NULL 对 Symbol 无效,它的使用使命令以其第一种形式运行(即忽略时间日期)。

我建议不要使用警报来检查输出,而是尝试以下操作。

   string cmnt;

   cmnt=StringConcatenate("Alert 1: ",IsTradeAllowed());
   cmnt=StringConcatenate(cmnt+"\r\n","Alert 2: ",IsTradeAllowed(NULL, TimeGMT()));
   cmnt=StringConcatenate(cmnt+"\r\n","Alert 3: ",IsTradeAllowed(Symbol(), TimeGMT()));
   cmnt=StringConcatenate(cmnt+"\r\n","Alert 4: ",IsTradeAllowed("GBPUSD", TimeGMT()));

   Comment(cmnt);