AccountInfo() 和 SymbolInfo() return MT4 启动时为 0
AccountInfo() and SymbolInfo() return 0 on MT4 startup
当我将自定义指标附加到图表时,关闭 MT4 并重新打开它,指标正常初始化,但 AccountInfo() 或 SymbolInfo() 的每个实例都在 start() 的第一个 运行 returns 0.0,导致多个函数抛出 'zero divide' 错误。当我重新初始化指标(不关闭 MT4)时,AccountInfo() 和 SymbolInfo() return 他们通常做的值。
如果我注释掉所有依赖于这两个的函数,指标会在重新启动 MT4 后初始化而不会抛出错误。
有没有人遇到过类似的问题?
澄清一下:只有当我将指标附加到图表、关闭 MT4 并再次重新打开时才会出现问题;当我在 MT4 已经打开时附加它,AccountInfo() 和 SymbolInfo() return 正常值。
附加信息:
- 使用#属性 严格
- 使用 start() 而不是 OnCalculate()(这样我就可以 运行 手动执行主函数,而无需等待新的订单号)
- 请求的账户或交易品种属性对问题没有影响
在某些时刻,某些数据在 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;
}
当我将自定义指标附加到图表时,关闭 MT4 并重新打开它,指标正常初始化,但 AccountInfo() 或 SymbolInfo() 的每个实例都在 start() 的第一个 运行 returns 0.0,导致多个函数抛出 'zero divide' 错误。当我重新初始化指标(不关闭 MT4)时,AccountInfo() 和 SymbolInfo() return 他们通常做的值。 如果我注释掉所有依赖于这两个的函数,指标会在重新启动 MT4 后初始化而不会抛出错误。
有没有人遇到过类似的问题?
澄清一下:只有当我将指标附加到图表、关闭 MT4 并再次重新打开时才会出现问题;当我在 MT4 已经打开时附加它,AccountInfo() 和 SymbolInfo() return 正常值。
附加信息:
- 使用#属性 严格
- 使用 start() 而不是 OnCalculate()(这样我就可以 运行 手动执行主函数,而无需等待新的订单号)
- 请求的账户或交易品种属性对问题没有影响
在某些时刻,某些数据在 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;
}