Помогите, пожалуйста, найти ошибку

 

Пишу эксперта и столкнулся с проблемой: нужно найти максимум за определённое количество часов (у меня TimeShiftInHours) с определенного времени в прошлом (TradeTime). Вроде бы всё сделал по логике но не работает, точнее работает, но не правильно. Помогите, пожалуйста, найти ошибку. Вот кусок кода:

extern int TradeTime = 12; // время (в часах) с которого следует искать максимум
extern int TimeShiftInHours = 11; // на сколько часов назад производить поиск
     
       //---------------------------------------
       // бла бла бла...      
       int AdditionalShift,ShiftToHighBar,ShiftToTradeTime;
       double HighestPriceOfTheDay;  
                    
         ShiftToTradeTime=TimeHour(TimeCurrent())-TradeTime;
         if(ShiftToTradeTime<=0)
           {
            AdditionalShift=24+ShiftToTradeTime;          
           }
         else AdditionalShift=ShiftToTradeTime; 
       
         ShiftToHighBar=iHighest("GBPUSD",PERIOD_H1,MODE_HIGH,AdditionalShift+TimeShiftInHours,AdditionalShift);
         HighestPriceOfTheDay=NormalizeDouble(iHigh("GBPUSD",PERIOD_H1,ShiftToHighBar),4);         
         
         // принт для проверки
         Print(" Shift : ",AdditionalShift," High : ",HighestPriceOfTheDay);

За ранее благодарен.

 
А разве не так:
ShiftToHighBar=iHighest("GBPUSD",PERIOD_H1,MODE_HIGH,TimeShiftInHours,TradeTime);
В Вашем случае будет искать с 12 по 22.
 
Roger:
А разве не так:
ShiftToHighBar=iHighest("GBPUSD",PERIOD_H1,MODE_HIGH,TimeShiftInHours,TradeTime);
В Вашем случае будет искать с 12 по 22.

Спасибо конечно за то, что пытаетесь помочь, но так как вы предложили не подходит. Он будет на каждом новом баре считать максимум на TimeShiftInHours баров назад начиная с бара TradeTime (т.е. в моем случае с 12 бара) и максимум будет постоянно, как бы "подтягиваться" с формированием нового бара. А нужно чтобы он находил максимум за определенный промежуток суток и в остальное время суток выдавал этот максимум: например, сейчас 16:00 и сегодняшний максимум с 12:00 (TradeTime) на двеннадцать часов назад от этого времени (TimeShiftInHours) по паре GBPUSD составляет 1.9540. И нужно, чтобы эксперт возвращал и в 15:00 и в 23:00 сегодня и в 09:00 завтрашнего дня именно 1.9540(до 12:00 завтрашнего дня, когда будет сформирован новый максимум уже завтрашнего дня).

 
Пример, конечно, условный т.к. сегодня суббота и торгов сегодня нет, но я надеюсь, что он понятен.
 

Посмотрите задачу 27 здесь: https://book.mql4.com/ru/variables/arrays.

 

Спасибо, Сергей, за помощь. Во всём разобрался, теперь работает правильно. Вопрос снят.

P.S. Который раз убеждаюсь, как всё непросто может быть даже в элементарном, для человека, не имеющего никакого отношения к программированию прежде.

Причина обращения: