RefreshRates()的更新内容 - 页 4

 
Mikhail Nazarenko:
好的,感谢所有开发者的关注,我将创造像NewBar这样的拐杖))主题关闭。

你不需要创造它们。我给了你一个完全可行的功能。使用它。

 

新的一小时来了...


价值观是一体的......。

 
Mikhail Nazarenko:

不,更好的是 _Period.因为我们将强行等待H1的零报价,而当前时期的报价被正确更新。有必要在每小时的第一秒获得数据,而不是在每小时更新时。

if(NewBar(PERIOD_M5))
   {
    close_H1 = iClose(_Symbol, PERIOD_H1, 1);
    close_M1 = iClose(_Symbol, PERIOD_M1, 1);
    close_M5 = Close[1];
    
    
    if(close_H1 != close_M5)
      Print(close_H1, " H1 != M5 ", close_M5);
    if(close_M1 != close_M5)
      Print(close_M1, " M1 != M5 ", close_M5);

//...

我想对这个例子进行补充和检查


我不明白为什么 你希望在完全不同的条形图中看到相同的收盘价?

当M5上有一个新柱子时,M1上也有一个新柱子,但H1上12个柱子中只有一个会有一个新柱子,其他11个都没有。

 
PapaYozh:

我不明白为什么。 你希望在完全不同的条形图上看到相同的收盘价?


我也注意到了,还以为我搞错了。

 

显然,我没有很好地解释这个问题,对不起。我写并测试了承诺的拐杖。我把它写在这里是因为它应该在MQL4的代码中实现。如果你有兴趣,请拿着它。该主题现在已经结束。

//Функция отслеживания появления обновленных котировок по таймфрейму, где max_tf таймфрейм +1 до которого включительно будет требоваться обновление
bool isRefresh(int max_tf = 0,int min_sleep = 1000){
   
   //Массив с таймфреймами
   int tf[9] = {1,5,15,30,60,240,1440,10080,43200};
   
   //Если максимальное 0 то текущее значение
   max_tf = (max_tf <= 0) ? _Period : max_tf;
   
   //Текущее время
   datetime period,tc = TimeCurrent();
   
   for(int i = 0; i < 9; i++){
         
      period = tf[i]*60;
      
      if(iTime(_Symbol,tf[i],1) != (int(tc/period)-1)*period){
         Sleep(min_sleep);
         return false;   
      }
      if(max_tf < tf[i])//Если таймфрейм больше максимального и тоже обновлен то выходим
         break;
   }
   Sleep(min_sleep);
   RefreshRates();
   
   return true;
}
 
Mikhail Nazarenko:

显然,我没有很好地解释这个问题,对不起。我写并测试了承诺的拐杖。我把它写在这里是因为它应该在MQL4的代码中实现。如果你有兴趣,请拿着它。该主题现在已经结束。

1.也许,是的。

2.如果对返回的结果没有影响,为什么要在从一个函数返回之前睡一秒钟?

 

为了使其他时期/符号的蜡烛图能够及时生成,它们需要不断地被 "拉 "出来,否则MT就会 "不得不 "更新它们。
这是一个不争的事实,在论坛上已经讨论过很多次了)

ps.如果你的代码在定时器上运行,并且每小时只访问一次其他时间段的报价(或每天一次),那么你需要创建一个单独的函数来更新。或者在下一个请求后等待几秒钟。

 
PapaYozh:

1.显然,是的。

2.如果返回的结果不受任何影响,为什么在从一个函数返回之前要睡一秒钟?

这都是靠经验。如果你不相信我,就重做,不要睡觉)。整个事情是自愿的。

 

它是****的最纯粹的形式。

如果你能从函数中回来并做一些有用的事情,为什么要在函数中睡觉?

 
PapaYozh:

它是****的最纯粹的形式。

如果你能从函数中回来并做一些有用的事情,为什么要在函数中睡觉?

这就是******的纯粹和简单。告诉我,我之前的答复中你有什么不明白的地方?再来一次。不要睡觉,做一些有用的事情。))。