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 正确;真的;错误的;在上面的程序中为假。我现在有两个问题:
为什么:IsTradeAllowed(NULL, TimeGMT()); //alert 2
return 对于变灰的符号为真?
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);
请看下面的脚本:
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 正确;真的;错误的;在上面的程序中为假。我现在有两个问题:
为什么:
IsTradeAllowed(NULL, TimeGMT()); //alert 2
return 对于变灰的符号为真?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);