Может кто порекомендует функцию - страница 4

 
Rosh:
Ограничение количества баров решается терминалом самостоятельно, производится периодическая подрезка.
Где это документировано?
Если нигде, то это грязный хак (пресловутый undefined behaviour). Есть более прозрачный метод сравнения времени текущего и последнего обработанного бара.
Хотя практика, конечно же, лучший критерий истины. Правда, когда накоплена достаточная статистика.
 
Новый бар лучше все таки по времени бара определять.
Работать будет всегда, независимо от поведения терминала.
int _prevTime = 0;
int start()
{
   int curTime = Time[0];
   if (_prevTime != curTime)
   {
      newBar();
      _prevTime = curTime;
   }
   newTick();
}
 
Rosh:
Irtron:
drknn:

В силу того, что скорость мы будем вносить на каждом тике, то нам понадобится програмно сдвинуть индикаторный буфер, если это пришёл не первый тик новой свечи. Значит нам понадобится функция, возвращающая признак нового бара. Её в своё время опубликовал Rosh. Вот она:
//+------------------------------------------------------------------+
//| функция isNewBar() - возвращает признак нового бара              |
//+------------------------------------------------------------------+
bool isNewBar(){
  bool res=false;
  if(myBars!=Bars){
    res=true;
    myBars=Bars;
  }



Функция возвращает признак нового бара вплоть до тех пор, пока Bars не упрется в ограничение количества баров на графике.


Не совсем так.  Советник с подобной функцией Prototype-IX. Пример мультивалютного советника два месяца висел на чемпионате и правильно определял наступление нового бара по 12 символам и 5 перидоам (матрица 12 x 6). Ограничение количества баров решается терминалом самостоятельно, производится периодическая подрезка.


Эта функция была опубликована вот здесь.
http://alpari-idc.ru/ru/articles_mql4/18.html
Кстати, lovova, советую прочитать эту статью - там описано как сдвигать програмно индикаторный буфер (если конечно, ты сам не знаешь как это делается).