Поиск вершин на промежутки времени

 

Подскажите как ограничить поиск вершин на определённом промежутке времени

Например 
старт = 16.10.2023
стоп = 19.10.2023

Мне надо там найти max high и min low

Вообще требуется цикл баров на промежутке от и до

 
forex2030:

Подскажите как ограничить поиск вершин на определённом промежутке времени

Например 
старт = 16.10.2023
стоп = 19.10.2023

Мне надо там найти max high и min low

Вообще требуется цикл баров на промежутке от и до

Обращение по начальной и конечной датам требуемого интервала времени

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   datetime         start_time,        // с какой даты
   datetime         stop_time,         // по какую дату
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   );

https://www.mql5.com/ru/docs/series/copyrates

https://docs.mql4.com/ru/series/copyrates

И в скопированном ищете.

 
forex2030:

Подскажите как ограничить поиск вершин на определённом промежутке времени

Например 
старт = 16.10.2023
стоп = 19.10.2023

Мне надо там найти max high и min low

Вообще требуется цикл баров на промежутке от и до

Ну например iHighest или iLowest

В mql4 тоже самое.
 
Alexey Viktorov #:

Ну например iHighest или iLowest

Это мне понятно как максимальное значение найти
Я не пойму как ограничить цикл поиска ОТ и ДО

 
forex2030 #:

Это мне понятно как максимальное значение найти
Я не пойму как ограничить цикл поиска ОТ и ДО

int  iHighest(
   const string        symbol,              // символ
   ENUM_TIMEFRAMES     timeframe,           // период
   ENUM_SERIESMODE     type,                // идентификатор таймсерии
   int                 count=WHOLE_ARRAY,   // число элементов Сколько баров в поиске, это ДО
   int                 start=0              // индекс бара с которого начать поиск, это ОТ
  );
 
Alexey Viktorov #:

Не находит нужную точку

extern datetime tStart = D'2023.10.16 01:00'; //Дата Start
extern datetime tEnd   = D'2023.10.19 01:00'; //Дата End

int start()
{
   int BarStart=iBarShift(Symbol(),0,tStart);
   int BarEnd=iBarShift(Symbol(),0,tEnd);

   double MaxLev=iHigh(Symbol(),0,iHighest(Symbol(),0,MODE_HIGH,BarEnd,BarStart));
}

Вот мне на промежутки времени надо найти максимальное значение

 
forex2030 #:

Не находит нужную точку

Вот мне на промежутки времени надо найти максимальное значение

BarEnd это не индекс бара, а количество баров между временем tStart и tEnd 

Если это на периоде D1 то получится 3 бара\дня. Или 4 не помню уже как правильно.

 

`

Ниже приведен фрагмент из кода. Показано определение максимума. По аналогии проверьте получение минимума.


      for(int i = IndexTF_inArray; i>=0; i--)            //--- получен цикл  от текущего индекса периода до минимально-возможного индекса периодов
        {
         //---
         //---    по полученным данным дат баров получим последовательность баров внутри указанного диапазона дат .
         //--- затем на этом же участке будет найден номер экстремума

         datetime TMi[]; // array temp for datetime
         ArraySetAsSeries(TMi,true);
         int TMi_sz = CopyTime(_Symbol,allTF[i],LF_boder,RH_boder,TMi);
         //---
         double   HIi[]; // array temp for HI
         ArraySetAsSeries(HIi,true);
         int HIi_sz = CopyHigh(_Symbol,allTF[i],LF_boder,RH_boder,HIi);
         //---
         // получить номер бара с максимальным значением
         int HIi_max = ArrayMaximum(HIi);
         //Alert("  номер бара экстремума - по максимуму  : ", HIi_max, " период : ", EnumToString(allTF[i]), " время МАКСИМУМА: ", TMi[HIi_max], " цена максимума : ",   HIi[HIi_max]);
         //---
         // провести построения по следующим направлениям :
         //---
 

Этот вопрос я решил так:

extern datetime tStart = D'2023.10.15 01:00'; //Дата Start
extern datetime tEnd   = D'2023.10.30 01:00'; //Дата End

void start()
{
   int BarStart=iBarShift(Symbol(),0,tStart);
   int BarEnd=iBarShift(Symbol(),0,tEnd);

   double MaxLev=iHigh(Symbol(),0,iHighest(Symbol(),0,MODE_HIGH,BarStart-BarEnd,BarEnd));
   double MinLev=iLow(Symbol(),0,iLowest(Symbol(),0,MODE_LOW,BarStart-BarEnd,BarEnd));
}

Теперь требуется решить ещё одну задачу

Мне надо найти время видимого бара с левого края окна графика
И если прокручиваем график назад по истории, то всегда этот бар обновляется 

 
forex2030 #:

Этот вопрос я решил так:

Теперь требуется решить ещё одну задачу

Мне надо найти время видимого бара с левого края окна графика
И если прокручиваем график назад по истории, то всегда этот бар обновляется 

Документацию полезно читать даже просто так.

CHART_FIRST_VISIBLE_BAR

Номер первого видимого бара на графике. Индексация баров соответствует таймсерии.

int  r/o

 
Alexey Viktorov #:

Документацию полезно читать даже просто так.

Спасибо
Вопрос решён