Searching_Nearest_Bar

Author: Copyright © 2016, Vladimir Karputov
0 Views
0 Downloads
0 Favorites
Searching_Nearest_Bar
ÿþ//+------------------------------------------------------------------+

//|                                        Searching Nearest Bar.mq5 |

//|                              Copyright © 2016, Vladimir Karputov |

//|                                           http://wmua.ru/slesar/ |

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

#property copyright "Copyright © 2016, Vladimir Karputov"

#property link      "http://wmua.ru/slesar/"

#property version   "1.001"

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

//| Script program start function                                    |

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

void OnStart()

  {

//--- 2>72@0I05B 2@5<5==CN :>>@48=0BC, A>>B25BAB2CNICN B>G:5, 2 :>B>@>9 1@>H5= <KH:>9 40==K9 M:A?5@B 8;8 A:@8?B

   datetime t=ChartTimeOnDropped();

//--- >1JO2;5=85 ?5@5<5==>9 4;O =0945==>3> 2@5<5=8

   datetime found_t=0;

   int bar=SearchingNearestBar(Symbol(),Period(),t,found_t);

   if(bar!=-1)

      Print("0@ =><5@ ",bar,", 2@5<O 10@0 ",found_t);

  }

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

//| >8A: 1;8609H53> 10@0                                            |

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

int SearchingNearestBar(string symbol,

                        ENUM_TIMEFRAMES time_frame,

                        datetime find_time,

                        datetime &found_time)

  {

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

//| symbol - A8<2>;                                                  |

//| time_frame - ?5@8>4                                              |

//| find_time - 8A:><>5 2@5<O                                        |

//| found_time - 2@5<O >B:@KB8O 1;8609H53> 10@0                      |

//| 5A;8 DC=:F8O 2>72@0B8;0 "-1", 7=0G8B ?5@5<5==0O "found_time"     |

//|     A>45@68B =5>?@545;Q=>5 7=0G5=85                              |

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

   if(find_time<0)

      return(-1);

   datetime arr_time[];

   datetime time_left=0;

   datetime time_right=0;

//--- >1@0I5=85 ?> =0G0;L=>9 ?>78F88 "0" 8 :>;8G5AB2C B@51C5<KE M;5<5=B>2 "1"

   CopyTime(symbol,time_frame,0,1,arr_time);

//--- ?>;CG05< 2@5<O >B:@KB8O 10@0 "0" (A0<>3> ?@02>3> 10@0 =0 3@0D8:5)

   datetime time0=arr_time[0];

//--- >A2>1>6405< 1CD5@ 48=0<8G5A:>3> <0AA820 "arr_time" 8 CAB0=02;8205< @07<5@ =C;52>3> 87<5@5=8O 2 0

   ArrayFree(arr_time);

//--- >1@0I5=85 ?> =0G0;L=>9 40B5 "find_time" 8 :>;8G5AB2C B@51C5<KE M;5<5=B>2 "1"

   if(CopyTime(symbol,time_frame,find_time,1,arr_time)>0)

     {

      time_left=arr_time[0];

      //--- 5A;8 time0==time_left, 7=0G8B 8A:><>5 2@5<O =0E>48BAO ?@0255 10@0 A 8=45:A>< "0"

      if(time0==time_left)

        {

         found_time=time0;

         return(0);

        }

      else

         ArrayFree(arr_time); // >A2>1>6405< 1CD5@ 48=0<8G5A:>3> <0AA820 "arr_time" 8 CAB0=02;8205< @07<5@ =C;52>3> 87<5@5=8O 2 0

      //--- >1@0I5=85 ?> =0G0;L=>9 "time_left" 8 :>=5G=>9 "time0" 40B0< B@51C5<>3> 8=B5@20;0 2@5<5=8

      int count=CopyTime(symbol,time_frame,time_left,time0,arr_time);

      if(count>0)

        {

         //--- 2 <0AA825 arr_time[] M;5<5=B A 8=45:A>< "0", =0 3@0D8:5, 1C45B ;5255 M;5<5=B0 "count-1"

         //Print("<564C ",time_left," 8 ",time0," ",count," 10@>2. 0@ [",0,"] ",arr_time[0]);

         time_left=arr_time[0];

         time_right=arr_time[1];

         //--- >1JOA=5=85, :0:85 10@K 8<55NB :0:>5 2@5<O

         //Print(";52K9 10@ 8<55B 2@5<O ",time_left,", 8A:><>5 2@5<O ",find_time,", ?@02K9 10@ 8<55B 2@5<O ",time_right);

         //--- A@54=55 2@5<O <564C time_left 8 time_right

         datetime middle_time=(time_left+time_right)/2;

         if(find_time<middle_time)

           {

            //--- >1@0I5=85 ?> =0G0;L=>9 "time_left" 8 :>=5G=>9 "time0" 40B0< B@51C5<>3> 8=B5@20;0 2@5<5=8

            int count_bar=CopyTime(symbol,time_frame,time_left,time0,arr_time);

            if(count_bar!=-1)

              {

               //Print(time_left);

               found_time=time_left;

               return (count_bar-1);

              }

           }

         else

           {

            //--- >1@0I5=85 ?> =0G0;L=>9 "time_right" 8 :>=5G=>9 "time0" 40B0< B@51C5<>3> 8=B5@20;0 2@5<5=8

            int count_bar=CopyTime(symbol,time_frame,time_right,time0,arr_time);

            if(count_bar!=-1)

              {

               //Print(time_right);

               found_time=time_right;

               return (count_bar-1);

              }

           }

        }

      else

         return(-1);

     }

   return(-1);

  }

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

Comments