mql4 - AccountInfo() 和 SymbolInfo() 在 MT4 启动时返回 0
问题描述
当我将自定义指标附加到图表,关闭 MT4 并重新打开它时,指标会正常初始化,但在 start() 的第一次运行中 AccountInfo() 或 SymbolInfo() 的每个实例都返回 0.0,导致多个函数抛出“零”分”错误。当我重新初始化指标(不关闭 MT4)时,AccountInfo() 和 SymbolInfo() 返回它们通常所做的值。如果我注释掉所有依赖于这两个函数的函数,指标会在重新启动 MT4 后初始化而不会引发错误。
有没有人有类似的问题?
澄清一下:只有当我将指标附加到图表、关闭 MT4 并重新打开它时,才会出现问题;当我在 MT4 已打开时附加它时,AccountInfo() 和 SymbolInfo() 返回正常值。
附加信息:
- 使用#property 严格
- 使用 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;
}
推荐阅读
- scripting - 从脚本实例化 Power BI 模板
- mongodb - MappingException 在使用 Morphia 的接口中没有可用的构造函数
- c# - 如何使用hangfire重复作业调用另一种方法?
- javascript - Thymeleaf - 尝试为每个图像创建一个删除按钮
- sql-server - 对聚集索引进行排序时未使用 SQL Server 2016 非聚集索引
- java - 将通话与房间同步
- javascript - 从子组件更改父状态不起作用
- ruby - 使用 Ruby 连接到 Coinbase API 并遇到连接问题。法拉第
- javascript - 如何使用jQuery向HTML字符串(带有嵌套标签)添加'checked'属性,然后返回整个字符串?
- javascript - 使用 Plot.ly javascript 删除组条形图中的空白条形空间?