Warm tip: This article is reproduced from serverfault.com, please click

mql4-IsTradeAllowed 没有返回我所期望的

(mql4 - IsTradeAllowed not returning what I would expect)

发布于 2021-02-28 15:03:23

请看下面的脚本:

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

这将返回:

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

当警报 2 返回:true 时,我希望警报 3 和警报 4 返回 true。

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

Symbol() 返回:“GBPUSD”。在我看来,每个警报都应该返回 true,但是这里的情况似乎并非如此。顺便说一句,我注意到如果脚本在 MetaEditor 中运行,Symbol() 会返回模拟帐户监视列表顶部的符号,但是如果在模拟帐户中运行,它会返回图表上显示的符号。

经纪人是Oanda。

21 年 4 月 3 日 19:55 更新

我现在发现,如果我右键单击 Market Watch 并选择:显示全部,则会出现更多符号。然后我可以看到有些符号是灰色的,有些符号不是。未变灰的符号(例如 USDGBP-g)返回我在运行上述程序时所期望的值,即 alert 1-alert 4 =true。灰色的符号,例如 USDGBP 返回真;真的; 错误的; 在上面的程序中为 false。我现在有两个问题:

  1. 为什么:IsTradeAllowed(NULL, TimeGMT()); //alert 2为灰显的符号返回 true?

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

Questioner
w0051977
Viewed
0
PaulB 2021-03-05 03:01:52

IsTradeAllowed 检查是否允许 EA 交易并且交易环境不忙。

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

函数的第二种形式:

bool IsTradeAllowed(const string symbol, datetime tested_time);

检查是否允许 EA 根据所选图表的规格进行交易(要查看这一点,从市场观察窗口右键单击一个代码,从弹出的菜单中选择“规格”)。

例如

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

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

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

编辑

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

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

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

   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);