我如何在MQL5中获得Open,Low,High,Close参数? - 页 4

 
Alexey Viktorov:

在这种情况下,毫不含糊地从第一小节开始CopyRates 10s。并不是每一次打勾都 要叫,而是在出现一个新栏的时候就足够了。

我如何知道在没有CopyRates的情况下,是否出现了一个新的酒吧?我的意思是,你必须先赶上新的酒吧活动。没有CopyRates可能吗?我有点糊涂了)。

这就是它的意思,我从来没有在MT5上处理过这个话题。请理解))。

 
Alexey Viktorov:

哦,弗拉基米尔。虽然我冲口而出,但不幸的是,我没有预约。如果我们只需要开盘价或时间,例如,没有必要使用CopyRates(),在这种情况下,CopyOpen或iOpen已经很足够了。分别是CopyTime或iTime。它是根据你的宗教偏好来选择的。

我还要加上我的告诫:就性能成本而言,没有明显的区别。因此,只剩下宗教偏见。

fxsaber正在检查CopyRates() 的成本--它比单独获得所需的属性更昂贵。这并不适用于我们需要一次性获得所有价格的情况。

 
Реter Konow:
那我怎么知道在没有CopyRates的情况下出现了一个新栏?我的意思是,你需要先赶上新的酒吧活动。没有CopyRates也能做到吗?我有点糊涂了)。

在不注意任何事情的情况下,监测一个新条的出现,并调用CopyRates

有很多不同的功能和方式来检测网站上的新栏。

 
Реter Konow:

我如何知道在没有CopyRates的情况下,是否出现了一个新的酒吧?我的意思是,你必须先赶上新的酒吧活动。没有CopyRates可能吗?我有点糊涂了)。

这就是它的意思,从来没有在MT5上处理过这个话题。请理解。))

最简单的方法是比较当前栏的开盘时间。如果它不等于以前记住的那个--有一个新的小节--在新的小节上做需要做的事情,并记住这个时间,以便下次检查。

 
Alexey Viktorov:

在不注意任何事情的情况下,我们跟踪一个新条的出现,并调用CopyRates

在网站上有很多不同的功能和方式来定义一个新的酒吧。

在MT5中,一个新条形图的出现并不与分钟的开始相关。它完全没有时间限制。有一个问题。我们如何准确地理解仅基于刻度线的新条形的出现?你仍然需要参考时间序列。否则,这几乎是不可能的。虽然...我不是100%确定。
 
Artyom Trishkin:

fxsaber做了一个CopyRates()的成本检查--它比单独获得所需的属性更昂贵。这并不适用于你需要一次性获得所有价格的情况。

恕我直言,fxsaber,我宁愿不关注这种差异。这就是为什么我说" 没有明显的差异",而且我对1e6迭代的差异不感兴趣。我们又不是在写一个你可以一次发射1e6颗子弹的射击游戏。
 
Artyom Trishkin:

最简单的方法是比较当前栏的开盘时间。如果它不等于以前记住的那个--有一个新的小节--在新的小节上做需要做的事情,并记住这个时间,以便下次检查。

那么,这意味着要在每一个刻度上调用CopyRates?否则,我们怎么知道当前酒吧的开盘时间已经改变?
 
Реter Konow:
那么,你是在每次打勾时都调用CopyRates吗?否则,你怎么会知道当前酒吧的开门时间已经改变?

你可以选择CNewbar 类,或者在论坛上搜索NewBar。

SZZ: 整篇文章!https://www.mql5.com/ru/articles/159



阿列克谢-维克多罗夫

伊戈尔,你需要去上一年级。他们在那里教字母,学完后你会明白CopyRates和CopyBuffer的区别。

这里有一个更好的建议来解决这个问题,不需要CopyRates。


好的,通常的......哎呀,哎呀......而且没有一行代码))))

我举这个例子是想说明,获得连续的OHLC数组并不总是很方便(也很少有必要)。 在实际工作中,我们通常需要从不同的柱状图中获得一些OHLC值(指标不在考虑范围之内)。

好的,保重!

Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
 
Реter Konow:
那么,在每次打勾时都调用CopyRates?否则,我们怎么知道当前酒吧的开盘时间已经改变?

是的,在每一次打勾 时,我们都会检查时间。

//+------------------------------------------------------------------+
//| Возвращает время указанного бара                                 |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int index)
  {
   datetime array[];
   return(CopyTime(symbol_name,timeframe,index,1,array)==1 ? array[0] : 0);
  }
//+------------------------------------------------------------------+

简而言之,是这样的。

static datetime last_time=0;
datetime time_current=Time(Symbol(),PERIOD_CURRENT,0);
if(time_current==0)
  return;
if(time_current!=last_time)
  {
   // Новый бар или первый запуск (для контроля первого запуска можно сделать флаг - чтобы не обрабатывать его как новый бар)
   // делаем что нужно на новом баре
   last_time=time_current;
  }

我只是把它写在我的手上--以显示想法,而不是书写的准确性。

 
Реter Konow:
那么,在每一次打勾时我们都应该调用CopyRates?否则,如何知道当前酒吧的开放时间已经改变?

如果(prevTime!=iTime(...))

{

// 当前酒吧的开放时间 已经改变

}

prevTime=iTime(...)。