GannZIGZAG_Fibo_Grand_x7_Stat_Full_Line

0 Views
0 Downloads
0 Favorites
GannZIGZAG_Fibo_Grand_x7_Stat_Full_Line
//+------------------------------------------------------------------+

//|                      GannZIGZAG_Fibo_Grand_x7_Stat_Full_Line.mq5 |

//|                                        Copyright © 2005, Profi_R |

//|                                        http://www.metaquotes.net |

//+------------------------------------------------------------------+

//---- 02B>@AB2> 8=48:0B>@0

#property copyright "Copyright © 2005, Profi_R"

//---- AAK;:0 =0 A09B 02B>@0

#property link "http://www.metaquotes.net"

#property description ""

//---- =><5@ 25@A88 8=48:0B>@0

#property version   "1.00"

//---- >B@8A>2:0 8=48:0B>@0 2 3;02=>< >:=5

#property indicator_chart_window 

//+----------------------------------------------+ 

//|  >1JO2;5=85 :>=AB0=B                         |

//+----------------------------------------------+

#define FIBO_LINES_TOTAL 7     // >=AB0=B0 4;O :>;8G5AB20 C@>2=59 D81>

#define SIZE 45                // >=AB0=B0 4;O :>;8G5AB20 2K7>2>2 DC=:F88 CountIndicator 2 :>45

//+----------------------------------------------+

//---- 4;O @0AGQB0 8 >B@8A>2:8 8=48:0B>@0 8A?>;L7>20=> A>@>: ?OBL 1CD5@>2

#property indicator_buffers 45

//---- 8A?>;L7>20=> 2A53> A>@>: G5BK@5 3@0D8G5A:8E ?>AB@>5=8O

#property indicator_plots   44

//+----------------------------------------------+

//|  0@0<5B@K >B@8A>2:8 25@E=53> 8=48:0B>@0     |

//+----------------------------------------------+

//---- 2 :0G5AB25 8=48:0B>@0 8A?>;L7>20= ZIGZAG

#property indicator_type44   DRAW_ZIGZAG

//---- 2 :0G5AB25 F25B0 8=48:0B>@0 8A?>;L7>20= A5@>-3>;C1>9 F25B

#property indicator_color44  clrMediumSlateBlue

//---- B>;I8=0 ;8=88 8=48:0B>@0 1 @02=0 4

#property indicator_width44  4

//---- >B>1@065=85 1KG59 <5B:8 8=48:0B>@0

#property indicator_label44  "GannZIGZAG"

//+----------------------------------------------+

//| E>4=K5 ?0@0<5B@K 8=48:0B>@0                 |

//+----------------------------------------------+

input uint GSv_range=2;

input int Shift=0;                                  // A4283 7837030 ?> 3>@87>=B0;8 2 10@0E

input double  FiboRatio =1.000;                     //>MDD8F85=B 4><=>65=8O 2A5E D81>C@>2=59

uint    FiboTotal=3;                          //>;8G5AB2> 4>?>;=8B5;L=KE A5:B>@>2 $81> A25@EC 8;8 A=87C

//----

input double  FiboLevel1 =0.000;                    //7=0G5=85 D81>C@>2=O 1

input ENUM_LINE_STYLE StyleLevel1=STYLE_SOLID;      //AB8;L ;8=88 D81>C@>2=O 1

input uint   WidthLevel1=4;                         //B>;I8=0 ;8=88 D81>C@>2=O 1

input color  Color_Level1 = clrDodgerBlue;          //F25B D81>C@>2=O 1

//----

input double  FiboLevel2=0.236;                     //7=0G5=85 D81>C@>2=O 2

input ENUM_LINE_STYLE StyleLevel2=STYLE_SOLID;      //AB8;L ;8=88 D81>C@>2=O 2

input uint    WidthLevel2=1;                        //B>;I8=0 ;8=88 D81>C@>2=O 2

input color   Color_Level2= clrDarkViolet;          //F25B D81>C@>2=O 2

//----

input double  FiboLevel3 =0.382;                    //7=0G5=85 D81>C@>2=O 3

input ENUM_LINE_STYLE StyleLevel3=STYLE_DASH;       //AB8;L ;8=88 D81>C@>2=O 3

input uint    WidthLevel3=1;                        //B>;I8=0 ;8=88 D81>C@>2=O 3

input color   Color_Level3 = clrOrange;             //F25B D81>C@>2=O 3

//----

input double  FiboLevel4 =0.500;                    //7=0G5=85 D81>C@>2=O 4

input ENUM_LINE_STYLE StyleLevel4=STYLE_SOLID;      //AB8;L ;8=88 D81>C@>2=O 4

input uint    WidthLevel4=2;                        //B>;I8=0 ;8=88 D81>C@>2=O 4

input color   Color_Level4 = clrMagenta;            //F25B D81>C@>2=O 4

//----  

input double  FiboLevel5 =0.618;                    //7=0G5=85 D81>C@>2=O 5

input ENUM_LINE_STYLE StyleLevel5=STYLE_DASH;       //AB8;L ;8=88 D81>C@>2=O 5

input uint    WidthLevel5=1;                        //B>;I8=0 ;8=88 D81>C@>2=O 5

input color   Color_Level5 = clrBlue;               //F25B D81>C@>2=O 5

//----

input double  FiboLevel6=0.764;                     //7=0G5=85 D81>C@>2=O 6

input ENUM_LINE_STYLE StyleLevel6=STYLE_SOLID;      //AB8;L ;8=88 D81>C@>2=O 6

input uint    WidthLevel6=1;                        //B>;I8=0 ;8=88 D81>C@>2=O 6

input color   Color_Level6 = clrGray;               //F25B D81>C@>2=O 6

//----

input double  FiboLevel7 = 1.000;                   //7=0G5=85 D81>C@>2=O 7

input ENUM_LINE_STYLE StyleLevel7=STYLE_SOLID;      //AB8;L ;8=88 D81>C@>2=O 7

input uint    WidthLevel7=4;                        //B>;I8=0 ;8=88 D81>C@>2=O 7

input color   Color_Level7 = clrDodgerBlue;         //F25B D81>C@>2=O 7

//+----------------------------------------------+

#define FIBO_LINES_TOTAL_XN_FULL FIBO_LINES_TOTAL*(1+FiboTotal*2)-FiboTotal*2    // >=AB0=B0 4;O :>;8G5AB20 C@>2=59 D81>

//---- <0AA82K ?5@5<5==KE 4;O ;8=89 $81>

double Values[];

color Colors[];

ENUM_LINE_STYLE Styles[];

uint Widths[];

string FiboLineNames[];

//---- >1JO2;5=85 48=0<8G5A:8E <0AA82>2, :>B>@K5 1C4CB 2 40;L=59H5< 8A?>;L7>20=K 2 :0G5AB25 8=48:0B>@=KE 1CD5@>2

double HighestBuffer[];

double LowestBuffer[];

//---- 1JO2;5=85 F5;KE ?5@5<5==KE =0G0;0 >BAGQB0 40==KE

int min_rates_total;

//----

double h,l;

bool cur_h,cur_l;

bool draw_up,draw_dn,initfl;

int  fPoint_i,sPoint_i,s_up,s_dn,drawf,lb;

//+------------------------------------------------------------------+

//|  0AA82K ?5@5<5==KE 4;O A>740=8O 8=48:0B>@=KE 1CD5@>2            |

//+------------------------------------------------------------------+   

class CIndicatorsBuffers

  {

public: double    LineIndBuffer[];

  };

//+------------------------------------------------------------------+

//| !>740=85 8=48:0B>@=KE 1CD5@>2                                    |

//+------------------------------------------------------------------+

CIndicatorsBuffers Ind[SIZE];

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+  

int OnInit()

  {

//---- =8F80;870F8O ?5@5<5==KE =0G0;0 >BAGQB0 40==KE

   min_rates_total=10;

//---- ?@52@0I5=85 48=0<8G5A:8E <0AA82>2 2 8=48:0B>@=K5 1CD5@K

   SetIndexBuffer(43,LowestBuffer,INDICATOR_DATA);

   SetIndexBuffer(44,HighestBuffer,INDICATOR_DATA);

//---- 70?@5B =0 >B@8A>2:C 8=48:0B>@>< ?CABKE 7=0G5=89

   PlotIndexSetDouble(43,PLOT_EMPTY_VALUE,NULL);

//---- CAB0=>2:0 ?>78F88, A :>B>@>9 =0G8=05BAO >B@8A>2:0

   PlotIndexSetInteger(43,PLOT_DRAW_BEGIN,min_rates_total);

//---- >ACI5AB2;5=85 A42830 8=48:0B>@0 ?> 3>@87>=B0;8 =0 Shift

   PlotIndexSetInteger(43,PLOT_SHIFT,Shift);

//---- 8=45:A0F8O M;5<5=B>2 2 1CD5@0E :0: 2 B09<A5@8OE   

   ArraySetAsSeries(LowestBuffer,true);

   ArraySetAsSeries(HighestBuffer,true);

//--- A>740=85 8<5=8 4;O >B>1@065=8O 2 >B45;L=>< ?>4>:=5 8 2> 2A?;K20NI59 ?>4A:07:5

   IndicatorSetString(INDICATOR_SHORTNAME,"GannZIGZAG_Fibo_Grand_x7_Stat_Full_Arr");

//--- >?@545;5=85 B>G=>AB8 >B>1@065=8O 7=0G5=89 8=48:0B>@0

   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);

//----

   ArrayResize(Values,43);

   ArrayResize(Colors,43);

   ArrayResize(Styles,43);

   ArrayResize(Widths,43);

   ArrayResize(FiboLineNames,43);

//---- 

   Values[0]=FiboLevel1*FiboRatio;

   Values[1]=FiboLevel2*FiboRatio;

   Values[2]=FiboLevel3*FiboRatio;

   Values[3]=FiboLevel4*FiboRatio;

   Values[4]=FiboLevel5*FiboRatio;

   Values[5]=FiboLevel6*FiboRatio;

   Values[6]=FiboLevel7*FiboRatio;

//----      

   Values[7]=Values[1]+1;

   Values[8]=Values[2]+1;

   Values[9]=Values[3]+1;

   Values[10]=Values[4]+1;

   Values[11]=Values[5]+1;

   Values[12]=Values[6]+1;

//----      

   Values[13]=Values[1]+2;

   Values[14]=Values[2]+2;

   Values[15]=Values[3]+2;

   Values[16]=Values[4]+2;

   Values[17]=Values[5]+2;

   Values[18]=Values[6]+2;

//----      

   Values[19]=Values[1]+3;

   Values[20]=Values[2]+3;

   Values[21]=Values[3]+3;

   Values[22]=Values[4]+3;

   Values[23]=Values[5]+3;

   Values[24]=Values[6]+3;

//----      

   Values[25]=-Values[1];

   Values[26]=-Values[2];

   Values[27]=-Values[3];

   Values[28]=-Values[4];

   Values[29]=-Values[5];

   Values[30]=-Values[6];

//----      

   Values[31]=-Values[1]-1;

   Values[32]=-Values[2]-1;

   Values[33]=-Values[3]-1;

   Values[34]=-Values[4]-1;

   Values[35]=-Values[5]-1;

   Values[36]=-Values[6]-1;

//----      

   Values[37]=-Values[1]-2;

   Values[38]=-Values[2]-2;

   Values[39]=-Values[3]-2;

   Values[40]=-Values[4]-2;

   Values[41]=-Values[5]-2;

   Values[42]=-Values[6]-2;

//----  

   FiboLineNames[0]="FiboLevel "+DoubleToString(100*Values[0],1);

   FiboLineNames[1]="FiboLevel "+DoubleToString(100*Values[1],1);

   FiboLineNames[2]="FiboLevel "+DoubleToString(100*Values[2],1);

   FiboLineNames[3]="FiboLevel "+DoubleToString(100*Values[3],1);

   FiboLineNames[4]="FiboLevel "+DoubleToString(100*Values[4],1);

   FiboLineNames[5]="FiboLevel "+DoubleToString(100*Values[5],1);

   FiboLineNames[6]="FiboLevel "+DoubleToString(100*Values[6],1);

//----  

   FiboLineNames[7]="FiboLevel "+DoubleToString(100*Values[7],1);

   FiboLineNames[8]="FiboLevel "+DoubleToString(100*Values[8],1);

   FiboLineNames[9]="FiboLevel "+DoubleToString(100*Values[9],1);

   FiboLineNames[10]="FiboLevel "+DoubleToString(100*Values[10],1);

   FiboLineNames[11]="FiboLevel "+DoubleToString(100*Values[11],1);

   FiboLineNames[12]="FiboLevel "+DoubleToString(100*Values[12],1);

//----  

   FiboLineNames[13]="FiboLevel "+DoubleToString(100*Values[13],1);

   FiboLineNames[14]="FiboLevel "+DoubleToString(100*Values[14],1);

   FiboLineNames[15]="FiboLevel "+DoubleToString(100*Values[15],1);

   FiboLineNames[16]="FiboLevel "+DoubleToString(100*Values[16],1);

   FiboLineNames[17]="FiboLevel "+DoubleToString(100*Values[17],1);

   FiboLineNames[18]="FiboLevel "+DoubleToString(100*Values[18],1);

//----  

   FiboLineNames[19]="FiboLevel "+DoubleToString(100*Values[19],1);

   FiboLineNames[20]="FiboLevel "+DoubleToString(100*Values[20],1);

   FiboLineNames[21]="FiboLevel "+DoubleToString(100*Values[21],1);

   FiboLineNames[22]="FiboLevel "+DoubleToString(100*Values[22],1);

   FiboLineNames[23]="FiboLevel "+DoubleToString(100*Values[23],1);

   FiboLineNames[24]="FiboLevel "+DoubleToString(100*Values[24],1);

//----  

   FiboLineNames[25]="FiboLevel "+DoubleToString(100*Values[25],1);

   FiboLineNames[26]="FiboLevel "+DoubleToString(100*Values[26],1);

   FiboLineNames[27]="FiboLevel "+DoubleToString(100*Values[27],1);

   FiboLineNames[28]="FiboLevel "+DoubleToString(100*Values[28],1);

   FiboLineNames[29]="FiboLevel "+DoubleToString(100*Values[29],1);

   FiboLineNames[30]="FiboLevel "+DoubleToString(100*Values[30],1);

//----  

   FiboLineNames[31]="FiboLevel "+DoubleToString(100*Values[31],1);

   FiboLineNames[32]="FiboLevel "+DoubleToString(100*Values[32],1);

   FiboLineNames[33]="FiboLevel "+DoubleToString(100*Values[33],1);

   FiboLineNames[34]="FiboLevel "+DoubleToString(100*Values[34],1);

   FiboLineNames[35]="FiboLevel "+DoubleToString(100*Values[35],1);

   FiboLineNames[36]="FiboLevel "+DoubleToString(100*Values[36],1);

//----  

   FiboLineNames[37]="FiboLevel "+DoubleToString(100*Values[37],1);

   FiboLineNames[38]="FiboLevel "+DoubleToString(100*Values[38],1);

   FiboLineNames[39]="FiboLevel "+DoubleToString(100*Values[39],1);

   FiboLineNames[40]="FiboLevel "+DoubleToString(100*Values[40],1);

   FiboLineNames[41]="FiboLevel "+DoubleToString(100*Values[41],1);

   FiboLineNames[42]="FiboLevel "+DoubleToString(100*Values[42],1);

//---- 

   Colors[0]=Color_Level1;

   Colors[1]=Colors[7]=Colors[13]=Colors[19]=Colors[25]=Colors[31]=Colors[37]=Color_Level2;

   Colors[2]=Colors[8]=Colors[14]=Colors[20]=Colors[26]=Colors[32]=Colors[38]=Color_Level3;

   Colors[3]=Colors[9]=Colors[15]=Colors[21]=Colors[27]=Colors[33]=Colors[39]=Color_Level4;

   Colors[4]=Colors[10]=Colors[16]=Colors[22]=Colors[28]=Colors[34]=Colors[40]=Color_Level5;

   Colors[5]=Colors[11]=Colors[17]=Colors[23]=Colors[29]=Colors[35]=Colors[41]=Color_Level6;

   Colors[6]=Colors[12]=Colors[18]=Colors[24]=Colors[30]=Colors[36]=Colors[42]=Color_Level7; 

//----   

   Styles[0]=StyleLevel1;

   Styles[1]=Styles[7]=Styles[13]=Styles[19]=Styles[25]=Styles[31]=Styles[37]=StyleLevel2;

   Styles[2]=Styles[8]=Styles[14]=Styles[20]=Styles[26]=Styles[32]=Styles[38]=StyleLevel3;

   Styles[3]=Styles[9]=Styles[15]=Styles[21]=Styles[27]=Styles[33]=Styles[39]=StyleLevel4;

   Styles[4]=Styles[10]=Styles[16]=Styles[22]=Styles[28]=Styles[34]=Styles[40]=StyleLevel5;

   Styles[5]=Styles[11]=Styles[17]=Styles[23]=Styles[29]=Styles[35]=Styles[41]=StyleLevel6;

   Styles[6]=Styles[12]=Styles[18]=Styles[24]=Styles[30]=Styles[36]=Styles[42]=StyleLevel7;

//----   

   Widths[0]=WidthLevel1;

   Widths[1]=Widths[7]=Widths[13]=Widths[19]=Widths[25]=Widths[31]=Widths[37]=WidthLevel2;

   Widths[2]=Widths[8]=Widths[14]=Widths[20]=Widths[26]=Widths[32]=Widths[38]=WidthLevel3;

   Widths[3]=Widths[9]=Widths[15]=Widths[21]=Widths[27]=Widths[33]=Widths[39]=WidthLevel4;

   Widths[4]=Widths[10]=Widths[16]=Widths[22]=Widths[28]=Widths[34]=Widths[40]=WidthLevel5;

   Widths[5]=Widths[11]=Widths[17]=Widths[23]=Widths[29]=Widths[35]=Widths[41]=WidthLevel6;

   Widths[6]=Widths[12]=Widths[18]=Widths[24]=Widths[30]=Widths[36]=Widths[42]=WidthLevel7;

//---- 

   for(int numb=0; numb<int(SIZE-2); numb++)

     {

      string shortname=FiboLineNames[numb];

      //--- A>740=85 8<5=8 4;O >B>1@065=8O 2 >B45;L=>< ?>4>:=5 8 2> 2A?;K20NI59 ?>4A:07:5

      PlotIndexSetString(numb,PLOT_LABEL,shortname);

      //---- CAB0=>2:0 7=0G5=89 8=48:0B>@0, :>B>@K5 =5 1C4CB 2848<K =0 3@0D8:5

      PlotIndexSetDouble(numb,PLOT_EMPTY_VALUE,EMPTY_VALUE);

      //---- >ACI5AB2;5=85 A42830 =0G0;0 >BAGQB0 >B@8A>2:8 8=48:0B>@0

      PlotIndexSetInteger(numb,PLOT_DRAW_BEGIN,min_rates_total);

      //---- ?@52@0I5=85 48=0<8G5A:8E <0AA82>2 2 8=48:0B>@=K5 1CD5@K

      SetIndexBuffer(numb,Ind[numb].LineIndBuffer,INDICATOR_DATA);

      //---- 8=45:A0F8O M;5<5=B>2 2 1CD5@0E :0: 2 B09<A5@8OE   

      ArraySetAsSeries(Ind[numb].LineIndBuffer,true);

      //---- :>?8@>20=85 A2>9AB2 ?5@2>9 ;8=88 8=48:0B>@0 4;O 2A5E >AB0;L=KE

      PlotIndexSetInteger(numb,PLOT_DRAW_TYPE,DRAW_LINE);

      PlotIndexSetInteger(numb,PLOT_LINE_WIDTH,Widths[numb]);

      PlotIndexSetInteger(numb,PLOT_LINE_STYLE,Styles[numb]);

      PlotIndexSetInteger(numb,PLOT_COLOR_INDEXES,1);

      PlotIndexSetInteger(numb,PLOT_LINE_COLOR,0,Colors[numb]);

      //---- >ACI5AB2;5=85 A42830 8=48:0B>@0 ?> 3>@87>=B0;8 =0 Shift

      PlotIndexSetInteger(numb,PLOT_SHIFT,Shift);

      //---- 70?@5B =0 >B>1@065=85 7=0G5=89 8=48:0B>@0 2 ;52>< 25@E=5< C3;C >:=0 8=48:0B>@0

      PlotIndexSetInteger(numb,PLOT_SHOW_DATA,false);

     }

//--- 7025@H5=85 8=8F80;870F88

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

int OnCalculate(

                const int rates_total,    // :>;8G5AB2> 8AB>@88 2 10@0E =0 B5:CI5< B8:5

                const int prev_calculated,// :>;8G5AB2> 8AB>@88 2 10@0E =0 ?@54K4CI5< B8:5

                const datetime &time[],

                const double &open[],

                const double& high[],     // F5=>2>9 <0AA82 <0:A8<C<>2 F5=K 4;O @0AGQB0 8=48:0B>@0

                const double& low[],      // F5=>2>9 <0AA82 <8=8<C<>2 F5=K  4;O @0AGQB0 8=48:0B>@0

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[]

                )

  {

//---- ?@>25@:0 :>;8G5AB20 10@>2 =0 4>AB0B>G=>ABL 4;O @0AGQB0

   if(rates_total<min_rates_total) return(0);

//---- ?5@5@8A>2K205< $81> B>;L:> ?@8 A<5=5 10@0   

   if(rates_total==prev_calculated) return(rates_total);



//---- 8=45:A0F8O M;5<5=B>2 2 <0AA820E :0: 2 B09<A5@8OE  

   ArraySetAsSeries(open,true);

   ArraySetAsSeries(high,true);

   ArraySetAsSeries(low,true);

   ArraySetAsSeries(close,true);

   ArraySetAsSeries(time,true);



//---- 1JO2;5=85 F5;KE ?5@5<5==KE

   int i,bar,bar1,limit,count;



//---- @0AGQBK AB0@B>2>3> =><5@0 limit 4;O F8:;0 ?5@5AGQB0 10@>2

   if(prev_calculated>rates_total || prev_calculated<=0)// ?@>25@:0 =0 ?5@2K9 AB0@B @0AGQB0 8=48:0B>@0

     {

      limit=rates_total-min_rates_total; // AB0@B>2K9 =><5@ 4;O @0AGQB0 2A5E 10@>2

      initfl=0;

      draw_up=0;

      draw_dn=0;

      cur_h=0;

      cur_l=0;

     }

   else

     {

      limit=rates_total-prev_calculated; // AB0@B>2K9 =><5@ 4;O @0AGQB0 =>2KE 10@>2

     }



//---- ?5@2>=0G0;L=0O 8=8F80;870F8O

   if(initfl!=1) myInit(rates_total,open,high,low,close);

   int bars2=rates_total-2;

   int bars1=rates_total-1;



//---- >A=>2=>9 F8:; @0AGQB0 8=48:0B>@0 7837030

   for(bar=limit; bar>=0 && !IsStopped(); bar--)

     {

      bar1=bar+1;

      count=bars1-bar;

      HighestBuffer[bar]=NULL;

      LowestBuffer[bar]=NULL;

      //---- 5A;8 =0 ?@54K4CI5< 10@5 1K; >B@8A>20= M:AB@5<C<

      if((HighestBuffer[bar1]>0 || LowestBuffer[bar1]>0) && lb!=count)

        {

         if(draw_up) s_dn=0;

         else if(draw_dn) s_up=0;

        }

      if(lb!=count)

        {

         cur_h=0;

         cur_l=0;

        }

      if(bar>bars2-drawf || (high[bar]<=high[bar1] && low[bar]>=low[bar1])) continue;

      if(draw_up)

        {

         //---- 5A;8 ;8=8O =0?@02;5=0 225@E

         if(high[bar]>h)

           {

            //---- 5A;8 4>AB83=CB =>2K9 <0:A8<C<

            h=high[bar];

            cur_h=1;

           }

         if(low[bar]<l)

           {

            //---- 5A;8 4>AB83=CB =>2K9 <8=8<C<

            l=low[bar];

            //---- 5A;8 MB> =5 B>B 65 A0<K9 10@

            if(lb!=count || cur_l!=1)s_dn++;

            cur_l=1;

           }

         //---- 5A;8 AG5BG8:8 @02=K

         if(s_up==s_dn)

           {

            //---- 5A;8 ?>A;54=89 10@ >4=>2@5<5==> =>2K9 <0:A8<C< 8 <8=8<C<

            if(cur_h==cur_l && cur_l==1)

              {

               //---- 5A;8 A25G0 <54256LO

               if(close[bar]<=open[bar])

                 {

                  draw_up=0;

                  draw_dn=1;

                  fPoint_i=sPoint_i;

                  sPoint_i=count;

                  LowestBuffer[bar]=l;

                  for(i=bars2-fPoint_i; i>bar; i--)

                    {

                     HighestBuffer[i]=NULL;

                     LowestBuffer[i]=NULL;

                    }

                 }

               else

                 {

                  //---- 5A;8 A25G0 1KGLO

                  sPoint_i=count;

                  HighestBuffer[bar]=h;

                  for(i=bars2-fPoint_i; i>bar; i--)

                    {

                     HighestBuffer[i]=NULL;

                     LowestBuffer[i]=NULL;

                    }

                 }

              }

            else

              {

               //---- 5A;8 ?>A;54=89 10@ B>;L:> =>2K9 <0:A8<C<

               if(cur_h==1)

                 {

                  sPoint_i=count;

                  HighestBuffer[bar]=h;

                  l=low[bar];

                  for(i=bars2-fPoint_i; i>bar; i--)

                    {

                     HighestBuffer[i]=NULL;

                     LowestBuffer[i]=NULL;

                    }

                 }

               else

                 {

                  if(cur_l==1)

                    {

                     //---- 5A;8 ?>A;54=89 10@ B>;L:> =>2K9 <8=8<C<

                     draw_up=0;

                     draw_dn=1;

                     fPoint_i=sPoint_i;

                     sPoint_i=count;

                     LowestBuffer[bar]=l;

                     h=high[bar];

                     for(i=bars2-fPoint_i; i>bar; i--)

                       {

                        HighestBuffer[i]=NULL;

                        LowestBuffer[i]=NULL;

                       }

                    }

                 }

              }

           }

         else

           {

            //---- 8=0G5 5A;8 A<5=K =0?@02;5=8O =5B O2=> (AG5BG8: Dn A25G59 =5 @025= GSv_range)

            //---- 5A;8 4>AB83=CB =>2K9 <0:A8<C<

            if(cur_h==1)

              {

               sPoint_i=count;

               HighestBuffer[bar]=h;

               for(i=bars2-fPoint_i; i>bar; i--)

                 {

                  HighestBuffer[i]=NULL;

                  LowestBuffer[i]=NULL;

                 }

               l=low[bar];

              }

           }

        }

      else

        {

         //---- 5A;8 ;8=8O =0?@02;5=0 2=87

         if(high[bar]>h)

           {

            //---- 5A;8 4>AB83=CB =>2K9 <0:A8<C<

            h=high[bar];

            if(lb!=count || cur_h!=1) s_up++;

            cur_h=1;

            //---- 5A;8 MB> =5 B>B 65 A0<K9 10@

           }

         if(low[bar]<l)

           {

            //---- 5A;8 4>AB83=CB =>2K9 <8=8<C<

            l=low[bar];

            cur_l=1;

           }

         //---- 5A;8 AG5BG8:8 @02=K 

         if(s_up==s_dn)

           {

            //---- 5A;8 ?>A;54=89 10@ >4=>2@5<5==> =>2K9 <0:A8<C< 8 <8=8<C<

            if(cur_h==cur_l && cur_l==1)

              {

               //---- 5A;8 A25G0 <54256LO

               if(close[bar]<=open[bar])

                 {

                  sPoint_i=count;

                  LowestBuffer[bar]=l;

                  for(i=bars2-fPoint_i; i>bar; i--)

                    {

                     HighestBuffer[i]=NULL;

                     LowestBuffer[i]=NULL;

                    }

                 }

               else

                 {

                  //---- 5A;8 A25G0 1KGLO

                  draw_up=1;

                  draw_dn=0;

                  fPoint_i=sPoint_i;

                  sPoint_i=count;

                  HighestBuffer[bar]=h;

                  for(i=bars2-fPoint_i; i>bar; i--)

                    {

                     HighestBuffer[i]=NULL;

                     LowestBuffer[i]=NULL;

                    }

                 }

              }

            else

              {

               //---- 5A;8 ?>A;54=89 10@ B>;L:> =>2K9 <0:A8<C<

               if(cur_h==1)

                 {

                  draw_up=1;

                  draw_dn=0;

                  fPoint_i=sPoint_i;

                  sPoint_i=count;

                  HighestBuffer[bar]=h;

                  l=low[bar];

                  for(i=bars2-fPoint_i; i>bar; i--)

                    {

                     HighestBuffer[i]=NULL;

                     LowestBuffer[i]=NULL;

                    }

                 }

               else

                 {

                  if(cur_l==1)

                    {

                     //---- 5A;8 ?>A;54=89 10@ B>;L:> =>2K9 <8=8<C<

                     sPoint_i=count;

                     LowestBuffer[bar]=l;

                     h=high[bar];

                     for(i=bars2-fPoint_i; i>bar; i--)

                       {

                        HighestBuffer[i]=NULL;

                        LowestBuffer[i]=NULL;

                       }

                    }

                 }

              }

           }

         else

           {

            //---- 8=0G5 5A;8 A<5=K =0?@02;5=8O =5B O2=> (AG5BG8: Up A25G59 =5 @025= GSv_range)

            //---- 5A;8 4>AB83=CB =>2K9 <8=8<C<

            if(cur_l==1)

              {

               sPoint_i=count;

               LowestBuffer[bar]=l;

               for(i=bars2-fPoint_i; i>bar; i--)

                 {

                  HighestBuffer[i]=NULL;

                  LowestBuffer[i]=NULL;

                 }

               h=high[bar];

              }

           }

        }

      if(lb!=count) lb=count;

     }



//---- >A=>2=>9 F8:; @0AGQB0 8=48:0B>@0

   for(bar=limit; bar>=0 && !IsStopped(); bar--)

     {

      //---- >1JO2;5=8O ;>:0;L=KE ?5@5<5==KE 4;O ?>AB@>5=8O D81

      int bar2,sign;

      double price1,price2;

      //---- >AB@>5=85 $81>

      bar1=FindFirstExtremum(bar,rates_total,HighestBuffer,LowestBuffer,sign,price1);

      bar1=FindSecondExtremum(sign,bar1,rates_total,HighestBuffer,LowestBuffer,sign,price1);

      bar2=FindSecondExtremum(sign,bar1,rates_total,HighestBuffer,LowestBuffer,sign,price2);      

      double range=price1-price2;

      

      for(int numb=0; numb<int(FIBO_LINES_TOTAL_XN_FULL); numb++)

       for(int index=bar1; index>=bar && !IsStopped(); index--) Ind[numb].LineIndBuffer[index]=price2+range*Values[numb];

     }

//---   

   for(bar=limit; bar>=0 && !IsStopped(); bar--)

     {

      for(int numb=0; numb<int(SIZE-2); numb++)

        {

         if(Ind[numb].LineIndBuffer[bar+1]!=Ind[numb].LineIndBuffer[bar]&&Ind[numb].LineIndBuffer[bar]!=EMPTY_VALUE)

           {

            Ind[numb].LineIndBuffer[bar+1]=EMPTY_VALUE;

           }

        }

     }

//----    

   return(rates_total);

  }

//+------------------------------------------------------------------+

// $C=:F8O =0G0;L=>9 8=8F80;870F88 8=48:0B>@0                        |

//+------------------------------------------------------------------+

void myInit(

            const int bars,

            const double &Open[],

            const double &High[],

            const double &Low[],

            const double &Close[])

  {

//---- 

   int index,index1;

   int bars1=bars-1;

   fPoint_i=0;

   h=High[bars1];

   l=Low[bars1];

   for(index=bars-2; index>=0; index--)

     {

      index1=index+1;

      if(High[index]>High[index1] || Low[index]<Low[index1])

        {

         if(High[index]>h && High[index]>High[index1]) s_up++;

         if(Low[index]<l && Low[index]<Low[index1]) s_dn++;

        }

      else continue;

      if(s_up==s_dn && s_up==GSv_range)

        {

         h=High[index];

         l=Low[index];

         sPoint_i=bars1-index;

         if(Close[index]>=Open[index])

           {

            s_dn=0;

            LowestBuffer[bars1]=Low[bars1];

            HighestBuffer[index]=High[index];

            draw_up=1;

            break;

           }

         else

           {

            s_up=0;

            HighestBuffer[bars1]=High[bars1];

            LowestBuffer[index]=Low[index];

            draw_dn=1;

            break;

           }

        }

      else

        {

         h=High[index];

         l=Low[index];

         sPoint_i=bars1-index;

         if(s_up==GSv_range)

           {

            s_dn=0;

            LowestBuffer[bars1]=Low[bars1];

            HighestBuffer[index]=High[index];

            draw_up=1;

            break;

           }

         else

           {

            if(s_dn==GSv_range)

              {

               s_up=0;

               HighestBuffer[bars1]=High[bars1];

               LowestBuffer[index]=Low[index];

               draw_dn=1;

               break;

              }

           }

        }

     }

   initfl=1;

   drawf=sPoint_i;

//----

  }

//+------------------------------------------------------------------+

//| >8A: A0<>9 ?5@2>9 25@H8=K 837030 2 1CD5@0E B09<A5@8OE          |

//+------------------------------------------------------------------+     

int FindFirstExtremum(int &StartPos,int Rates_total,double &UpArray[],double &DnArray[],int &Sign,double &Extremum)

  {

//----

   if(StartPos>=Rates_total)StartPos=Rates_total-1;



   for(int bar=StartPos; bar<Rates_total; bar++)

     {

      if(UpArray[bar]!=0.0 && UpArray[bar]!=EMPTY_VALUE)

        {

         Sign=+1;

         Extremum=UpArray[bar];

         return(bar);

         break;

        }



      if(DnArray[bar]!=0.0 && DnArray[bar]!=EMPTY_VALUE)

        {

         Sign=-1;

         Extremum=DnArray[bar];

         return(bar);

         break;

        }

     }

//----

   return(-1);

  }

//+------------------------------------------------------------------+

//| >8A: 2B>@>9 25@H8=K 837030 2 1CD5@0E B09<A5@8OE                |

//+------------------------------------------------------------------+     

int FindSecondExtremum(int Direct,int &StartPos,int Rates_total,double &UpArray[],double &DnArray[],int &Sign,double &Extremum)

  {

//----

   if(StartPos>=Rates_total) StartPos=Rates_total-1;



   if(Direct==-1)

      for(int bar=StartPos; bar<Rates_total; bar++)

        {

         if(UpArray[bar]!=0.0 && UpArray[bar]!=EMPTY_VALUE)

           {

            Sign=+1;

            Extremum=UpArray[bar];

            return(bar);

            break;

           }



        }



   if(Direct==+1)

      for(int bar=StartPos; bar<Rates_total; bar++)

        {

         if(DnArray[bar]!=0.0 && DnArray[bar]!=EMPTY_VALUE)

           {

            Sign=-1;

            Extremum=DnArray[bar];

            return(bar);

            break;

           }

        }

//----

   return(-1);

  }

//+------------------------------------------------------------------+

Comments