Author: Oleg Fedorov aka certain
0 Views
0 Downloads
0 Favorites
TrendEndOF
ÿþ//+------------------------------------------------------------------+

//|                                                  TrendEnd_OF.mq4 |

//|                                                     Oleg Fedorov |

//|                              voltIrEvvoyRipyafjamNeidy@gmail.com |

//|                                              5@A8O >B 15.12.2017|

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

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

//| @838=0;L=0O 845O: JLY                                           |

//| 1AC645=85: 2 B5<5 https://www.mql5.com/ru/forum/12503           | 

//|                                                                  |

//| ;O >B@8A>2:8 F5;52KE B>G5: ?>:0 8A?>;L7>20= :>4 >@838=0;L=>3>   |

//| 8=48:0B>@0 25@A88 3.6, :>B>@K9 =5 ?@>25@O;AO 8                   |

//| =5 >?B8<878@>20;AO.                                              |

//|                                                                  |

//| 7<5=5=8O ?> A@02=5=8N A >@838=0;><:                             |

//| - @50;87>20=0 2>7<>6=>ABL A>2<5AB=>9 @01>BK A 4@C38<8            |

//|   8=48:0B>@0<8 (B5?5@L 8=48:0B>@ C40;O5B _B>;L:>_ "A2>8" >1J5:BK,|

//|   0 =5 2A5, :0: 1K;> C 02B>@0                                    |

//| - 2@5<O ":>=F0 B@5=40" @8AC5BAO A ?><>ILN 25@B8:0;L=>9 ;8=88     |

//|   (FiboTimes)                                                    |

//| - 7=0G:8 ":>=F0 B@5=40" 8 ">1@0B=>3> :>=F0" ;560B G5B:>          |

//|   =0 25@B8:0;OE, 345, AC4O ?> B><C, :0: O ?>=O; 70<KA5; 02B>@0,  |

//|   >=8 8 4>;6=K 1KBL (8=K<8 A;>20<8, 4;O 1>;LH8=AB20 A;CG052      |

//|   @5H5=0 ?@>1;5<0 =570?;0=8@>20==>3> A42830)                     |

//| - 2>72@0I5= 3>@87>=B0;L=K9 C@>25=L ":>=F0 D;MB0" (:0:            |

//|   2 25@A88 2.2 >@838=0;0)                                        |

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

#property copyright "Oleg Fedorov aka certain"

#property link      "voltIrEvvoyRipyafjamNeidy@gmail.com"

#property version   "1.10"

#property strict

#property indicator_chart_window

//---

extern color      otboi=Blue;                  // F25B ">B1>O"

extern color      neotboi=Red;                 // F25B "=5 >B1>O"

extern int        win=0;                       // ><5@ >:=0 4;O @8>A>20=8O

extern bool       obrat=true;                  // B@8A>2:0 >1@0B=>3> ":>=F0" B@5=4>2>9 ;8=88

extern bool       obratAsVertical=false;       // B@8A>2:0 >1@0B=>3> ":>=F0" 2 2845 25@B8:0;L=>9 G5@BK

extern bool       delArrow=false;              // C40;5=85 2A5E 7=0G:>2 ?@8 ?5@5:;NG5=88 B09<D@59<0 8 C40;5=88 8=48:0B>@0

extern bool       delLevels=false;             // C40;5=85 2A5E C@>2=59 ?@8 ?5@5:;NG5=88 B09<D@59<0 8 C40;5=88 8=48:0B>@0

extern bool       ray=true;                    // !45;0BL ;8=8N ;CG><

extern string     prefix="TrEnd";              // @5D8:A 8<5=8 4;O 2A5E >1J5:B>2 40==>3> 8=48:0B>@0. 

                                               // 1O70B5;5= 2 8<5=8, 5A;8 E>B8<, GB>1K 8=48:0B>@ "?>4E20B8;" ;8=8N.

extern bool       hLinesAlways=false;          // A5340 >B>1@060BL 3>@87>=B0;L=K5 C@>2=8, 2=5 7028A8<>AB8 >B =0AB@>5: >A=>2=>9 ;8=88

//---

int nextLineNumber=0;

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

//| Custom indicator initialization function                         |

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

int OnInit()

  {

//--- indicator buffers mapping

   EventSetTimer(1);

//---

   return(INIT_SUCCEEDED);

  }

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

//| 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[])

  {

//---



//--- return value of prev_calculated for next call

   return(rates_total);

  }

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

//|                                                                  |

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

void OnDeinit(const int reason)

  {

   if(delArrow)

     {

      ObjectsDeleteAll(win,prefix+"Arrow");

     }

   if(delLevels)

     {

      ObjectsDeleteAll(win,prefix+"FletEnd");

      ObjectsDeleteAll(win,prefix+"TrendEnd");

     }

   EventKillTimer();

  }

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

//| ChartEvent function                                              |

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

void OnChartEvent(const int id,

                  const long &lparam,

                  const double &dparam,

                  const string &sparam)

  {

//---



  }

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

//| Main counting - not ticks, because works wis graphical objects   |

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

void OnTimer()

  {

   string obj_currentName,obj_neededName;

   string obj_namePrefix;

   double price1,price2;

   datetime time1,time2;

   string timeT;

   int prefixLength=StringLen(prefix);

   int prefixLineLength=StringLen(prefix+"Line");

   int currentLineNumber;

   int totalUsableLines=0;

   string usableLinesNames[];

   int i;

   color obj_currentColor;

   long obj_timeframe;

//---

// 0 2E>45 C40;O5< 2A5 7=0G:8, =0@8A>20==K5 8=48:0B>@><

   ObjectsDeleteAll(win,prefix+"Arrow");

   ObjectsDeleteAll(win,prefix+"TrendEnd");

   ObjectsDeleteAll(win,prefix+"FletEnd");

// 0E>48< 2A5 =C6=K5 ;8=88 8 A:;04K205< 8E 2 <0AA82

   for(i=0;i<ObjectsTotal();i++)

     {

      obj_currentName=ObjectName(i);



      obj_namePrefix=StringSubstr(obj_currentName,0,prefixLength);



      if((ObjectType(obj_currentName)==OBJ_TREND) && (obj_namePrefix==prefix))

        {

         totalUsableLines++;

         ArrayResize(usableLinesNames,totalUsableLines);

         usableLinesNames[totalUsableLines-1]=obj_currentName;

        }

     }

//---

// 1@010BK205< =0945==>5

   for(i=0;i<ArraySize(usableLinesNames);i++)

     {

      obj_currentName=usableLinesNames[i];

      obj_currentColor=(color)ObjectGetInteger(0,obj_currentName,OBJPROP_COLOR);

      if(ObjectFind(obj_currentName)==win)

        {

         // 018@05< :>>@48=0BK

         price1=ObjectGetDouble(win,obj_currentName, OBJPROP_PRICE1);

         price2=ObjectGetDouble(win,obj_currentName, OBJPROP_PRICE2);

         time1=(datetime)ObjectGetInteger(win,obj_currentName, OBJPROP_TIME1);

         time2=(datetime)ObjectGetInteger(win,obj_currentName, OBJPROP_TIME2);

         // 5@52>4 2 AB@>:C =0G0;L=>3> 2@5<5=8 4;O ;8=88

         timeT=TimeToStr(time1,TIME_DATE|TIME_SECONDS);

         // A;8 8<O ;8=88 =5 A>>B25BAB2C5B AB0=40@B0<...

         if(StringSubstr(obj_currentName,0,prefixLineLength)!=(prefix+"Line"))

           {

            // ... B> ?5@5=07K205<

            obj_neededName=prefix+"Line"+IntegerToString(nextLineNumber);

            ObjectSetString(win,obj_currentName,OBJPROP_NAME,obj_neededName);

            obj_currentName=obj_neededName;

            nextLineNumber++;

           }

         // 040Q< ?>4?8AL, GB>1K >B;8G0BL >B 4@C38E

         ObjectSetText(obj_currentName,DoubleToString(price1,Digits)+"-'-"+timeT);

         if(ray) 

           { // CG

            ObjectSetInteger(win,obj_currentName,OBJPROP_RAY,true);

           }

         //---



         //  8AC5< AB@5;:8 70=>2>

         currentLineNumber=StrToInteger(StringSubstr(obj_currentName,prefixLineLength));



         DrawCurrentArrows(currentLineNumber,time1,price1,time2,price2);

         DrawTrendEndTime(currentLineNumber,time1,price1,time2,price2,obj_currentColor);



         double price3=price2-(price1-price2); // 2*price2-price1

         double price4=price3-(price2-price3); // 2*price3-price2 = 3*price2-2*price1



         obj_currentName=prefix+"FletEnd"+IntegerToString(currentLineNumber);

         ObjectCreate(obj_currentName,OBJ_HLINE,0,0,price4);

         ObjectSet(obj_currentName,OBJPROP_COLOR,obj_currentColor);

         ObjectSet(obj_currentName,OBJPROP_STYLE,STYLE_DOT);

         if(!hLinesAlways)

           {

            obj_timeframe=ObjectGetInteger(win,prefix+"Line"+IntegerToString(currentLineNumber),OBJPROP_TIMEFRAMES);

            ObjectSetInteger(win,obj_currentName,OBJPROP_TIMEFRAMES,obj_timeframe);

           }

         //---



        }

     }

//---

  }

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

//|                                                                  |

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

void DrawCurrentArrows(int currentLineNumber,

                       datetime time1,double price1,

                       datetime time2,double price2

                       )

  {

//---

/*string arrowsNames[][2] = {{" ExtremumNeOtboi"},{" TargetNeOtboi"} ,{" TargetCentrNeOtboi"}  ,{" FletCentrNeOtboi"},

                           {" ExtremumOtboi"}  ,{" TargetOtboi"}   ,{" TargetCentrOtboi"}    ,{" FletCentrOtboi"}, 

                           {" TrendEnd","86"}       ,{" TrendEndOBRAT","170"}};*/

   double price3,price3OBRAT;

   datetime time3,time3OBRAT;

   string timeOBRAT,time;

   int delta;

   string currentObjectName;

   long timeframes=ObjectGetInteger(0,prefix+"Line"+IntegerToString(currentLineNumber),OBJPROP_TIMEFRAMES);

//---

   delta=GetBarsBetween(time1,time2);

//  0AG5B F5=K 8 2@5<5=8 3-9 B>G:8 (">:>=G0=8O" ;8=88 B@5=40)

   price3   =  price2-(price1-price2);

   time3    =  TimeShifted(time2,delta);

//  0AG5B F5=K 8 2@5<5=8 3-9 B>G:8 (">:>=G0=8O"  " ;8=88 B@5=40)

   price3OBRAT =  price1+(price1-price2);

   time3OBRAT  =  TimeShifted(time1,-delta);

// "5:AB>2>5 ?@54AB02;5=85 2@5<5=8 4;O >?8A0=8O ":>=F0" B@5=4>2>9 ;8=88

   time=TimeToStr(time3,TIME_DATE|TIME_SECONDS);

// "5:AB>2>5 ?@54AB02;5=85 2@5<5=8 4;O >?8A0=8O ":>=F0"  " B@5=4>2>9 ;8=88

   timeOBRAT=TimeToStr(time3OBRAT,TIME_DATE|TIME_SECONDS);



// B@8A>2:0  " ":>=F0" B@5=4>2>9 ;8=88

   if(obrat)

     {

      currentObjectName=prefix+"Arrow"+IntegerToString(currentLineNumber)+" TrendEndOBRAT";

      ObjectCreate(currentObjectName,OBJ_ARROW,win,time3OBRAT,price3OBRAT);



      ObjectSetText(currentObjectName,

                    DoubleToString(price3OBRAT,Digits)+"-1@0B=K9 :>=5F-"+timeOBRAT);

      ObjectSet(currentObjectName,OBJPROP_ARROWCODE,170);

      ObjectSetInteger(win,currentObjectName,OBJPROP_TIMEFRAMES,timeframes);

     }



//B@8A>2:0 ":>=F0" B@5=4>2>9 ;8=88

   currentObjectName=prefix+"Arrow"+IntegerToString(currentLineNumber)+" TrendEnd";

   ObjectCreate(currentObjectName,OBJ_ARROW,win,time3,price3);

   ObjectSetText(currentObjectName,DoubleToString(price3,Digits)+"-&-"+time);

   ObjectSet(currentObjectName,OBJPROP_COLOR,neotboi);

   ObjectSet(currentObjectName,OBJPROP_ARROWCODE,86);

   ObjectSetInteger(win,currentObjectName,OBJPROP_TIMEFRAMES,timeframes);



//5@52>4 2@5<5=8 2 10@K

   datetime time01=time1;

   datetime time02=time2;

   int shift01=iBarShift(Symbol(),0,time01);

   int shift02=iBarShift(Symbol(),0,time02);

// 0AG5B M:AB@5<C<>2, C@>2=59 8 F5;59  



   int timeCHANGE=shift01-shift02;

   datetime timeExtrem=0;datetime timeExtrem2=0;

   double priceExtrem=0;double priceExtrem2=0;

   double priceCorrect=0;double priceCorrect2=0;

   double priceTarget=0;double priceTarget2=0;

   double priceFletCentr=0;double priceFletCentr2=0;

   double priceTargetCentr=0;double priceTargetCentr2=0;



   int SHT=1;



   if(price2>price1)

     { //B>@0O F5=>20O B>G:0 ;8=88 2KH5 ?5@2>9

      priceCorrect=Low[iLowest(NULL,0,MODE_LOW,timeCHANGE-SHT,shift02+SHT)];

      if(priceCorrect<price1)

        {

         timeExtrem=0;priceExtrem=0;//#40;5=85 =5=C6=KE >1J5:B>2

         ObjectSet(prefix+"Arrow"+IntegerToString(currentLineNumber)+" TrendEnd",OBJPROP_COLOR,otboi);

         ObjectSet(prefix+"Arrow"+IntegerToString(currentLineNumber)+" TrendEndOBRAT",OBJPROP_COLOR,otboi);

           }else {

         timeExtrem=Time[iHighest(NULL,0,MODE_HIGH,timeCHANGE-SHT,shift02+SHT)];

         priceExtrem=High[iHighest(NULL,0,MODE_HIGH,timeCHANGE-SHT,shift02+SHT)];

         priceTarget=priceExtrem+(priceExtrem-price2);

         priceFletCentr=(priceExtrem+price2)/2;

         priceTargetCentr=priceExtrem+((priceExtrem-price2)/2);

        }

        }else if(price2<price1){ //5@20O F5=>20O B>G:0 ;8=88 2KH5 2B>@>9

      priceCorrect=High[iHighest(NULL,0,MODE_HIGH,timeCHANGE-SHT,shift02+SHT)];

      if(priceCorrect>price1)

        {

         ObjectSet(prefix+"Arrow"+IntegerToString(currentLineNumber)+" TrendEnd",OBJPROP_COLOR,otboi);

         ObjectSet(prefix+"Arrow"+IntegerToString(currentLineNumber)+" TrendEndOBRAT",OBJPROP_COLOR,otboi);

         timeExtrem=0;priceExtrem=0;//#40;5=85 =5=C6=KE >1J5:B>2

           }else {

         timeExtrem=Time[iLowest(NULL,0,MODE_LOW,timeCHANGE-SHT,shift02+SHT)];

         priceExtrem=Low[iLowest(NULL,0,MODE_LOW,timeCHANGE-SHT,shift02+SHT)];

         priceTarget=priceExtrem-(price2-priceExtrem);

         priceFletCentr=(priceExtrem+price2)/2;

         priceTargetCentr=priceExtrem+((priceExtrem-price2)/2);

        }

     }



//--------------------------------------------  



   if(price2<price1)

     { //5@20O F5=>20O B>G:0 ;8=88 2KH5 2B>@>9

      priceCorrect2=Low[iLowest(NULL,0,MODE_LOW,timeCHANGE-SHT,shift02+SHT)];

      if(price2>priceCorrect2)

        {

         timeExtrem2=0;priceExtrem2=0;//#40;5=85 =5=C6=KE >1J5:B>2

           }else {

         timeExtrem2=Time[iHighest(NULL,0,MODE_HIGH,timeCHANGE-SHT,shift02+SHT)];

         priceExtrem2=High[iHighest(NULL,0,MODE_HIGH,timeCHANGE-SHT,shift02+SHT)];

         priceTarget2=priceExtrem2+(priceExtrem2-price2);

         priceFletCentr2=(priceExtrem2+price2)/2;

         priceTargetCentr2=priceExtrem2+((priceExtrem2-price2)/2);

        }

        }else if(price2>price1){ //B>@0O F5=>20O B>G:0 ;8=88 2KH5 ?5@2>9

      priceCorrect2=Low[iLowest(NULL,0,MODE_LOW,timeCHANGE-SHT,shift02+SHT)];

      if(priceCorrect2>price1)

        {

         timeExtrem2=0;priceExtrem2=0;//#40;5=85 =5=C6=KE >1J5:B>2

           }else {

         timeExtrem2=Time[iLowest(NULL,0,MODE_LOW,timeCHANGE-SHT,shift02+SHT)];

         priceExtrem2=Low[iLowest(NULL,0,MODE_LOW,timeCHANGE-SHT,shift02+SHT)];

         priceTarget2=priceExtrem2+(priceExtrem2-price2);

         priceFletCentr2=(priceExtrem2+price2)/2;

         priceTargetCentr2=priceExtrem2+((priceExtrem2-price2)/2);

        }

     }



//------------------------------

//-------------------------------------------------------------------------

//B@8A>2:0 M:AB@5<C<>2, C@>2=59 8 F5;59

   currentObjectName=prefix+"Arrow"+IntegerToString(currentLineNumber)+" ExtremumNeOtboi";

   ObjectCreate(currentObjectName,OBJ_ARROW,win,timeExtrem,priceExtrem);

   ObjectSet(currentObjectName,OBJPROP_COLOR,neotboi);

   ObjectSet(currentObjectName,OBJPROP_ARROWCODE,161);

   ObjectSetText(currentObjectName,"-:AB@5<C< =5 >B18B>3> D;MB0 - "+DoubleToString(priceExtrem,Digits));

   ObjectSetInteger(win,currentObjectName,OBJPROP_TIMEFRAMES,timeframes);



   currentObjectName=prefix+"Arrow"+IntegerToString(currentLineNumber)+" ExtremumOtboi";

   ObjectCreate(currentObjectName,OBJ_ARROW,win,timeExtrem2,priceExtrem2);

   ObjectSet(currentObjectName,OBJPROP_COLOR,otboi);

   ObjectSet(currentObjectName,OBJPROP_ARROWCODE,161);

   ObjectSetInteger(win,currentObjectName,OBJPROP_TIMEFRAMES,timeframes);



   currentObjectName=prefix+"Arrow"+IntegerToString(currentLineNumber)+" TargetNeOtboi";

   ObjectCreate(currentObjectName,OBJ_ARROW,win,timeExtrem,priceTarget);

   ObjectSet(currentObjectName,OBJPROP_COLOR,neotboi);

   ObjectSet(currentObjectName,OBJPROP_ARROWCODE,177);

   ObjectSetText(currentObjectName,"&5;L =5 >B18B>3> D;MB0 - "+DoubleToString(priceTarget,Digits));

   ObjectSetInteger(win,currentObjectName,OBJPROP_TIMEFRAMES,timeframes);



   currentObjectName=prefix+"Arrow"+IntegerToString(currentLineNumber)+" TargetOtboi";

   ObjectCreate(currentObjectName,OBJ_ARROW,win,timeExtrem2,priceTarget2);

   ObjectSet(currentObjectName,OBJPROP_COLOR,otboi);

   ObjectSet(currentObjectName,OBJPROP_ARROWCODE,177);

   ObjectSetText(currentObjectName,"&5;L >B18B>3> D;MB0 - "+DoubleToString(priceTarget2,Digits));

   ObjectSetInteger(win,currentObjectName,OBJPROP_TIMEFRAMES,timeframes);



   currentObjectName=prefix+"Arrow"+IntegerToString(currentLineNumber)+" FletCentrNeOtboi";

   ObjectCreate(currentObjectName,OBJ_ARROW,win,timeExtrem,priceFletCentr);

   ObjectSet(currentObjectName,OBJPROP_COLOR,neotboi);

   ObjectSet(currentObjectName,OBJPROP_ARROWCODE,108);

   ObjectSetText(currentObjectName,"&5=B@ =5 >B18B>3> D;MB0 - "+DoubleToString(priceFletCentr,Digits));

   ObjectSetInteger(win,currentObjectName,OBJPROP_TIMEFRAMES,timeframes);



   currentObjectName=prefix+"Arrow"+IntegerToString(currentLineNumber)+" FletCentrOtboi";

   ObjectCreate(currentObjectName,OBJ_ARROW,win,timeExtrem2,priceFletCentr2);

   ObjectSet(currentObjectName,OBJPROP_COLOR,otboi);

   ObjectSet(currentObjectName,OBJPROP_ARROWCODE,108);

   ObjectSetText(currentObjectName,"&5=B@ >B18B>3> D;MB0 - "+DoubleToString(priceFletCentr2,Digits));

   ObjectSetInteger(win,currentObjectName,OBJPROP_TIMEFRAMES,timeframes);



   currentObjectName=prefix+"Arrow"+IntegerToString(currentLineNumber)+" TargetCentrNeOtboi";

   ObjectCreate(currentObjectName,OBJ_ARROW,win,timeExtrem,priceTargetCentr);

   ObjectSet(currentObjectName,OBJPROP_COLOR,neotboi);

   ObjectSet(currentObjectName,OBJPROP_ARROWCODE,176);

   ObjectSetText(currentObjectName,"!@54=OO F5;L =5 >B18B>3> D;MB0- "+DoubleToString(priceTargetCentr,Digits));

   ObjectSetInteger(win,currentObjectName,OBJPROP_TIMEFRAMES,timeframes);



   currentObjectName=prefix+"Arrow"+IntegerToString(currentLineNumber)+" TargetCentrOtboi";

   ObjectCreate(currentObjectName,OBJ_ARROW,win,timeExtrem2,priceTargetCentr2);

   ObjectSet(currentObjectName,OBJPROP_COLOR,otboi);

   ObjectSet(currentObjectName,OBJPROP_ARROWCODE,176);

   ObjectSetText(currentObjectName,"!@54=OO F5;L >B18B>3> D;MB0- "+DoubleToString(priceTargetCentr2,Digits));

   ObjectSetInteger(win,currentObjectName,OBJPROP_TIMEFRAMES,timeframes);

  }

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

//| Function return difference between two times, if it has shift    |

//| throuth weekends.                                                |

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

long GetWeekendsDelta(datetime time1,datetime time2,int timeframe=PERIOD_CURRENT)

  {

   long delta=0;

   int n1,n2;

   long d1,d2;

//---

   n1=iBarShift(Symbol(),timeframe,time1);

   n2=iBarShift(Symbol(),timeframe,time2);

   d1=MathAbs(n1-n2);

   d2=MathAbs(time1-time2)/PeriodSeconds(timeframe);

   if(d1!=d2)

     {

      delta=d2-d1;

     }

//---

   return delta;

  }

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

//|                                                                  |

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

void DrawTrendEndTime(int currentLineNumber,

                      datetime time1,double price1,

                      datetime time2,double price2,

                      color currentColor=NULL

                      )

  {

   string obj_currentName=prefix+"TrendEnd"+IntegerToString(currentLineNumber);

   string currentLineName=prefix+"Line"+IntegerToString(currentLineNumber);

   color obj_currentColor;

   if(currentColor==NULL)

     {

      obj_currentColor=(color) ObjectGetInteger(0,currentLineName,OBJPROP_COLOR);

     }

   else 

     {

      obj_currentColor=currentColor;

     }

   int width = (int) ObjectGetInteger(0,currentLineName,OBJPROP_WIDTH);

   int style = (int) ObjectGetInteger(0,currentLineName,OBJPROP_STYLE);

   int timeframes=(int) ObjectGetInteger(0,currentLineName,OBJPROP_TIMEFRAMES);

//---

   ObjectCreate(obj_currentName,OBJ_FIBOTIMES,win,time1,price1,time2,price2);

   ObjectSetInteger(win,obj_currentName,OBJPROP_COLOR,obj_currentColor);

   if(obratAsVertical) 

     {

      ObjectSet(obj_currentName,OBJPROP_FIBOLEVELS,2);

      ObjectSet(obj_currentName,OBJPROP_FIRSTLEVEL+0,-1);

      ObjectSet(obj_currentName,OBJPROP_FIRSTLEVEL+1,2);

      ObjectSetFiboDescription(obj_currentName,1,""+currentLineName);

     }

   else 

     {

      ObjectSet(obj_currentName,OBJPROP_FIBOLEVELS,1);

      ObjectSet(obj_currentName,OBJPROP_FIRSTLEVEL+0,2);

      ObjectSetFiboDescription(obj_currentName,0,""+currentLineName);

     }



   ObjectSet(obj_currentName,OBJPROP_LEVELCOLOR,obj_currentColor);

   ObjectSet(obj_currentName,OBJPROP_LEVELSTYLE,2);

   ObjectSet(obj_currentName,OBJPROP_COLOR,obj_currentColor);

   ObjectSet(obj_currentName,OBJPROP_WIDTH,width);

   ObjectSet(obj_currentName,OBJPROP_STYLE,style);

   ObjectSet(obj_currentName,OBJPROP_TIMEFRAMES,timeframes);

//---

  }

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

//| >72@0I05B :>;8G5AB2> 10@>2, =0 :>B>@K5 time2 A428=CB> 2 1C4CI55 |

//| >B=>A8B5;L=> =C;52>3> 10@0. A;8 >15 40BK 2 ?@>H;>< - 25@=QB 0.  |

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

long GetFutureBarsShift(datetime time1,

                        datetime time2,

                        ENUM_TIMEFRAMES period=PERIOD_CURRENT

                        )

  {

//---

   long nPoint1,nPoint2;

   long shift=0;

   long delthaBars,delthaTime;

//---

   nPoint1 = iBarShift(Symbol(),0,time1);

   nPoint2 = iBarShift(Symbol(),0,time2);



   delthaBars = MathAbs(nPoint1-nPoint2);

   delthaTime = MathAbs(time1-time2)/PeriodSeconds(period);



   if(delthaBars!=delthaTime)

     {

      shift=delthaTime-delthaBars;

     }

//---

   return (shift);

//---

  }

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

//| >72@0I05B 2@5<O ?> A<5I5=8N (=><5@C 10@0).                      |

//| B@88F0B5;L=K9 =><5@ 2>72@0I05B 2@5<O A?@020 >B =C;52>3> 10@0.   |

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

datetime xTime(int shift,ENUM_TIMEFRAMES period=PERIOD_CURRENT)

  {

//---

   if(shift<0) return(Time[0]-shift*PeriodSeconds(period));

//---

   return(Time[shift]);

//---

  }

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

//| >72@0I05B 2@5<O, A428=CB>5 =0 barsToShift 10@>2 >B=>A8B5;L=>    |

//| A25G8 startTime                                                  |

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

datetime TimeShifted(datetime startTime,                    // @5<O, >B :>B>@>3> =0G8=05BAO A4283

                     long shiftPeriod,                      // 0 A:>;L:> 10@>2 A42830BL

                     int multiplier=1,                      // A;8 =04> A42830BL =0 =5A:>;L:> "?5@8>4>2" - 

                                                            // ;CGH5 ?@54?>G5ABL A;>65=85 C<=>65=8N (2 "4 B0: 1C45B B>G=55)

                     ENUM_TIMEFRAMES period=PERIOD_CURRENT  // 5@8>4 (B09<D@59<), =0 :>B>@>< ?@>8AE>48B A4283 (?> C<>;G0=8N - B5:CI89)



                     )

  {

//---

   long barsTotal=0;

//---

   for(int i=0; i<=multiplier-1; i++)

     {

      barsTotal+=shiftPeriod;

     }

//---

   return (datetime)(startTime+barsTotal*PeriodSeconds(period));

//---

  }

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

//| >72@0I05B @07=8FC 2 10@0E <564C 42C<O F5=0<8                    |

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

int GetBarsBetween(datetime time1,

                   datetime time2,

                   ENUM_TIMEFRAMES period=PERIOD_CURRENT

                   )

  {

//---

   int delta,shift;

//---

// >;CG05< :>;8G5AB2> 10@>2 70 =C;52K< 10@><

   shift=(int) GetFutureBarsShift(time1,time2,period);

// >4AG8BK205< >1I55 :>;8G5AB2> 10@>2 (A CG5B>< 1C4CI53>)

   delta=iBarShift(Symbol(),0,time1)-iBarShift(Symbol(),0,time2)+shift;

//---

   return (delta);

//---  

  }

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

Comments