请看下面的脚本:
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。我现在有两个问题:
为什么:IsTradeAllowed(NULL, TimeGMT()); //alert 2
为灰显的符号返回 true?
-g 在 GBPUSD-g 中是什么意思?
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);
谢谢。IsTradeAllowed(Symbol(), D'2021.03.06 12:00'); 尽管我使用了哪个日期和时间,但总是返回 false。我已经尝试了数千次,每次都返回 false。
请注意,我也尝试过: IsTradeAllowed(Symbol(), D'2021.03.03 12:00'); 和许多其他日期(所有工作日),它总是返回 FALSE。我的意思是总是 100% 的时间。
你用的是哪个经纪人?
经纪人是 oanda。
我已经进一步更新了我的答案以使用 OANDA 进行测试