Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
//+------------------------------------------------------------------+//| Возвращает время указанного бара |//+------------------------------------------------------------------+datetime Time(conststring symbol_name,constENUM_TIMEFRAMES timeframe,constint index)
{
datetime array[];
return(CopyTime(symbol_name,timeframe,index,1,array)==1 ? array[0] : 0);
}
//+------------------------------------------------------------------+
简而言之,是这样的。
staticdatetime 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;
}
在这种情况下,毫不含糊地从第一小节开始CopyRates 10s。并不是每一次打勾都 要叫,而是在出现一个新栏的时候就足够了。
我如何知道在没有CopyRates的情况下,是否出现了一个新的酒吧?我的意思是,你必须先赶上新的酒吧活动。没有CopyRates可能吗?我有点糊涂了)。
这就是它的意思,我从来没有在MT5上处理过这个话题。请理解))。
哦,弗拉基米尔。虽然我冲口而出,但不幸的是,我没有预约。如果我们只需要开盘价或时间,例如,没有必要使用CopyRates(),在这种情况下,CopyOpen或iOpen已经很足够了。分别是CopyTime或iTime。它是根据你的宗教偏好来选择的。
我还要加上我的告诫:就性能成本而言,没有明显的区别。因此,只剩下宗教偏见。fxsaber正在检查CopyRates() 的成本--它比单独获得所需的属性更昂贵。这并不适用于我们需要一次性获得所有价格的情况。
那我怎么知道在没有CopyRates的情况下出现了一个新栏?我的意思是,你需要先赶上新的酒吧活动。没有CopyRates也能做到吗?我有点糊涂了)。
在不注意任何事情的情况下,监测一个新条的出现,并调用CopyRates
有很多不同的功能和方式来检测网站上的新栏。
我如何知道在没有CopyRates的情况下,是否出现了一个新的酒吧?我的意思是,你必须先赶上新的酒吧活动。没有CopyRates可能吗?我有点糊涂了)。
这就是它的意思,从来没有在MT5上处理过这个话题。请理解。))
最简单的方法是比较当前栏的开盘时间。如果它不等于以前记住的那个--有一个新的小节--在新的小节上做需要做的事情,并记住这个时间,以便下次检查。
在不注意任何事情的情况下,我们跟踪一个新条的出现,并调用CopyRates
在网站上有很多不同的功能和方式来定义一个新的酒吧。
fxsaber做了一个CopyRates()的成本检查--它比单独获得所需的属性更昂贵。这并不适用于你需要一次性获得所有价格的情况。
最简单的方法是比较当前栏的开盘时间。如果它不等于以前记住的那个--有一个新的小节--在新的小节上做需要做的事情,并记住这个时间,以便下次检查。
那么,你是在每次打勾时都调用CopyRates吗?否则,你怎么会知道当前酒吧的开门时间已经改变?
你可以选择CNewbar 类,或者在论坛上搜索NewBar。
SZZ: 整篇文章!https://www.mql5.com/ru/articles/159
伊戈尔,你需要去上一年级。他们在那里教字母,学完后你会明白CopyRates和CopyBuffer的区别。
这里有一个更好的建议来解决这个问题,不需要CopyRates。
好的,通常的......哎呀,哎呀......而且没有一行代码))))
我举这个例子是想说明,获得连续的OHLC数组并不总是很方便(也很少有必要)。 在实际工作中,我们通常需要从不同的柱状图中获得一些OHLC值(指标不在考虑范围之内)。
好的,保重!
那么,在每次打勾时都调用CopyRates?否则,我们怎么知道当前酒吧的开盘时间已经改变?
是的,在每一次打勾 时,我们都会检查时间。
简而言之,是这样的。
我只是把它写在我的手上--以显示想法,而不是书写的准确性。
那么,在每一次打勾时我们都应该调用CopyRates?否则,如何知道当前酒吧的开放时间已经改变?
如果(prevTime!=iTime(...))
{
// 当前酒吧的开放时间 已经改变
}
prevTime=iTime(...)。