MT4启动时AccountInfo()和SymbolInfo()返回0

时间:2018-10-06 12:06:32

标签: mql4 metatrader4

当我将自定义指标附加到图表上时,关闭MT4并重新打开它,指标会正常初始化,但在首次运行start()时每个AccountInfo()或SymbolInfo()的实例都返回0.0,从而导致抛出多个函数“零分差”错误。当我重新初始化指标(不关闭MT4)时,AccountInfo()和SymbolInfo()返回它们通常执行的值。 如果我注释掉所有依赖于这两个功能的函数,那么在重启MT4之后指标会初始化而不会引发错误。

有人有类似的问题吗?

为了澄清:仅当我将指标连接到图表时,才会出现问题,关闭MT4,然后再次重新打开;当我已经打开MT4并附加它时,AccountInfo()和SymbolInfo()返回正常值。

其他信息:

  • 使用#property严格
  • 使用start()代替OnCalculate()(这样我就可以手动运行main函数,而无需等待新的滴答声)
  • 请求的帐户或符号属性对问题没有影响

1 个答案:

答案 0 :(得分:0)

经常会发生某些时候某些数据在MT4中不可用的情况。最好的办法是检查结果是否被接受(如果调用时间,报价,其他不能为零的数据,则为> 0)或检查上一个错误,然后Sleep(50),然后重试。很有可能2-5次尝试成功,因此您需要循环进行。

可能您需要至少知道不能为零的帐号。收到成功的结果后,所有其他数据似乎都已正确加载。

int OnInit()
   {
    if(!initializeAccountInfo())
       return(INIT_FAILED);
    // ... other checks that you need
    return(INIT_SUCCEEDED);
   }
bool initializeAccountInfo()
   {
    int accountNumber=0, attempt=0, ATTEMPTS=50, SLEEP(50);
    while(attempt<ATTEMPTS)
       {
        accountNumber=AccountInfoInteger(ACCOUNT_LOGIN);
        attempt++;
        if(accountNumber==0)
           Sleep(SLEEP);
        else
           break;
       }
    return accountNumber>0;
   }