Определение последнего нахождения цены на текущем уровне

 
Подскажите, пожалуйста, кто знает, как с наименьшим количеством кода определить, когда в последний раз цена была на текущем ценовом уровне?
 
//возвращает дату предшествующего нахождения цены на уровне текущей точки
datetime GetAgeTime(double ePrice, int eDirection, string eSymbol, ENUM_TIMEFRAMES eTimeFrame, datetime eTime)
   {
   //последний бар графика
   int eFinish=iBars(eSymbol,eTimeFrame)-1;
   if(eDirection==0 || eTime==0 || eFinish<=0) return(eTime);
   //текущий бар
   int eShift=iBarShift(eSymbol,eTimeFrame,eTime);
   if(eDirection>0)
      {
      for(int i=eShift+1; i<=eFinish; i++)
         {
         if(iHigh(eSymbol,eTimeFrame,i)-ePrice>=0) return(iTime(eSymbol,eTimeFrame,i));
         }
      }
   else
      {
      for(int i=eShift+1; i<=eFinish; i++)
         {
         if(ePrice-iLow(eSymbol,eTimeFrame,i)>=0) return(iTime(eSymbol,eTimeFrame,i));
         }
      }
   return(iTime(eSymbol,eTimeFrame,eFinish));
   }

Функция тяжёлая, используйте с умом.

 
Я бы для ускорения попробовал искать от старших таймфреймов к младшим, что-то типа MN1->D1->H1->M1
 
Большое спасибо всем за помощь.
 
А переменная eDirection за что отвечает..?
 

Это направление, если хотим найти, когда цена была напротив текущего High, тогда ставим 1, если напротив Low хотим узнать, тогда -1


Для ускорения, не надо использовать функцию на каждом баре, в этом нет смысла. Допустим, когда у Вас явный максимум есть, тогда его и проверяйте.

 
Максим Пругло:
Подскажите, пожалуйста, кто знает, как с наименьшим количеством кода определить, когда в последний раз цена была на текущем ценовом уровне?

Немножко не правильно. Цена на уровне в каком состоянии. Состояния движения вверх вниз видимо не будут интересны. Поэтому лучше получить экстремумы и смотреть их относительно ближайших экстремумов на истории. От меньшего ТФ к большему.  

Сперва просчитать один раз экстремумы на нужную глубину на разных тф и потом не пересчитывать, а только искать ближайшие. Так дешевле.

 
Valeriy Yastremskiy:

Немножко не правильно. Цена на уровне в каком состоянии. Состояния движения вверх вниз видимо не будут интересны. Поэтому лучше получить экстремумы и смотреть их относительно ближайших экстремумов на истории. От меньшего ТФ к большему.  

Сперва просчитать один раз экстремумы на нужную глубину на разных тф и потом не пересчитывать, а только искать ближайшие. Так дешевле.

можно пример кода..? меня больше реализация волнует, чем логика.. мало опыта совсем