【问题标题】:IsTradeAllowed not returning what I would expectIsTradeAllowed 没有返回我所期望的
【发布时间】:2021-05-30 06:51:03
【问题描述】:

请看下面的脚本:

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 返回:真时,我希望警报 3 和警报 4 返回真。

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

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

经纪人是 Oanda。

21 年 4 月 3 日 19:55 更新

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

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

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

【问题讨论】:

    标签: mql4


    【解决方案1】:

    IsTradeAllowed 检查是否允许 EA 交易并且交易上下文不忙。

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

    函数的第二种形式:

    bool IsTradeAllowed(const string symbol, datetime tested_time);
    

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

    例如

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

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

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

    编辑

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

    NULL 对 Symbol 无效,它的使用使得命令函数以其第一种形式(即忽略 timedate)。

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

       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 进行测试
    【解决方案2】:

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

    当我使用Ctrl+E 快​​捷方式设置自动交易以启用时,在所有情况下脚本都会返回true

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

    【讨论】:

    • 这是您的预期吗?
    • 文档link 说没有参数的函数检查是否允许EA(仅)。使用品种和时间参数,函数检查是否允许任何交易。但在“返回值”部分,它只是关于 EA,所以我不确定。如果我对文档的理解是正确的,那就是我的预期。
    • 我只在该链接中看不到对 EA 的引用?
    • 在那个有两个参数的函数的描述中,没有关于EA的说法,所以我不确定是关于EA的。 “函数的第二种形式在指定时间内检查指定品种的交易状态。”当没有参数的部分清楚地说明 EA 时:“检查 EA 是否被允许交易并且交易上下文不忙。”
    • 您希望现在英镑兑美元的四个警报返回什么?
    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    相关资源
    最近更新 更多