Ошибки, баги, вопросы - страница 2908

 
fxsaber:
Как через CopyTicks получить тик, который был до заданного времени?

Ну если Макс. баров в окне - unlimited, 

то наверное что-то вроде:

MqlTick Prev_Tick(ulong t) {  // t - время в миллисекундах
   MqlTick ticks[];
   int bar =iBarShift(_Symbol,PERIOD_M1,t/1000); 
   if (bar>=0 && CopyTicksRange(_Symbol,ticks,COPY_TICKS_ALL,iTime(_Symbol,PERIOD_M1,bar)*1000,t)>0) 
      return ticks[ArraySize(ticks)-1];
   else {
      MqlTick tick;  // если до заданного времени нет тиков возвращаем пустой тик.
      return tick;
   }
}

проверил, но не с пристрастием.

Если обходится без баров (iBarShift), то, если время попадет на выходные, поиск ближайшего тика может быть весьма затратным.


 
Nikolai Semko:

Если обходится без баров (iBarShift), то, если время попадет на выходные, поиск ближайшего тика может быть весьма затратным.

Да, тик справа - элементарно, тик слева - ужас.

 
fxsaber:

Да, тик справа - элементарно, тик слева - ужас.

Ага. 
Не хватает, чтобы в функции

int  CopyTicks( 
   string           symbol_name,           // имя символа 
   MqlTick&         ticks_array[],         // массив для приёма тиков 
   uint             flags=COPY_TICKS_ALL,  // флаг, определяющий тип получаемых тиков 
   ulong            from=0,                // дата, начиная с которой запрашиваются тики 
   uint             count=0                // количество тиков, которые необходимо получить 
   );

параметр count был int и эта функция поддерживала бы отрицательные значения count, т.е. в обратную сторону.

 
Nikolai Semko:

Ага. 
Не хватает, чтобы в функции

параметр count был int и эта функция поддерживала бы отрицательные значения count, т.е. в обратную сторону.

Согласен.

 
fxsaber:
Как через CopyTicks получить тик, который был до заданного времени?

А чем вам не нравится CopyTicksRange()

 
Alexey Viktorov:

А чем вам не нравится CopyTicksRange()

Под CopyTicks имею в виду обе функции получения истории тиков. К сожалению, она не может помочь решить задачу получения тика слева.

 
fxsaber:

Под CopyTicks имею в виду обе функции получения истории тиков. К сожалению, она не может помочь решить задачу получения тика слева.

Почему нет? Кто мешает запросить тики до нужного времени и последний элемент массива и будет тиком слева от заданного времени.

 
Alexey Viktorov:

Почему нет? Кто мешает запросить тики до нужного времени и последний элемент массива и будет тиком слева от заданного времени.

Не определить From-значение для CopyTicksRange.

 
fxsaber:

Не определить From-значение для CopyTicksRange.

Ну ведь можно бахнуть сутки или трое суток. Зачем его определять с какой-то точностью. Массив по любому будет в направлении от старого к новому.

 
Alexey Viktorov:

Ну ведь можно бахнуть сутки или трое суток. Зачем его определять с какой-то точностью. Массив по любому будет в направлении от старого к новому.

Вслепую нащупывать левую границу - дорого. Два примера с MQ-Demo ниже.


Пять суток.


12 суток.