首页 > 解决方案 > AccountInfo() 和 SymbolInfo() 在 MT4 启动时返回 0

问题描述

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

有没有人有类似的问题?

澄清一下:只有当我将指标附加到图表、关闭 MT4 并重新打开它时,才会出现问题;当我在 MT4 已打开时附加它时,AccountInfo() 和 SymbolInfo() 返回正常值。

附加信息:

标签: mql4metatrader4

解决方案


经常发生某些数据在某个时刻在 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;
   }

推荐阅读