прошу написать код

 

Вывод фракталов я сделал так:


#property copyright ""

#property link      ""


#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1  Blue

#property indicator_color2  Red

#property indicator_width1  1

#property indicator_width2  1


extern  int    prmBars   = 1000;

extern  int    prmLength = 5;

extern double  width=0.05;


///////////////////////////////////////////////////////////

double MarkNord[];

double MarkZuid[];


void init()

{

    IndicatorDigits(Digits);


    SetIndexStyle (0, DRAW_ARROW);  SetIndexArrow(0, 163);

    SetIndexBuffer(0, MarkNord);

    SetIndexStyle (1, DRAW_ARROW);  SetIndexArrow(1, 163);

    SetIndexBuffer(1, MarkZuid);


    IndicatorShortName("Frct:"+prmLength);

    SetIndexLabel(0,   "top:"+prmLength);

    SetIndexLabel(1,   "bot");

}

//=========================================================


void start()

{

    int nMax = prmBars;               //количество бар

    if (nMax < 10 || nMax > Bars)

        nMax = Bars;

    ObjectsDeleteAll(); 

    int nRight  = (prmLength-1)/2;

    int prevTop = nMax+prmLength;          //количество бар перед верхним фракталом

    int prevBot = nMax+prmLength;          //количество бар перед нижним фракталом

    int nOffset = prmLength/2;

    if (prmLength%2 == 0)

        nOffset--;

        

    int shift=iTime(NULL,0,prmBars);

    string t=TimeToStr(shift,TIME_DATE|TIME_SECONDS);

    Print("shift of bar with open time ",t," is ",shift);


    ///////////////////////////////////////////////////////

    for (int k = nMax-prmLength/2; nRight <= k; k--) {


        if (nOffset < prevTop-k && true == GetTopFrac(k, prmLength)) {

            MarkNord[k] = High[k]; //EMPTY_VALUE

           // Print("MarkNord[k]: ",MarkNord[k]);

            prevTop = k;

           // 

        }

        //Print("High[k]: ",High[k]);


        if (nOffset < prevBot-k && true == GetBotFrac(k, prmLength)) {

            MarkZuid[k] = Low[k];

           // Print("MarkZuid[k]: ",MarkZuid[k]);

            prevBot = k;

           // Print("prevBot: ",prevBot);

        }                       

        //Print("Low[k]: ",Low[k]);

    }

  /*  bool test = true;

    if (MarkNord[0] == EMPTY_VALUE) test = false;

    Print("prevTop: ", test, " ", DoubleToStr(MarkNord[0],4));*/

}


bool GetTopFrac (int shift, int nLength)

//  Bерхние фракталы

{

    int j, nVl, nVr;


    //  Левая часть

    for (j = nLength/2; j > 0; j--) {

        nVl = 0.5 + High[shift+j  ]/Point;

        nVr = 0.5 + High[shift+j-1]/Point;

        if (nVr >= nVl) {

        }

        else

            return(false);

    }


    //  Правая часть

    int nRight = (nLength-1)/2;

    for (j = 1; j <= nRight; j++) {

        nVl = 0.5 + High[shift-j+1]/Point;

        nVr = 0.5 + High[shift-j  ]/Point;

        if (nVl >= nVr) {

        }

        else

            return(false);

    }

    return(true);

}

//=========================================================


bool GetBotFrac (int shift, int nLength)

//  Нижние фракталы

{

    int j, nVl, nVr;


    //  Левая часть

    for (j = nLength/2; j > 0; j--) {

        nVl = 0.5 + Low[shift+j  ]/Point;

        nVr = 0.5 + Low[shift+j-1]/Point;

        if (nVr <= nVl) {

        }

        else

            return(false);

    }


    //  Правая часть

    int nRight = (nLength-1)/2;

    for (j = 1; j <= nRight; j++) {

        nVl = 0.5 + Low[shift-j+1]/Point;

        nVr = 0.5 + Low[shift-j  ]/Point;

        if (nVl <= nVr) {

        }

        else

            return(false);

    }

    return(true);

}

//=========================================================



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

нужен технический индикатор, если можете сделать, отзовитесь, пожалуйста 3veriek@mail.ru