Что наступило раньше HIGH или LOW

 
Пытаюсь в МТ5 узнать какое событие наступило раньше по времени внутри предыдущего бара
HIGH или LOW
К самой цене проблем с доступом нет, получаю так-
double   high=iHigh(Symbol(),Period(),1);
double   low=iLow(Symbol(),Period(),1);

Но как узнать какое собитие наступило раньше по времени на этом баре
HIGH или LOW ?
Функция iTime не помогает т.к возвращает значение времени открытия бара
Подскажите пожалуйста
 
erotin:
Пытаюсь в МТ5 узнать какое событие наступило раньше по времени внутри предыдущего бара
HIGH или LOW
К самой цене проблем с доступом нет, получаю так-

Но как узнать какое собитие наступило раньше по времени на этом баре
HIGH или LOW ?
Функция iTime не помогает т.к возвращает значение времени открытия бара
Подскажите пожалуйста

Ни как не узнаете. iHigh и iLow это не событие. Эти функции просто возвращают значения максимума и минимума свечи. 

 
erotin:
Пытаюсь в МТ5 узнать какое событие наступило раньше по времени внутри предыдущего бара
HIGH или LOW
К самой цене проблем с доступом нет, получаю так-

Но как узнать какое собитие наступило раньше по времени на этом баре
HIGH или LOW ?
Функция iTime не помогает т.к возвращает значение времени открытия бара
Подскажите пожалуйста

Попробуйте CopyTick() за период и найти минимум и максимум. А там по времени можно определить.

 
Vitalii Ananev:

Ни как не узнаете. iHigh и iLow это не событие. Эти функции просто возвращают значения максимума и минимума свечи. 

Я думаю узнать можно путем перебора времени прихода тиков и их цен в тот момент (но не знаю как это сделать) и сравнение с iHigh и iLow.

Либо есть варианты куда проще.

В любом случае прошу помощи в коде

 
erotin:

Я думаю узнать можно путем перебора времени прихода тиков и их цен в тот момент (но не знаю как это сделать) и сравнение с iHigh и iLow.

Либо есть варианты куда проще.

В любом случае прошу помощи в коде

Я думаю вам подойдет совет от @Alexey Viktorov 

 
erotin:
Пытаюсь в МТ5 узнать какое событие наступило раньше по времени внутри предыдущего бара
HIGH или LOW
К самой цене проблем с доступом нет, получаю так-

Но как узнать какое собитие наступило раньше по времени на этом баре
HIGH или LOW ?
Функция iTime не помогает т.к возвращает значение времени открытия бара
Подскажите пожалуйста

CopyTicksRange() - запрашиваете тики за предыдущий бар, находите максимальный и минимальный bid. Который из них по времени раньше - тот и первый.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
  • www.mql5.com
[out]  Cтатический или динамический массив MqlTick для приема тиков. Если в статический массив не вмещаются все тики из запрошенного интервала времени, то будет получено столько тиков, сколько помещается в массив. При этом функция сгенерирует ошибку ERR_HISTORY_SMALL_BUFFER (4407) . ERR_NOT_ENOUGH_MEMORY – не хватает памяти для получения...
 
Artyom Trishkin:

CopyTicksRange() - запрашиваете тики за предыдущий бар, находите максимальный и минимальный bid. Который из них по времени раньше - тот и первый.

Артем, если не сложно - лаконичный код как это выглядит.

Бьюсь огород нагородить

 
void Test(void)
  {
   MqlTick ticks_array[];
   ArraySetAsSeries(ticks_array,true);
   int total=CopyTicksRange(_Symbol,ticks_array,COPY_TICKS_INFO,iTime(_Symbol,PERIOD_CURRENT,1),iTime(_Symbol,PERIOD_CURRENT,0));
   double bid[];
   ArrayResize(bid,total);
   for(int i=0; i<total; i++)
      bid[i]=ticks_array[i].bid;
   Print((ArrayMaximum(bid)>ArrayMinimum(bid) ? "High" : "Low")," наступил раньше");
  }

Как-то так.

 
Konstantin Nikitin:

Как-то так.

Думаю почему же принты всегда одинаковые. Не может же быть такого.

Добавил функцию проверки в ваш код.

Оказывается эксперт не может получить тики , ошибка 4014

void Test(void)
  {
   MqlTick ticks_array[];
   ArraySetAsSeries(ticks_array,true);
   int total=CopyTicksRange(_Symbol,ticks_array,COPY_TICKS_INFO,iTime(_Symbol,PERIOD_CURRENT,1),iTime(_Symbol,PERIOD_CURRENT,0));
   if(total==-1 || total==0)
     {
      Print("ERROR ,CopyTicksRange = ",total);
      Print("GetLastError CODE = ",GetLastError());
      ResetLastError();// Обнуляем содержимое GetLastError
      return;//Выход если ошибка
     }
   Print("total = ",total);
   double bid[];
   ArrayResize(bid,total);
   for(int i=0; i<total; i++)
      bid[i]=ticks_array[i].bid;
   Print((ArrayMaximum(bid)>ArrayMinimum(bid) ? "High" : "Low")," наступил раньше");
  }
 
erotin:

Думаю почему же принты всегда одинаковые. Не может же быть такого.

Добавил функцию проверки в ваш код.

Оказывается эксперт не может получить тики , ошибка 4014

Потому, что время должно быть в миллисекундах. В документации ведь чётко написано.

from_msc

[in]  Дата, начиная с которой запрашиваются тики. Указывается в миллисекундах с 01.01.1970. Если параметр from_msc не указан, то отдаются тики от самого начала истории. Отдаются тики со временем >= from_msc.

to_msc

[in]   Дата, по которую запрашиваются тики. Указывается в миллисекундах с 01.01.1970. Отдаются тики со временем <= to_msc. Если параметр to_msc не указан, то отдаются все тики до конца истории.


 
erotin:
Пытаюсь в МТ5 узнать какое событие наступило раньше по времени внутри предыдущего бара
HIGH или LOW
К самой цене проблем с доступом нет, получаю так-

Но как узнать какое собитие наступило раньше по времени на этом баре
HIGH или LOW ?
Функция iTime не помогает т.к возвращает значение времени открытия бара
Подскажите пожалуйста

Включите мозг и просто представьте КАК формируется свеча. 

Впрочем, возможно это кому-то да надо... Всё-равно, представьте как формируется свеча, и Вы поймёте как определить... ))) Задача то, в принципе, элементарная.
Причина обращения: