Нужна более четкая интендификация растущей формации ABC

 

Нужна более четкая интендификация растущей формации ABC. Тренд вверх.

Необходимо найти максимальную коррекцию между абсолютным минимумом и максимумом.

Как делаю сам:

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

И потом нахожу промежуточный минимум в отрезке от промежуточного максимума до абсолютного максимума.

Но в таком алгоритме не найти самую низкую коррекцию между аб.макс и аб. мин

На картинке обозначил кругом тот участок, что хочу находить.

Может, кто подскажет более эффективный способ нахождения данного паттерна?

Код MQL4.

extern int       istart       =0;//откуда начинается поиск минимума цены
extern int       q            =120;//кол-во элементов для поиска


double Low_[];
double High_[];
ArraySetAsSeries(Low_,true);
ArraySetAsSeries(High_,true);
int start_=istart ;//откуда ищем 
CopyLow(_Symbol,_Period,start_,q,Low_); 
CopyHigh(_Symbol,_Period,start_,q,High_); 
int minbar=ArrayMinimum(Low_)+start_;           // индекс бара с минимальным значением
int maxbar=ArrayMaximum(High_)+start_;          // индекс бара с максимальным значением
if (minbar > maxbar)
{
int d1=(minbar-maxbar)-sdvig1;
int iMax1=ArrayMaximum(High_,d1,maxbar+sdvig1);//индекс бара промежуточного максимума
int d2=iMax1-maxbar;
iMin1=ArrayMinimum(Low_,d2,maxbar);//индекс бара минимума между абсолютным и промежуточным максимумом
}


 

Никто не ответил. Вот придумал решение, в следующем цикле:

 for(int r=minbar;r>maxbar;r--)
           {
            if(High[r]>AMAX){AMAX=High[r];IAMAX=r;}//обновляем максимум, если следующий больше AMAX
            if(IAMAX!=r)PD=AMAX-Low[r];//проверяем не равняется ли индекс IAMAX индексу на локальном минимуме
            if(PD>Korrekt){Korrekt=PD;PMAX=AMAX;PMIN=Low[r];IPMIN=r;IPMAX=IAMAX;}//здесь обновляются значения на текущей максимальной коррекции, если она превышена
           }