int i=0;
if( initial ){
for( i=0; i<ArraySize(pairs); i++){
if(pairs[i].rates[0].time == 0) return(rates_total);
}
initial=false;
}
// My change to recopy rates every tick by adding a loop at starting of OnCalculate() to do this// AS FMIC says, ArrayCopyRates needs the array without content, // then before recopy, free the array.for(i=0; i<ArraySize(pairs); i++){
ArrayFree(pairs[i].rates);
ArrayCopyRates(pairs[i].rates, pairs[i].symbol, PERIOD_CURRENT);
}
最大的线索是 "但我不知道怎么做"。
OP没有作出任何回应,这表明有什么问题。我的 "猜测 "是OP因为缺乏理解而感到沮丧,并放弃了这个话题。几年前有一段时间,我也做过同样的事情。我从不同的网站/论坛学到的东西比这个多,因为没有人花时间意识到我是多么的新,并且不断地发布例子,进行完全超出我当时理解的讨论。
从你的观点来看,你可能是对的,但另一方面,我也看到了许多问题,如果只是冒然看一下文件,这些问题就会得到回答,你真的觉得自己是个傻瓜,一次又一次地回答这些问题。
此外,这里还有谷歌和一个搜索选项。如果我不知道如何做某事,这是我的下一步,我试图自己解决这个问题。
在这个主题的情况下,我不知道如何编码一个多货币系统,我会回答谷歌或在这里搜索已有的代码。
从你的观点来看,你可能是对的,但另一方面,我看到了许多问题,如果只是冒险看一下文件,这些问题就会有答案,你真的觉得自己是个傻瓜,一次又一次地回答这些问题。
此外,这里还有谷歌和一个搜索选项。如果我不知道如何做某件事,这是我的下一步,试图自己解决这个问题。
在这个主题的情况下,我不知道如何编码一个多货币系统,我会回答谷歌或搜索这里已经存在的代码。
谢谢你的反馈,很高兴它是积极的。
对于我在这种情况下的表现,我对谁都感到抱歉。我确实是一个热爱和平、没有戏剧性的人,通常会忽略大多数我不同意的事情。
大家好。
很抱歉长时间没有在这里活动。我正在出差,也忙于一些项目,不得不把项目搁置一段时间。
在看了帖子的更新后,我有一些观点需要澄清。
下面是指标代码。
我尝试使用RefreshRates(),但仍然有相同的结果......只有在同一窗口的那一对可以工作,其他对不更新。
RefreshRates() 与MqlRates 数据没有关系。WHRoeder的 示例代码只对Pre-600版本有效。对于最新的版本,你需要检查我的帖子中提到的各点,比如测试ArrayCopyRates() 的返回代码,以及错误代码,费率数组的大小,以及作为WHRoeder 指出的附加预防措施,时间属性的有效性。
PS!如果你在英语方面有困难,请给我发个邮件。我是葡萄牙人(葡萄牙)。
大家好。
在测试中,我在OnCalculate函数 中加入了 "重新复制 "费率的功能......通过添加一个循环,首先在所有迭代中释放数组对,然后再次复制费率。看起来是有效的,并且没有返回错误。
我不知道这是否是实现我所需要的最好方法,但显然它是有效的,而且没有错误。
给关注这个话题的人一个更新
我一直在通过PM帮助OP修复他的代码,因为他在英语方面有困难,而我们都讲葡萄牙语。在我们的测试中,我们遇到了另一个发生在"ArrayCopyRates()"函数中的 "趣事"。当在EA中用"ArrayCopyRates()"使用MqlRates 数组时,数据数组是一个虚拟数组,总是报告事物的当前状态,所以数据总是新鲜的。
然而,在一个指标中,情况似乎不是这样的。数组不是一个虚拟副本,而是在调用"ArrayCopyRates()"时设置的一个静态副本。当符号与图表符号不同时,数据不会更新。当它与图表符号相同时,那么数组数据是 "活的",并按预期更新,但当它是另一个符号时,它是一个静态拷贝。
因此,为了使其在指标中工作,如果需要新的数据,必须在每次调用OnCalculate()事件时调用 "ArrayCopyRates()"函数。
大家好。
这(几乎)是我后来做的同样的事情,但不同的是我在ArrayCopyRates之前运行ArrayFree...而且我没有做你帮助我的验证。
这里是FMIC帮助我的最终代码。它现在在一个指标代码中正常工作..: