Boa_ZigZag_Fibo_Grand_xN_Stat

Author: Copyright © 2005, MetaQuotes Software Corp.
0 Views
0 Downloads
0 Favorites
Boa_ZigZag_Fibo_Grand_xN_Stat
ÿþ//+------------------------------------------------------------------+

//|                                Boa_ZigZag_Fibo_Grand_xN_Stat.mq5 |

//|                      Copyright © 2005, MetaQuotes Software Corp. |

//|                                                mandorr@gmail.com |

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

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

#property copyright "Copyright © 2005, MetaQuotes Software Corp."

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

#property link      "mandorr@gmail.com"

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

#property version   "1.10"

#property description "070EA:89 C402" 

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

#property indicator_chart_window 

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

#property indicator_buffers 2

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

#property indicator_plots   1

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

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

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

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

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

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

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

//---- 2 :0G5AB25 8=48:0B>@0 8A?>;L7>20= 783703 A5:F8O<8

#property indicator_type1   DRAW_COLOR_SECTION

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

#property indicator_label1  "Boa_ZigZag"

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

#property indicator_color1 clrMediumOrchid,clrLimeGreen

//---- ;8=8O 8=48:0B>@0 - 4;8==K9 ?C=:B8@

#property indicator_style1  STYLE_SOLID

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

#property indicator_width1  3

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

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

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

input uint Length=6;

input string  FiboName="Fibo_Grand_xN";             //<O $81>->1J5:B0 

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

input double  FiboLevelsShift=0.000;                //!4283 ?> 25@B8:0;8 2A5E D81>C@>2=59 2 $810E >B =C;52>3> C@>2=O

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

input color   FiboColor=clrRed;                     //&25B $81>

input uint    FiboWidth=4;                          //B>;I8=0 ;8=88 $81>

//----

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 = clrDarkViolet;          //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 = clrDarkViolet;         //F25B D81>C@>2=O 7

//----

input bool Fibo_AsRay=true;                         //>B@8A>2:0 ;CG0

input uint CB=500;                                  //>;8G5AB2> 10@>2 4;O @0AGQB0 7837030

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

#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[];

//---- >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 IndBuffer[],ColorIndBuffer[];

//---- 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,cb;

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

//| Custom indicator initialization function                         |

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

int OnInit()

  {

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

   min_rates_total=int(Length)+1;

   cb=int(MathMax(min_rates_total,CB));



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

   SetIndexBuffer(0,IndBuffer,INDICATOR_DATA);

   SetIndexBuffer(1,ColorIndBuffer,INDICATOR_COLOR_INDEX);

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

   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);

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

   ArraySetAsSeries(IndBuffer,true);

   ArraySetAsSeries(ColorIndBuffer,true);

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

   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);

//---- #AB0=>2:0 D>@<0B0 B>G=>AB8 >B>1@065=8O 8=48:0B>@0

   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);

//---- 8<O 4;O >:>= 40==KE 8 ;M910 4;O AC1J>:>= 

   string shortname;

   StringConcatenate(shortname,"Boa_ZigZag_Fibo_Grand_xN_Stat(Length=",Length,")");

   IndicatorSetString(INDICATOR_SHORTNAME,shortname);

//----

   ArrayResize(Values,FIBO_LINES_TOTAL_XN_FULL);

   ArrayResize(Colors,FIBO_LINES_TOTAL_XN_FULL);

   ArrayResize(Styles,FIBO_LINES_TOTAL_XN_FULL);

   ArrayResize(Widths,FIBO_LINES_TOTAL_XN_FULL);

//----  

   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;

//----   

   Colors[0]=Color_Level1;

   Colors[1]=Color_Level2;

   Colors[2]=Color_Level3;

   Colors[3]=Color_Level4;

   Colors[4]=Color_Level5;

   Colors[5]=Color_Level6;

   Colors[6]=Color_Level7;

//----   

   Styles[0]=StyleLevel1;

   Styles[1]=StyleLevel2;

   Styles[2]=StyleLevel3;

   Styles[3]=StyleLevel4;

   Styles[4]=StyleLevel5;

   Styles[5]=StyleLevel6;

   Styles[6]=StyleLevel7;

//----   

   Widths[0]=WidthLevel1;

   Widths[1]=WidthLevel2;

   Widths[2]=WidthLevel3;

   Widths[3]=WidthLevel4;

   Widths[4]=WidthLevel5;

   Widths[5]=WidthLevel6;

   Widths[6]=WidthLevel7;

//---- 



   for(int count=1; count<=int(FiboTotal); count++)

      for(int lev=1; lev<7; lev++)

        {

         int kkk=lev+6*(2*count-1);

         Values[kkk]=Values[lev]+count;

         Colors[kkk]=Colors[lev];

         Styles[kkk]=Styles[lev];

         Widths[kkk]=Widths[lev];

         //----

         kkk=lev+6*(2*count);

         Values[kkk]=-Values[7-lev]-count+1;

         Colors[kkk]=Colors[lev-1];

         Styles[kkk]=Styles[lev-1];

         Widths[kkk]=Widths[lev-1];

        }

//--- A>74048< >1J5:B 

   if(!FiboLevelsCreate(0,FiboName,0,0,0,0,0,FiboColor,STYLE_SOLID,FiboWidth,false,false,false,Fibo_AsRay,false,0))

     {

      Print("5 C40;>AL A>740BL $81>!");

      return(INIT_FAILED);

     }

   if(!FiboLevelsSet(FIBO_LINES_TOTAL_XN_FULL,Values,Colors,Styles,Widths,0,FiboName))

     {

      Print("5 C40;>AL =0AB@>8BL $81>!");

      return(INIT_FAILED);

     }

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

   return(INIT_SUCCEEDED);

  }

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

//| Custom indicator deinitialization function                       |

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

void OnDeinit(const int reason)

  {

//----

   FiboLevelsDelete(0,FiboName);

//----

   ChartRedraw(0);

  }

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

//| Custom indicator iteration function                              |

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

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                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);



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

   int limit,climit,bar;

   double HH,LL,BH,BL;   

   int zu,zd,Swing,Swing_n;

//----



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

   climit=limit; // AB0@B>2K9 =><5@ 4;O @0A:@0A:8 8=48:0B>@0

   

   Swing=0;

   Swing_n=0;

   zu=limit;

   zd=limit;

   BH=high[limit];

   BL=low[limit];



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

   ArraySetAsSeries(high,true);

   ArraySetAsSeries(low,true);

   ArraySetAsSeries(time,true);



//---- 5@2K9 1>;LH>9 F8:; @0AGQB0 8=48:0B>@0

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

     {

      IndBuffer[bar]=NULL;

     

      HH=high[ArrayMaximum(high,bar+1,Length)];

      LL=low[ArrayMinimum(low,bar+1,Length)];

      if (low[bar]<LL && high[bar]>HH)

        {

         Swing=2;

         if (Swing_n== 1) zu=bar+1;

         if (Swing_n==-1) zd=bar+1;

        }

      else

        {

         if (low [bar]<LL) Swing=-1;

         if (high[bar]>HH) Swing= 1;

        }

      if (Swing!=Swing_n && Swing_n!=0)

        {

         if (Swing== 2) {Swing=-Swing_n; BH=high[bar]; BL=low[bar];}

         if (Swing== 1) IndBuffer[zd]=BL;

         if (Swing==-1) IndBuffer[zu]=BH;

         BH=high[bar];

         BL=low [bar];

        }

      if (Swing== 1) {if (high[bar]>=BH) {BH=high[bar]; zu=bar;}}

      if (Swing==-1) {if (low [bar]<=BL) {BL=low [bar]; zd=bar;}}

      Swing_n=Swing;

     }



//---- B>@>9 1>;LH>9 F8:; @0A:@0A:8 8=48:0B>@0

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

     {

      if(!IndBuffer[bar]) ColorIndBuffer[bar]=ColorIndBuffer[bar+1];



      if(IndBuffer[bar]&& IndBuffer[bar]>high[bar+1]) ColorIndBuffer[bar]=1;

      if(IndBuffer[bar] && IndBuffer[bar]<low[bar+1]) ColorIndBuffer[bar]=0;

     }

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

   int bar1,bar2,sign;

   double price1,price2;

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

   bar1=FindFirstExtremum(0,rates_total,IndBuffer,high,low,sign,price1);

   if(bar1<0) return(rates_total);

   bar1=FindSecondExtremum(sign,bar1,rates_total,IndBuffer,high,low,sign,price1);

   if(bar1<0) return(rates_total);

   bar2=FindSecondExtremum(sign,bar1,rates_total,IndBuffer,high,low,sign,price2);

   if(bar2<0) return(rates_total);

   double vertShift=MathAbs(price2-price1)*FiboLevelsShift;

//----

   if(!FiboLevelsPointChange(0,FiboName,0,time[bar1],price1+vertShift)) return(rates_total);

   if(!FiboLevelsPointChange(0,FiboName,1,time[bar2],price2+vertShift)) return(rates_total);

//----    

   ChartRedraw(0);

   return(rates_total);

  }

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

//| C>7405B "#@>2=8 $81>=0GG8" ?> 7040==K< :>>@48=0B0<               | 

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

bool FiboLevelsCreate(const long            chart_ID=0,        // ID 3@0D8:0 

                      const string          name="FiboLevels", // 8<O >1J5:B0 

                      const int             sub_window=0,      // =><5@ ?>4>:=0  

                      datetime              time1=0,           // 2@5<O ?5@2>9 B>G:8 

                      double                price1=0,          // F5=0 ?5@2>9 B>G:8 

                      datetime              time2=0,           // 2@5<O 2B>@>9 B>G:8 

                      double                price2=0,          // F5=0 2B>@>9 B>G:8 

                      const color           clr=clrLimeGreen,  // F25B >1J5:B0 

                      const ENUM_LINE_STYLE style=STYLE_SOLID, // AB8;L ;8=88 >1J5:B0 

                      const int             width=1,           // B>;I8=0 ;8=88 >1J5:B0 

                      const bool            back=false,        // =0 704=5< ?;0=5 

                      const bool            selection=true,    // 2K45;8BL 4;O ?5@5<5I5=89 

                      const bool            ray_left=false,    // ?@>4>;65=85 >1J5:B0 2;52> 

                      const bool            ray_right=false,   // ?@>4>;65=85 >1J5:B0 2?@02> 

                      const bool            hidden=true,       // A:@KB 2 A?8A:5 >1J5:B>2 

                      const long            z_order=0)         // ?@8>@8B5B =0 =060B85 <KHLN 

  {

//--- CAB0=>28< :>>@48=0BK B>G5: ?@82O7:8, 5A;8 >=8 =5 7040=K 

   ChangeFiboLevelsEmptyPoints(time1,price1,time2,price2);

//--- A1@>A8< 7=0G5=85 >H81:8 

   ResetLastError();

//--- A>74048< "#@>2=8 $81>=0GG8" ?> 7040==K< :>>@48=0B0< 

   if(!ObjectCreate(chart_ID,name,OBJ_FIBO,sub_window,time1,price1,time2,price2))

     {

      Print(__FUNCTION__,

            ": =5 C40;>AL A>740BL \"#@>2=8 $81>=0GG8\"! >4 >H81:8 = ",GetLastError());

      return(false);

     }

//--- CAB0=>28< F25B 

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

//--- CAB0=>28< AB8;L ;8=88 

   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);

//--- CAB0=>28< B>;I8=C ;8=88 

   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);

//--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5 

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< 2K45;5=8O >1J5:B0 4;O ?5@5<5I5=89 

//--- ?@8 A>740=88 3@0D8G5A:>3> >1J5:B0 DC=:F859 ObjectCreate, ?> C<>;G0=8N >1J5:B 

//--- =5;L7O 2K45;8BL 8 ?5@5<5I0BL. =CB@8 65 MB>3> <5B>40 ?0@0<5B@ selection 

//--- ?> C<>;G0=8N @025= true, GB> ?>72>;O5B 2K45;OBL 8 ?5@5<5I0BL MB>B >1J5:B 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< ?@>4>;65=8O >B>1@065=8O >1J5:B0 2;52> 

   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< ?@>4>;65=8O >B>1@065=8O >1J5:B0 2?@02> 

   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);

//--- A:@>5< (true) 8;8 >B>1@078< (false) 8<O 3@0D8G5A:>3> >1J5:B0 2 A?8A:5 >1J5:B>2 

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

//--- CAB0=>28 ?@8>@8B5B =0 ?>;CG5=85 A>1KB8O =060B8O <KH8 =0 3@0D8:5 

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

//--- CA?5H=>5 2K?>;=5=85 

   return(true);

  }

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

//| 0405B :>;8G5AB2> C@>2=59 8 8E ?0@0<5B@K                         | 

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

bool FiboLevelsSet(int             levels,            // :>;8G5AB2> ;8=89 C@>2=O 

                   double          &values[],         // 7=0G5=8O ;8=89 C@>2=O 

                   color           &colors[],         // F25B ;8=89 C@>2=O 

                   ENUM_LINE_STYLE &styles[],         // AB8;L ;8=89 C@>2=O 

                   int             &widths[],         // B>;I8=0 ;8=89 C@>2=O 

                   const long      chart_ID=0,        // ID 3@0D8:0 

                   const string    name="FiboLevels") // 8<O >1J5:B0 

  {

//--- ?@>25@8< @07<5@K <0AA82>2 

   if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||

      levels!=ArraySize(widths) || levels!=ArraySize(widths))

     {

      Print(__FUNCTION__,": 4;8=0 <0AA820 =5 A>>B25BAB2C5B :>;8G5AB2C C@>2=59, >H81:0!");

      return(false);

     }

//--- CAB0=>28< :>;8G5AB2> C@>2=59 

   ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);

//--- CAB0=>28< A2>9AB20 C@>2=59 2 F8:;5 

   for(int i=0;i<levels;i++)

     {

      //--- 7=0G5=85 C@>2=O 

      ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);

      //--- F25B C@>2=O 

      ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);

      //--- AB8;L C@>2=O 

      ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);

      //--- B>;I8=0 C@>2=O 

      ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);

      //--- >?8A0=85 C@>2=O 

      ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1));

     }

//--- CA?5H=>5 2K?>;=5=85 

   return(true);

  }

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

//| 5@5<5I05B B>G:C ?@82O7:8 "#@>2=59 $81>=0GG8"                    | 

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

bool FiboLevelsPointChange(const long   chart_ID=0,        // ID 3@0D8:0 

                           const string name="FiboLevels", // 8<O >1J5:B0 

                           const int    point_index=0,     // =><5@ B>G:8 ?@82O7:8 

                           datetime     time=0,            // :>>@48=0B0 2@5<5=8 B>G:8 ?@82O7:8 

                           double       price=0)           // :>>@48=0B0 F5=K B>G:8 ?@82O7:8 

  {

//--- 5A;8 :>>@48=0BK B>G:8 =5 7040=K, B> ?5@5<5I05< 55 =0 B5:CI89 10@ A F5=>9 Bid 

   if(!time)

      time=TimeCurrent();

   if(!price)

      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- A1@>A8< 7=0G5=85 >H81:8 

   ResetLastError();

//--- ?5@5<5AB8< B>G:C ?@82O7:8 

   if(!ObjectMove(chart_ID,name,point_index,time,price))

     {

      Print(__FUNCTION__,

            ": =5 C40;>AL ?5@5<5AB8BL B>G:C ?@82O7:8! >4 >H81:8 = ",GetLastError());

      return(false);

     }

//--- CA?5H=>5 2K?>;=5=85 

   return(true);

  }

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

//| #40;O5B "#@>2=8 $81>=0GG8"                                       | 

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

bool FiboLevelsDelete(const long   chart_ID=0,        // ID 3@0D8:0 

                      const string name="FiboLevels") // 8<O >1J5:B0 

  {

//--- A1@>A8< 7=0G5=85 >H81:8 

   ResetLastError();

//--- C40;8< >1J5:B 

   if(!ObjectDelete(chart_ID,name))

     {

      Print(__FUNCTION__,

            ": =5 C40;>AL C40;8BL \"#@>2=8 $81>=0GG8\"! >4 >H81:8 = ",GetLastError());

      return(false);

     }

//--- CA?5H=>5 2K?>;=5=85 

   return(true);

  }

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

//| @>25@O5B 7=0G5=8O B>G5: ?@82O7:8 "#@>2=59 $81>=0GG8" 8 4;O      | 

//| ?CABKE 7=0G5=89 CAB0=02;8205B 7=0G5=8O ?> C<>;G0=8N              | 

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

void ChangeFiboLevelsEmptyPoints(datetime &time1,double &price1,

                                 datetime &time2,double &price2)

  {

//--- 5A;8 2@5<O 2B>@>9 B>G:8 =5 7040=>, B> >=0 1C45B =0 B5:CI5< 10@5 

   if(!time2)

      time2=TimeCurrent();

//--- 5A;8 F5=0 2B>@>9 B>G:8 =5 7040=0, B> >=0 1C45B 8<5BL 7=0G5=85 Bid 

   if(!price2)

      price2=SymbolInfoDouble(Symbol(),SYMBOL_BID);

//--- 5A;8 2@5<O ?5@2>9 B>G:8 =5 7040=>, B> >=0 ;568B =0 9 10@>2 ;5255 2B>@>9 

   if(!time1)

     {

      //--- <0AA82 4;O ?@85<0 2@5<5=8 >B:@KB8O 10 ?>A;54=8E 10@>2 

      datetime temp[10];

      CopyTime(Symbol(),Period(),time2,10,temp);

      //--- CAB0=>28< ?5@2CN B>G:C =0 9 10@>2 ;5255 2B>@>9 

      time1=temp[0];

     }

//--- 5A;8 F5=0 ?5@2>9 B>G:8 =5 7040=0, B> A428=5< 55 =0 200 ?C=:B>2 =865 2B>@>9 

   if(!price1)

      price1=price2-200*SymbolInfoDouble(Symbol(),SYMBOL_POINT);

  }

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

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

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

int FindFirstExtremum(int StartPos,int Rates_total,double &Array[],const double &rhigh[],const double &rlow[],int &Sign,double &Extremum)

  {

//----

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



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

     {

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

        {

         Extremum=Array[bar];

         if(Extremum==rhigh[bar]) Sign=+1;

         else if(Extremum==rlow[bar]) Sign=-1;

         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 &Array[],const double &rhigh[],const double &rlow[],int &Sign,double &Extremum)

  {

//----

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



   if(Direct==-1)

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

        {

         if(Array[bar]==rhigh[bar])

           {

            Sign=+1;

            Extremum=Array[bar];

            return(bar);

            break;

           }



        }



   if(Direct==+1)

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

        {

         if(Array[bar]==rlow[bar])

           {

            Sign=-1;

            Extremum=Array[bar];

            return(bar);

            break;

           }

        }

//----

   return(-1);

  }

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

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---