TheoryPairs

Author: Copyright � 2010, Andrey Vassiliev (MoneyJinn)
Price Data Components
Series array that contains open time of each barSeries array that contains open prices of each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
TheoryPairs
//+------------------------------------------------------------------+
//|                                                  TheoryPairs.mq4 |
//|                               Copyright © 2010, Andrey Vassiliev |
//|                                          http://www.vassiliev.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Andrey Vassiliev (MoneyJinn)"
#property link      "http://www.vassiliev.ru"

//Èíäèêàòîð ñîçäàí íà îñíîâå òåîðèè ïàð òðàåêòîðèé. Àâòîð òåîðèè: Àíäðåé Âàñèëüåâ.
//Èíäèêàòîð îïðåäåëÿåò âîçìîæíîå íàïðàâëåíèå âòîðîé òðàåêòîðèè ïàðû è îòîáðàæàåò 
//åãî â òî÷êå íà÷àëà ýòîé òðàåêòîðèè.
//Ðåêîìåíäóåìàÿ ðàáî÷àÿ ïàðà âàëþò: USD/CHF, M1 èëè M5.
//Îáñóæäåíèå èíäèêàòîðà è òåîðèè ïàð òðàåêòîðèé: http://forum.mql4.com/ru/36231
//Íîâûå âåðñèè èíäèêàòîðà: http://www.moneyjinn.com
//Ïî÷òîâûé àäðåñ àâòîðà: andrey@vassiliev.ru
//Ïóáëèêàöèÿ, ïåðåïðîäàæà, ðàñïðîñòðàíåíèå âíóòðè ëþáûõ ñîîáùåñòâ, êîììåð÷åñêîå
//ðàñïðîñòðàíåíèå èíäèêàòîðà èëè ÷àñòè åãî êîäà áåç ðàçðåøåíèÿ àâòîðà çàïðåùåíû!

#property indicator_chart_window

double PUP;
double PDN;
double UP;
double DN;
double E;

//IndicatorBuffers(3);
double UPB[];
double DNB[];
double EB[];

//Âðåìÿ íà÷àëà òîðãîâîé ñåññèè.
extern string StartTime="11:00";

//Âðåìÿ îêîí÷àíèÿ òîðãîâîé ñåññèè.
extern string EndTime="23:00";

//Ìàêñèìàëüíàÿ äëèòåëüíîñòü òîðãîâîé ñåññèè - 24 ÷àñà.
//Âðåìÿ ñåðâåðà ÄÖ, èñïîëüçîâàííîãî ïðè òåñòèðîâàíèè, ðàâíî: MSK - 2, ãäå MSK - Ìîñêîâñêîå âðåìÿ.
//Åñëè âðåìÿ ñåðâåðà Âàøåãî ÄÖ èíîå, òî âåëè÷èíû StartTime è EndTime ñëåäóåò ñêîððåêòèðîâàòü.

//Êîëè÷åñòâî ïîâòîðîâ ñåññèè âíóòðè äíÿ.
extern int Repeats=1;

//Êðàéíèå òî÷êè òðàåêòîðèé óêàçûâàåòñÿ â âèäå êîýôôèöèåíòîâ îò äëèòåëüíîñòè òîðãîâîé ñåññèè.
//Ýòî ïîçâîëÿåò ïðè ñìåíå äëèòåëüíîñòè òîðãîâîé ñåññèè ïðàâèëüíî îïðåäåëèòü ðàñïîëîæåíèå ïàð òðàåêòîðèé.

//K - òî÷êà íà÷àëà âòîðîé òðàåêòîðèè ïàðû.
extern double K=0.491;

//Ìåòîä àíàëèçà ðàáî÷åãî íàïðàâëåíèÿ ïåðâîé òðàåêòîðèè ïàðû.
//0 - Open(t2) - Open(t1).
//1 - Íàèáîëüøåå èç äâóõ: High(t2) - Low(t1) èëè High(t1) - Low(t2).
//2 - Íàèáîëüøåå ñìåùåíèå îò çíà÷åíèÿ Open òî÷êè t1 â èíòåðâàëå äî òî÷êè t2.
//3 - Íàèáîëüøåå èç äâóõ: íàèáîëüøåå ñìåùåíèå îò çíà÷åíèÿ High òî÷êè t1 äî Lowest â èíòåðâàëå äî òî÷êè t2
//    èëè íàèáîëüøåå ñìåùåíèå îò çíà÷åíèÿ Low òî÷êè t1 äî Highest â èíòåðâàëå äî òî÷êè t2.
//4 - Íàèáîëüøåå èçìåíåíèå ñóùåñòâóþùåå â èíòåðâàëå îò t1 äî t2.
extern int Method=3;

//Ìèíèìàëüíî äîïóñòèìîå çíà÷åíèå èçìåíåíèÿ íà òåñòèðóåìîì ó÷àñòêå. Èçìåðÿåòñÿ â ïèïñàõ.
//Îäèí ïèïñ ñîîòâåòñòâóåò èçìåíåíèþ öåíû íà 0.0001 èëè 0.01, â çàâèñèìîñòè îò âàëþòíîé ïàðû.
extern int Delta=14;

//Ïåðåõîä íà çèìíåå âðåìÿ.
extern int WinterTimeChange=-1;
//Äëÿ íåêîòîðûõ ÄÖ çíà÷åíèå WinterTimeChange ìîæåò ðàâíÿòüñÿ íóëþ.

//P1 (P2,P3) - èñïîëüçóåìûå ïàðàìåòðû ïåðâîé òðàåêòîðèè.
//K1 (K3,K5) - òî÷êà íà÷àëà ïåðâîé òðàåêòîðèè ïàðû.
//K2 (K4,K6) - òî÷êà îêîí÷àíèÿ ïåðâîé òðàåêòîðèè ïàðû.
//N1 (N2,N3) - àíòèïàðà èëè ïàðà.

//Ìîæíî îäíîâðåìåííî èñïîëüçîâàòü íåñêîëüêî íàñòðîåê ïåðâûõ 
//òðàåêòîðèé ñ ðàçíîé äëèòåëüíîñòüþ è ðàçíûìè êîîðäèíàòàìè.
//Ïðè ýòîì â òî÷êå K ñèãíàë ïîÿâèòñÿ òîëüêî â òîì ñëó÷àå, 
//åñëè íàïðàâëåíèå âñåõ âûáðàííûõ ïåðâûõ òðàåêòîðèé óêàçûâàåò 
//íà îäíî è òîæå íàïðàâëåíèå âòîðîé òðàåêòîðèè ïàðû.

extern bool P1=true;
extern double K1=0.180;
extern double K2=0.491;
extern bool N1=true;

extern bool P2=false;
extern double K3=0;
extern double K4=0;
extern bool N2=true;

extern bool P3=false;
extern double K5=0;
extern double K6=0;
extern bool N3=true;

//Ôèëüòð ïîäòâåðæäåíèÿ ñèãíàëîâ.
//Ðåæèì: 0 - 2
//0 - Îòêëþ÷åí.
//Ïîäòâåðæäàþùèé ñèãíàë ïîÿâëÿåòñÿ:
//1 - Åñëè îò óðîâíÿ ïîÿâëåíèÿ ñèãíàëà ðûíîê ñõîäèë ñ ìîìåíòà åãî ïîÿâëåíèÿ â åãî íàïðàâëåíèè
//íà N pips. Óðîâíè ïðåäûäóùèõ ñèãíàëîâ ïðè ïîÿâëåíèè íîâîãî ñèãíàëà ëþáîãî íàïðàâëåíèÿ
//ïåðåñòàþò ó÷èòûâàòüñÿ.
//2 - Åñëè ñ ìîìåíòà ïîÿâëåíèÿ ñèãíàëà ðûíîê ñõîäèë â åãî íàïðàâëåíèè
//íà N pips. Ìîìåíòû ïðåäûäóùèõ ñèãíàëîâ ïðè ïîÿâëåíèè íîâîãî ñèãíàëà 
//ëþáîãî íàïðàâëåíèÿ ïåðåñòàþò ó÷èòûâàòüñÿ.
extern int Confirm=0;

//Change - óðîâåíü ïîäòâåðæäåíèÿ äâèæåíèÿ. Èçìåðÿåòñÿ â ïèïñàõ.
//Îäèí ïèïñ ñîîòâåòñòâóåò èçìåíåíèþ öåíû íà 0.0001 èëè 0.01, â çàâèñèìîñòè îò âàëþòíîé ïàðû.
extern int Change=16;

//Íàèáîëüøàÿ çàäåðæêà ñèãíàëà ðàâíàÿ îáùåìó ÷èñëó áàðîâ ïðîøåäøèõ ñ ìîìåíòà ñèãíàëà.
extern int Pause=1;

//Èçîáðàæåíèå ñèãíàëîâ â âèäå ñòðåëîê èëè â âèäå ëèíèé.
extern bool Arrows=true;

//Ïîêàçûâàòü ñèãíàëû ñ íåèçâåñòíûì íàïðàâëåíèåì èëè íåò.
extern bool Unknown=false;

//Ïîêàçûâàòü ãðàôè÷åñêèå îáúåêòû èëè íåò.
extern bool Drawing=true;

//Íóìåðàöèÿ èíäèêàòîðíûõ áóôåðîâ: (0) - âíèç, (1) - ââåðõ, (2) - íå îïðåäåëåíî.

datetime KT1;
datetime KT2;
datetime KT3;
datetime KT4;
datetime KT5;
datetime KT6;
datetime STS;
datetime STE;
int IndCounted;
double IUP;
double IDN;
string Signal;
datetime TS;
datetime CRT;
datetime CRE;
int TSA;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  IndicatorBuffers(3);
   IndCounted=0;
   IUP=0;
   IDN=0;
   TS=0;
   CRT=0;
   CRE=0;
   int BrokerDecimal=1;
   if(Digits==3 || Digits==5) BrokerDecimal=10;
   Delta=Delta*BrokerDecimal;
   Change=Change*BrokerDecimal;
   TSA=TimeCurrent();
   SetIndexBuffer(0,DNB);
   SetIndexBuffer(1,UPB);
   SetIndexBuffer(2,EB);
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_NONE);
   SetIndexStyle(2,DRAW_NONE);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   if(ArraySize(UPB)>0)
     {
      ArrayInitialize(UPB,0);
      ArrayInitialize(DNB,0);
      ArrayInitialize(EB,0);
     }
   GlobalVariableSet("RESET",1);

   TS=0; CRT=0; CRE=0;
   if(Drawing==true)
     {
      int objects_amount=ObjectsTotal();
      for(int b=objects_amount-1; b>=0; b --)
        {ObjectDelete(ObjectName(b));}
      WindowRedraw();
     }
   Comment("");
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   IndCounted=IndicatorCounted();
   if(IndCounted<0){return(0);}
   if(IndCounted==0){deinit();}
   int pos=0;
   if(Bars>IndCounted+1){pos=(Bars-IndCounted)-1;}
   while(pos>=0)
     {
      if(TS==0)
        {
         TS=Time[pos];
         if(TS<TSA)
           {
            TSA=TS;
            Print("Indicator start point: ",TimeToStr(TS));
           }
        }
      if(Time[pos]>=TS)
        {
         TS=Time[pos];
         PUP=0;
         PDN=0;
         UP=0;
         DN=0;
         E=0;
         if(CRT>0 && Time[pos]>(CRT+Pause*Period()*60)) {CRT=0;}
         if(CRT==0) {Points(pos);}
         TRE(pos);
         if(Confirm==0 || Confirm>2)
           {
            UP=PUP;
            DN=PDN;
           }
         if(Confirm==1)
           {
            if(PUP>0)
              {
               IUP=Low[pos];
               IDN=0;
              }
            if(IUP!=0)
              {
               if((High[pos]-IUP)>=(Change*Point))
                 {
                  UP=Low[pos];
                  IUP=0;
                 }
              }
            if(PDN>0)
              {
               IDN=High[pos];
               IUP=0;
              }
            if(IDN!=0)
              {
               if((IDN-Low[pos])>=(Change*Point))
                 {
                  DN=High[pos];
                  IDN=0;
                 }
              }
           }
         if(Confirm==2)
           {
            if(PUP>0)
              {
               IUP=Low[pos];
               IDN=0;
              }
            if(IUP!=0)
              {
               if(Low[pos]<IUP){IUP=Low[pos];}
               if((High[pos]-IUP)>=(Change*Point))
                 {
                  UP=Low[pos];
                  IUP=0;
                 }
              }
            if(PDN>0)
              {
               IDN=High[pos];
               IUP=0;
              }
            if(IDN!=0)
              {
               if(High[pos]>IDN){IDN=High[pos];}
               if((IDN-Low[pos])>=(Change*Point))
                 {
                  DN=High[pos];
                  IDN=0;
                 }
              }
           }
         ART(pos);
        }
      pos--;
     }
   Comment(Signal);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CLR(int pos)
  {
   string Name="Up";
   string ObjName=Name+" "+TimeToStr(Time[pos]);
   if(ObjectFind(ObjName)!=-1) ObjectDelete(ObjName);

   Name="Dn";
   ObjName=Name+" "+TimeToStr(Time[pos]);
   if(ObjectFind(ObjName)!=-1) ObjectDelete(ObjName);

   Name="Unknown";
   ObjName=Name+" "+TimeToStr(Time[pos]);
   if(ObjectFind(ObjName)!=-1) ObjectDelete(ObjName);
   WindowRedraw();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ART(int pos)
  {
//---- Ñîçäàíèå åñëè åñòü
   if(UP>0)
     {
      UPB[pos]=Open[pos];
      Signal="Last Signal: UP  Level: "+DoubleToStr((Open[pos]+(MarketInfo(Symbol(),MODE_SPREAD)*Point)),Digits)+"  Spread: "+DoubleToStr(MarketInfo(Symbol(),MODE_SPREAD)*Point,Digits)+"  Time: "+TimeToStr(Time[pos]);
      if(Drawing==true)
        {
         CLR(pos);
         string Name="Up";
         if(Arrows==true)
           {
            SetArrow(Time[pos],Open[pos],Name,233,LimeGreen);
           }
         else
           {
            SetLine(Time[pos],Open[pos],Name,LimeGreen);
           }
        }
     }
   if(DN>0)
     {
      DNB[pos]=Open[pos];

      Signal="Last Signal: DN  Level: "+DoubleToStr(Open[pos],Digits)+"  Spread: "+DoubleToStr(MarketInfo(Symbol(),MODE_SPREAD)*Point,Digits)+"  Time: "+TimeToStr(Time[pos]);
      if(Drawing==true)
        {
         CLR(pos);
         Name="Dn";
         if(Arrows==true)
           {
            SetArrow(Time[pos],Open[pos],Name,234,Red);
           }
         else
           {
            SetLine(Time[pos],Open[pos],Name,Red);
           }
        }
     }
   if(E>0 && Unknown==true)
     {
      EB[pos]=Open[pos];
      if(Drawing==true)
        {
         CLR(pos);
         Name="Unknown";
         if(Arrows==true)
           {
            SetArrow(Time[pos],Open[pos],Name,74,White);
           }
         else
           {
            SetLine(Time[pos],Open[pos],Name,White);
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SetArrow(datetime ArrowTime,double Price,string Trend,double ArrowCode,color ArrowColor)
  {
   int err;
   string ArrowName=Trend+" "+TimeToStr(ArrowTime);
   if(ObjectFind(ArrowName)!=-1) ObjectDelete(ArrowName);
   if(!ObjectCreate(ArrowName,OBJ_ARROW,0,ArrowTime,Price))
     {
      err=GetLastError();
      Print("error: can't create Arrow! code #",err);
      return;
     }
   else
     {
      ObjectSet(ArrowName,OBJPROP_ARROWCODE,ArrowCode);
      ObjectSet(ArrowName,OBJPROP_COLOR,ArrowColor);
      WindowRedraw();
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SetLine(datetime LineTime,double Price,string Trend,color LineColor)
  {
   int err;
   string LineName=Trend+" "+TimeToStr(LineTime);
   if(ObjectFind(LineName)!=-1) ObjectDelete(LineName);
   if(!ObjectCreate(LineName,OBJ_VLINE,0,LineTime,Price))
     {
      err=GetLastError();
      Print("error: can't create Line! code #",err);
      return;
     }
   else
     {
      ObjectSet(LineName,OBJPROP_STYLE,0);
      ObjectSet(LineName,OBJPROP_COLOR,LineColor);
      ObjectSet(LineName,OBJPROP_WIDTH,1);
      ObjectSet(LineName,OBJPROP_BACK,true);
      WindowRedraw();
     }
  }
//Îïðåäåëåíèå äàííûõ áëèæàéøåé ñåññèè
//Âõîäíûå äàííûå:
//b - òåêóùèé áàð
//Ðåçóëüòàò:
//STS - Íà÷àëî áëèæàéøåé ñåññèè
//STE - Êîíåö áëèæàéøåé ñåññèè
void Points(int b)
  {
   datetime Ses[][4];
   ArrayResize(Ses,3*(Repeats+1)+1);
   ArrayInitialize(Ses,0);
   int t1=TimeHour(StrToTime(StartTime))*3600+TimeMinute(StrToTime(StartTime))*60;
   if(EndTime<StartTime) {int t2=(TimeHour(StrToTime(EndTime))+24)*3600+TimeMinute(StrToTime(EndTime))*60;}
   else {t2=TimeHour(StrToTime(EndTime))*3600+TimeMinute(StrToTime(EndTime))*60;}
   int p=t2-t1;
   datetime td=Time[b]-24*3600;
   td=(1440*60*(MathFloor(td/60/1440)));
//Êîððåêöèÿ äàííûõ
   if(K>1){K=1;}
   if(K<0){K=0;}
   if(t2>(t1+24*3600)) {t2=(t1+24*3600);}
   if(t2>(t1+12*3600) && Repeats>0) {Repeats=0;}
//if ((t1+p*(Repeats+1))>(24*3600)) {Repeats=MathFloor((24*3600)/p)-1;}
//
   int ck=0;
   int s=0;
   for(int c1=0; c1<=48; c1=c1+24)
     {
      for(int c2=0; c2<=Repeats; c2++)
        {
         ck=ck+1;
         Ses[ck][1]= td+(t1 + c1*3600 + c2*p);
         Ses[ck][2]= td+(t2 + c1*3600 + c2*p);
         Ses[ck][3]= TFSet(td+(t1 + K*p + c1*3600 + c2*p));
         if(!SummerTime(Ses[ck][1])) {Ses[ck][1]=Ses[ck][1]+WinterTimeChange*3600;}
         if(!SummerTime(Ses[ck][2])) {Ses[ck][2]=Ses[ck][2]+WinterTimeChange*3600;}
         if(!SummerTime(Ses[ck][3])) {Ses[ck][3]=TFSet(WinterTimeChange*3600+td+(t1+K*p+c1*3600+c2*p));}
         if(s==0)
           {
            if(Time[b]<=(Ses[ck][3]+Pause*Period()*60) && Ses[ck][3]>CRE) {s=ck; break;}
           }
        }
      if(s>0) {break;}
     }
   STS=Ses[s][1];
   STE=Ses[s][2];
   CRT=Ses[s][3];
   if(CRT>0 && CRT==CRE) {s=0; CRT=0; STS=0; STE=0;}
   if(s>0){s=1;}
   return(s);
  }
//Îïðåäåëåíèå âðåìåíè â çàäàííîé òî÷êå ïî çíà÷åíèþ êîýôôèöèåíòà
//Âõîäíûå äàííûå:
//Êîýôôèöèåíò
//STS - Íà÷àëî áëèæàéøåé ñåññèè
//STE - Êîíåö áëèæàéøåé ñåññèè
//CRT - âðåìÿ îñíîâíîé òî÷êè ïîÿâëåíèÿ ñèãíàëà
//Ðåçóëüòàò:
//Òî÷íîå çíà÷åíèå âðåìåíè ïî çíà÷åíèþ êîýôôèöèåíòà
datetime KPoint(double k,int pos)
  {
   datetime KT = TFSet(STS+((STE-STS)*k));
   datetime CT = CRT - KT;
   int BCT=(CT/60)/Period();
   return(iTime(Symbol(),0,BCT+iBarShift(Symbol(),Period(),Time[pos],false)));
  }

//Îêðóãëåíèå çíà÷åíèÿ âðåìåíè ïîä òåêóùèé òàéìôðåéì
datetime TFSet(datetime k){return((Period()*60*(MathFloor(k/60/Period()))));}
//Îïðåäåëåíèå íàïðàâëåíèÿ èíòåðâàëà
int Interval(datetime k1,datetime k2,datetime k,string i)
  {
   int n;
   double h1,l1,h2,l2,dd,du;
//Êîððåêöèÿ äàííûõ
   if(k2<k1)
     {
      datetime k3=k2;
      k2=k1;
      k1=k3;
     }
   if(k1>k) {k1=k;}
   if(k2>k) {k2=k;}

   if(Method==0 || Method>4)
     {
      //
      int t1=iBarShift(Symbol(),Period(),k1,false);
      int t2=iBarShift(Symbol(),Period(),k2,false);
      h1 = iOpen(Symbol(),Period(),t1);
      h2 = iOpen(Symbol(),Period(),t2);
      du = h2-h1;
      if(Delta>0){if(MathAbs(du)<Delta*Point){du=0;}}
      //
      if(k1==k2 || du==0) {n=0;} else if(du>0) {n=1;} else {n=-1;}
     }

   if(Method==1)
     {
      //
      t1=iBarShift(Symbol(),Period(),k1,false);
      t2=iBarShift(Symbol(),Period(),k2,false);
      h1 = iHigh(Symbol(),Period(),t1);
      h2 = iHigh(Symbol(),Period(),t2);
      l1 = iLow(Symbol(),Period(),t1);
      l2 = iLow(Symbol(),Period(),t2);
      dd = h1-l2;
      du = h2-l1;

      if(Delta>0)
        {
         if(du<Delta*Point){du=0;}
         if(dd<Delta*Point){dd=0;}
        }

      //
      if(k1==k2 || dd==du) {n=0;} else if(du>dd) {n=1;} else {n=-1;}
     }

   if(Method==2)
     {
      //
      t1=iBarShift(Symbol(),Period(),k1,false);
      t2=iBarShift(Symbol(),Period(),k2,false);
      h1=High[iHighest(NULL,0,MODE_HIGH,(t1-t2)+1,t2)];
      l1=Low[iLowest(NULL,0,MODE_LOW,(t1-t2)+1,t2)];
      du = h1-Open[t1];
      dd = Open[t1]-l1;

      if(Delta>0)
        {
         if(du<Delta*Point){du=0;}
         if(dd<Delta*Point){dd=0;}
        }

      //
      if(k1==k2 || dd==du) {n=0;} else if(du>dd) {n=1;} else {n=-1;}
     }

   if(Method==3)
     {
      //
      t1=iBarShift(Symbol(),Period(),k1,false);
      t2=iBarShift(Symbol(),Period(),k2,false);
      h1=High[iHighest(NULL,0,MODE_HIGH,(t1-t2)+1,t2)];
      l1=Low[iLowest(NULL,0,MODE_LOW,(t1-t2)+1,t2)];
      du = h1-Low[t1];
      dd = High[t1]-l1;

      if(Delta>0)
        {
         if(du<Delta*Point){du=0;}
         if(dd<Delta*Point){dd=0;}
        }

      //
      if(k1==k2 || dd==du) {n=0;} else if(du>dd) {n=1;} else {n=-1;}
     }

   if(Method==4)
     {
      //
      t1=iBarShift(Symbol(),Period(),k1,false);
      t2=iBarShift(Symbol(),Period(),k2,false);
      int h3=iHighest(NULL,0,MODE_HIGH,(t1-t2)+1,t2);
      int l3=iLowest(NULL,0,MODE_LOW,(t1-t2)+1,t2);

      if(Delta>0)
        {
         if(High[h3]-Low[l3]<Delta*Point){h3=0; l3=0;}
        }

      //
      if(h3==l3 || High[h3]==Low[l3]) {n=0;} else if(l3>h3) {n=1;} else {n=-1;}
     }

   if(((P2==false && P3==false) || (P1==false && P3==false)) || (P1==false && P2==false))
     {i=""; string ipr="";} else {ipr=" ";}

   if(Drawing==true)
     {
      if(n==0)
        {
         string on=i+ipr+"Trend: ~ Point: "+TimeToStr(k);
         ObjectCreate(on,OBJ_TREND,0,Time[t2],Close[t2],Time[t1],Open[t1]);
         ObjectSet(on,OBJPROP_COLOR,White);
         ObjectSet(on,OBJPROP_WIDTH,1);
         ObjectSet(on,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSet(on,OBJPROP_RAY,false);
        }
      if(n==1)
        {
         on=i+ipr+"Trend: UP Point: "+TimeToStr(k);
         ObjectCreate(on,OBJ_TREND,0,Time[t2],High[t2],Time[t1],Low[t1]);
         ObjectSet(on,OBJPROP_COLOR,LimeGreen);
         ObjectSet(on,OBJPROP_WIDTH,1);
         ObjectSet(on,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSet(on,OBJPROP_RAY,false);
        }
      if(n==-1)
        {
         on=i+ipr+"Trend: DN Point: "+TimeToStr(k);
         ObjectCreate(on,OBJ_TREND,0,Time[t2],Low[t2],Time[t1],High[t1]);
         ObjectSet(on,OBJPROP_COLOR,Red);
         ObjectSet(on,OBJPROP_WIDTH,1);
         ObjectSet(on,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSet(on,OBJPROP_RAY,false);
        }
     }
   return(n);
  }
//Îïðåäåëåíèå íàïðàâëåíèÿ â çàäàííîé òî÷êå ïî íàïðàâëåíèþ êîíòðîëüíûõ îòðåçêîâ
//Âðåìÿ çàäàííîé òî÷êè CRT
int CRPoint()
  {
   double Mas[4][5];
   ArrayInitialize(Mas,0);
   Mas[1][1]=P1;
   Mas[1][2]=KT1;
   Mas[1][3]=KT2;
   Mas[1][4]=N1;
   Mas[2][1]=P2;
   Mas[2][2]=KT3;
   Mas[2][3]=KT4;
   Mas[2][4]=N2;
   Mas[3][1]=P3;
   Mas[3][2]=KT5;
   Mas[3][3]=KT6;
   Mas[3][4]=N3;
   for(int i=1;i<=3;i++)
     {
      if(Mas[i][1]==true)
        {
         int z=Interval(Mas[i][2],Mas[i][3],CRT,i+"P");
         if(Mas[i][4]==true) {z=z*(-1);}
         Mas[i][0]=z;

         if(z==0){Mas[0][0]=2;}

         if(Mas[0][0]==0) {Mas[0][0]=z;} else {if(Mas[0][0]!=z) {Mas[0][0]=2;}}
        }
     }
   if(Mas[0][0]==2) {Mas[0][0]=0;}
   return(Mas[0][0]);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void TRE(int pos)
  {
   if(CRT>0)
     {
      if(Time[pos]>=CRT && Time[pos]<=(CRT+Pause*Period()*60))
        {
         PUP=0;
         PDN=0;
         UP=0;
         DN=0;
         E=0;
         KT1 = KPoint(K1,pos);
         KT2 = KPoint(K2,pos);
         KT3 = KPoint(K3,pos);
         KT4 = KPoint(K4,pos);
         KT5 = KPoint(K5,pos);
         KT6 = KPoint(K6,pos);
         int nt=CRPoint();
         if(nt>0){PUP=Open[pos];}
         if(nt<0){PDN=Open[pos];}
         if(nt==0){E=Open[pos];}
         CRE=CRT;
         CRT=0;
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool SummerTime(datetime dt)
  {
   int i;
   if(TimeMonth(dt)>=11 || TimeMonth(dt)<=2) {return(false);}
   if(TimeMonth(dt)>=4 && TimeMonth(dt)<= 9) {return(true);}
   datetime tSeek;
   if(TimeMonth(dt)==10)
     {
      if(TimeDay(dt)>=20)
        {
         tSeek= StrToTime(StringTrimRight(StringTrimLeft(DoubleToStr(TimeYear(dt),0)))+".10.31 02:00");
         for(i=31; i>=20; i--)
           {
            if(TimeDayOfWeek(tSeek)==0) {break;}
            tSeek=tSeek-86400;
           }
         if(dt>=tSeek) {return(false);}
        }
      return(true);
     }
   if(TimeMonth(dt)==3)
     {
      if(TimeDay(dt)>=20)
        {
         tSeek = StrToTime(StringTrimRight(StringTrimLeft(DoubleToStr(TimeYear(dt),0)))+".03.31 03:00");
         for(i = 31; i >= 20; i-- )
           {
            if(TimeDayOfWeek(tSeek)==0) {break;}
            tSeek=tSeek-86400;
           }
         if(dt>=tSeek) {return(true);}
        }
      return(false);
     }
  }
//+------------------------------------------------------------------+

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