当我将一个自定义指示器附加到图表中,关闭MT4并重新打开它时,该指示器通常会初始化,但在start()的第一次运行中,AccountInfo()或SymbolInfo()的每个实例都返回0.0,导致多个函数抛出‘零除法’错误。当我重新初始化指示器(不关闭MT4)时,AccountInfo()和SymbolInfo()返回它们通常做的值。如果我注释掉所有依赖于这两个函数的函数,则指示符在重新启动MT4后初始化而不会抛出错误。
有谁有过类似的问题吗?
为了澄清:只有当我将指示符附加到图表上时,才会出现问题,关闭MT4并再次重新打开它;当我在MT4已经打开时附加它时,AccountInfo()和SymbolInfo()返回正常值。
其他信息:
发布于 2018-10-06 15:55:25
在MT4中某些数据在某一时刻是不可用的,这种情况经常发生。最好的方法是检查结果是否被接受(如果调用时间、引号和其他不能为零的数据),或者检查最后一个错误,然后是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;
}https://stackoverflow.com/questions/52678897
复制相似问题