=Search_patterns_v6

Author: Talex
=Search_patterns_v6
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
=Search_patterns_v6
//+------------------------------------------------------------------+
//|                                              Search_patterns.mq4 |
//|                                                            Talex |
//|                                                 tan@gazinter.net |
//+------------------------------------------------------------------+
#property copyright "Talex"
#property link      "tan@gazinter.net"
#property stacksize 16384


#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 CLR_NONE
#import "user32.dll"
int GetClientRect(int hWnd,int lpRect[]);
#import

extern bool FuturePattern =false; /* true - èùåò ôîðìèðóþùèåñÿ ïàòòåðíû, ò.å. ìîæíî ïîïûòàòüñÿ ñûãðàòü íà äâèæåíèè äî çàâåðøåíèÿ ïàòòåðíà, äëÿ "ïðîäâèíóòûõ" ïîëüçîâàòåëåé ïàòòåðíîâ ;) */
extern bool ExtSave=false; /* åñëè true, òî ïîñòðîåíèÿ áóäóò ñîõðàíåíû íà ãðàôèêå */
extern int ExtDepth=0; /* ïàðàìåòð äëÿ ZZ,åñëè 0, òî áóäåò èäòè ïîèñê ïàòòåðíîâ, èíà÷å ñòðîèòüñÿ ïàòòåðí(åñëè îí åñòü) ñ óêàçàííûì ïàðàìåòðîì Depth */
extern int ExtPoint=5; /* êîëè÷åñòâî òî÷åê çèãçàãà, åñëè çàäàòü áîëüøå 5, òî áóäóò îòîáðàæàòüñÿ ïàòòåðíû íà èñòîðèè (åñëè îíè åñòü) */
extern int minDepth=3; /* ïàðàìåòð äëÿ ïîèñêà ïàòòåðíîâ */
extern int maxDepth=50;/* ïàðàìåòð äëÿ ïîèñêà ïàòòåðíîâ */
/*extern*/ int ExtIndicator=0; /* îïðåäåëÿåò èíäèêòîð, êîòîðûé áóäåò èñêàòü òî÷êè äëÿ ïîñòðîåíèÿ ïàòòåðíà */
extern double ExtDopusk=0.05; /* ïàðàìåòðû ïàòòåðíà áóäóò îòëè÷àòüñÿ íå áîëåå ÷åì âåëè÷èíà ExtDopusk */
extern double TimeDopusk=0.2; /*ïàðàìåòðû ïàòòåðíà ïî âðåìåíè áóäóò îòëè÷àòüñÿ íå áîëåå ÷åì âåëè÷èíà TimeDopusk */
extern bool Gartley=true; /* true - èùåò ïàòòåðíû Ãàðòëè, false - íåò */ 
extern bool Pattern_50=true; /* true - èùåò ïàòòåðí 5-0, false - íåò */ 
extern bool ABCD=true; /* true - èùåò ïàòòåðí AB=CD, false - íåò */ 
extern bool WolfWaves=false; /* true - èùåò ïàòòåðí WW, false - íåò */ 
extern bool SweetZoneStart=true; /* true - ïîêàçûâàåò Ñâèòçîíó íà÷àëà îòðàáîòêè WW â êîòîðóþ äîëæíà ïîïàñòü ò.5, false - íåò */ 
extern bool SweetZoneEnd=true; /* true - ïîêàçûâàåò Ñâèòçîíó îòðàáîòêè WW â êîòîðóþ äîëæíà ïîïàñòü ò.6, false - íåò */
extern color SZScolor=Blue; /* öâåò äëÿ SweetZoneStart */
extern color SZEcolor=DarkGreen; /* öâåò äëÿ SweetZoneEnd */
extern color ExtColorGartley=MidnightBlue; /* Öâåò äëÿ ïàòòåðíîâ Ãàðòëè */
extern color ExtColorRet=Lime; /* Öâåò ëèíèè ðåòðåéñìåíòîâ */
//extern bool AlertPattern=false; /* Ïðè ïîÿâëåíèè ïàòòåðíà ñðàáàòûâàåò àëåðò, ïîêà íå ðàáîòàåò */

static int endbar=0;
static double endpr=0;
static bool fl;
string com1="",com2="",com3="",com4="",com5="",com6="",com7="",com8="",com9="";
string save="";
static int GPixels,VPixels;

int rect[4],hwnd;
//---- indicator buffers
double zz[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(1);
   SetIndexBuffer(0,zz);
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexEmptyValue(0,0.0);
  
  hwnd=WindowHandle(Symbol(),Period());
  if(hwnd>0) GetClientRect(hwnd,rect);
  GPixels=rect[2]; // çäåñü ôóíêöèÿ âîçâðàùàåò êîë-âî ïèêñåëîâ ïî ãîðèçîíòàëè
  VPixels=rect[3]; // çäåñü ôóíêöèÿ âîçâðàùàåò êîë-âî ïèêñåëîâ ïî âåðòèêàëè
  
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   string NamePattern[7]={"Gartley","Butterfly","Crab","Bat","Pattern_5-0","AB=CD","WolfeWaves"};
   //GetClientRect(hwnd,rect);
   Comment("");
   for(int b=0;b<7;b++)
   {
    for(int k=0;k<=maxDepth;k++)
    {
     ObjectDelete("RealTargetD_"+NamePattern[b]+k);
     ObjectDelete("RealTextTargetD_"+NamePattern[b]+k);
     ObjectDelete("RealFiboTarget_"+NamePattern[b]+k);
     ObjectDelete("Real1_"+NamePattern[b]+k);
     ObjectDelete("Real2_"+NamePattern[b]+k);
     ObjectDelete("Real3_"+NamePattern[b]+k);
     ObjectDelete("RealRetXB_"+NamePattern[b]+k);
     ObjectDelete("RealRetAC_"+NamePattern[b]+k);
     ObjectDelete("RealRetBD_"+NamePattern[b]+k);
     ObjectDelete("RealRetXD_"+NamePattern[b]+k);
     ObjectDelete("RealTextRetXB_"+NamePattern[b]+k);
     ObjectDelete("RealTextRetAC_"+NamePattern[b]+k);
     ObjectDelete("RealTextRetBD_"+NamePattern[b]+k);
     ObjectDelete("RealTextRetXD_"+NamePattern[b]+k);
     ObjectDelete("RealLineXA_"+NamePattern[b]+k);
     ObjectDelete("RealLineAB_"+NamePattern[b]+k);
     ObjectDelete("RealLineBC_"+NamePattern[b]+k);
     ObjectDelete("RealLineCD_"+NamePattern[b]+k);
     ObjectDelete("Future1_"+NamePattern[b]+k);
     ObjectDelete("Future2_"+NamePattern[b]+k);
     ObjectDelete("Future3_"+NamePattern[b]+k);
     ObjectDelete("FutureTargetC_"+NamePattern[b]+k);
     ObjectDelete("FutureTextTargetC_"+NamePattern[b]+k);
     ObjectDelete("FutureMinTargetD_"+NamePattern[b]+k);
     ObjectDelete("FutureTextMinTargetD_"+NamePattern[b]+k);
     ObjectDelete("FutureMaxTargetD_"+NamePattern[b]+k);
     ObjectDelete("FutureTextMaxTargetD_"+NamePattern[b]+k);
     ObjectDelete("FutureRetXB_"+NamePattern[b]+k);
     ObjectDelete("FutureTextRetXB_"+NamePattern[b]+k);
     ObjectDelete("FutureRetAC_"+NamePattern[b]+k);
     ObjectDelete("FutureTextRetAC_"+NamePattern[b]+k);
     
    }
   }
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int PP[];
   int i,j,n,X,A,B,C,D;
   
   if(ExtSave==true)
   {
    save=TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS);
   }
   if(ExtDepth==0){}else {minDepth=ExtDepth;maxDepth=ExtDepth;}
   for(n=minDepth;n<=maxDepth;n++)
   {
   switch (ExtIndicator)
     {
      case 0: {ZZTalex(n);   break;}
      /* çäåñü ìîæíî äîáàâëÿòü ôóíêöèè ïî ðàñ÷åòó òî÷åê ïàòòåðíîâ */
      default:{ZZTalex(n);   break;}
     }
   ArrayResize(PP,ExtPoint);
   
  if(ExtIndicator==0)
  { 
   for(i=0,j=0;i<Bars-1 && j<=ExtPoint;i++)
   {
    if(zz[i]!=0)
    {
     PP[j]=i;
     j++;
    }
   }
  }
 /* if(ExtIndicator!=0)
  {
   for(i=Bars-1;i>=0;i--)
   {
    if(zz[i]!=0)
    {
     for(n=ExtPoint-1;n>=1;n--)
     {
      PP[n]=PP[n-1];
     }
      PP[0]=i;
    }
   }
  }*/
   if(Gartley)
   {
    X=PP[ExtPoint-1];A=PP[ExtPoint-2];B=PP[ExtPoint-3];C=PP[ExtPoint-4];D=PP[ExtPoint-5];
    GartleyPatternsSearch(X,A,B,C,D,n);
   }
   if(Pattern_50)
   {
    X=PP[ExtPoint-1];A=PP[ExtPoint-2];B=PP[ExtPoint-3];C=PP[ExtPoint-4];D=PP[ExtPoint-5];
    Patterns50Search(X,A,B,C,D,n);
   }
   if(ABCD)
   {
    A=PP[ExtPoint-2];B=PP[ExtPoint-3];C=PP[ExtPoint-4];D=PP[ExtPoint-5];
    ABCDSearch(A,B,C,D,n);
   }
   if(WolfWaves)
   {
    X=PP[ExtPoint-1];A=PP[ExtPoint-2];B=PP[ExtPoint-3];C=PP[ExtPoint-4];D=PP[ExtPoint-5];
    WolfWavesSearch(X,A,B,C,D,n);
   }
  }
 
  /*switch (ExtIndicator)
     {
      case 0: {ZZTalex(ExtDepth);   break;}
      default:{ZZTalex(ExtDepth);   break;}
     }*/
    
    CorrectObject();
    Commentarii();
   return(0);
  }
/*------------------------------------------------------------------+
|  ZigZag_Talex, èùåò òî÷êè ïåðåëîìà íà ãðàôèêå. Êîëè÷åñòâî òî÷åê   |
|  çàäàåòñÿ âíåøíèì ïàðàìåòðîì ExtPoint.                            |
+------------------------------------------------------------------*/
void ZZTalex(int n)
{
/*ïåðåìåííûå*/
   int    i,j,k,zzbarlow,zzbarhigh,curbar,curbar1,curbar2,EP,Mbar[];
   double curpr,Mprice[];
   bool flag,fd;
   
   
   /*íà÷àëî*/
   
   for(i=0;i<=Bars-1;i++)
   {zz[i]=0.0;}
   
   EP=ExtPoint;
   zzbarlow=iLowest(NULL,0,MODE_LOW,n,0);        
   zzbarhigh=iHighest(NULL,0,MODE_HIGH,n,0);     
   
   if(zzbarlow<zzbarhigh) {curbar=zzbarlow; curpr=Low[zzbarlow];}
   if(zzbarlow>zzbarhigh) {curbar=zzbarhigh; curpr=High[zzbarhigh];}
   if(zzbarlow==zzbarhigh){curbar=zzbarlow;curpr=funk1(zzbarlow, n);}
   
   ArrayResize(Mbar,ExtPoint);
   ArrayResize(Mprice,ExtPoint);
   j=0;
   endpr=curpr;
   endbar=curbar;
   Mbar[j]=curbar;
   Mprice[j]=curpr;
   
   EP--;
   if(curpr==Low[curbar]) flag=true;
   else flag=false;
   fl=flag;
 
   i=curbar+1;
   while(EP>0)
   {
    if(flag)
    {
     while(i<=Bars-1)
     {
     curbar1=iHighest(NULL,0,MODE_HIGH,n,i); 
     curbar2=iHighest(NULL,0,MODE_HIGH,n,curbar1); 
     if(curbar1==curbar2){curbar=curbar1;curpr=High[curbar];flag=false;i=curbar+1;j++;break;}
     else i=curbar2;
     }
     
     Mbar[j]=curbar;
     Mprice[j]=curpr;
     EP--;
     
    }
    
    if(EP==0) break;
    
    if(!flag) 
    {
     while(i<=Bars-1)
     {
     curbar1=iLowest(NULL,0,MODE_LOW,n,i); 
     curbar2=iLowest(NULL,0,MODE_LOW,n,curbar1); 
     if(curbar1==curbar2){curbar=curbar1;curpr=Low[curbar];flag=true;i=curbar+1;j++;break;}
     else i=curbar2;
     }
     
     Mbar[j]=curbar;
     Mprice[j]=curpr;
     EP--;
    }
   }
   /* èñïðàâëåíèå âåðøèí */
   if(Mprice[0]==Low[Mbar[0]])fd=true; else fd=false;
   for(k=0;k<=ExtPoint-1;k++)
   {
    if(k==0)
    {
     if(fd==true)
      {
       Mbar[k]=iLowest(NULL,0,MODE_LOW,Mbar[k+1]-Mbar[k],Mbar[k]);Mprice[k]=Low[Mbar[k]];endbar=ExtDepth;
      }
     if(fd==false)
      {
       Mbar[k]=iHighest(NULL,0,MODE_HIGH,Mbar[k+1]-Mbar[k],Mbar[k]);Mprice[k]=High[Mbar[k]];endbar=ExtDepth;
      }
    }
    if(k<ExtPoint-2)
    {
     if(fd==true)
      {
       Mbar[k+1]=iHighest(NULL,0,MODE_HIGH,Mbar[k+2]-Mbar[k]-1,Mbar[k]+1);Mprice[k+1]=High[Mbar[k+1]];
      }
     if(fd==false)
      {
       Mbar[k+1]=iLowest(NULL,0,MODE_LOW,Mbar[k+2]-Mbar[k]-1,Mbar[k]+1);Mprice[k+1]=Low[Mbar[k+1]];
      }
    }
    if(fd==true)fd=false;else fd=true;
    
    /* ïîñòðîéêà ZigZag'a */
    zz[Mbar[k]]=Mprice[k];
    //Print("zz_"+k,"=",zz[Mbar[k]]);
   }
  
 } 
/*-------------------------------------------------------------------+
/  ZigZag_Talex êîíåö                                                |
/-------------------------------------------------------------------*/

/*-------------------------------------------------------------------+
/ Ôóíöèÿ äëÿ ïîèñêà ó ïåðâîãî áàðà (åñëè îí âíåøíèé) êàêîé ýêñòðåìóì |
/ áóäåì èñïîëüçîâàòü â êà÷åñòâå âåðøèíû.                             |
/-------------------------------------------------------------------*/
double funk1(int zzbarlow, int ExtDepth)
{
 double pr;
 int fbarlow,fbarhigh;
 
 fbarlow=iLowest(NULL,0,MODE_LOW,ExtDepth,zzbarlow);  
 fbarhigh=iHighest(NULL,0,MODE_HIGH,ExtDepth,zzbarlow);
 
 if(fbarlow>fbarhigh) pr=High[zzbarlow];
 if(fbarlow<fbarhigh) pr=Low[zzbarlow];
 if(fbarlow==fbarhigh)
 {
  fbarlow=iLowest(NULL,0,MODE_LOW,2*ExtDepth,zzbarlow);  
  fbarhigh=iHighest(NULL,0,MODE_HIGH,2*ExtDepth,zzbarlow);
  if(fbarlow>fbarhigh) pr=High[zzbarlow];
  if(fbarlow<fbarhigh) pr=Low[zzbarlow];
  if(fbarlow==fbarhigh)
  {
   fbarlow=iLowest(NULL,0,MODE_LOW,3*ExtDepth,zzbarlow);  
   fbarhigh=iHighest(NULL,0,MODE_HIGH,3*ExtDepth,zzbarlow);
   if(fbarlow>fbarhigh) pr=High[zzbarlow];
   if(fbarlow<fbarhigh) pr=Low[zzbarlow];
  }
 }
 return(pr);
}

/*---------------------------------------------------------------+
|  Ôóíêöèÿ êîððåêòíîãî îòîáðàæåíèÿ Òàéìôðåéìà.Íà÷àëî.            |
+---------------------------------------------------------------*/
string TimeFrame()
{
 string TF;
 switch(Period())
 {
  case 1: return("M1");
  case 5: return("M5");
  case 15: return("M15");
  case 30: return("M30");
  case 60: return("H1");
  case 240: return("H4");
  case 1440: return("D1");
  case 10080: return("W1");
  case 43200: return("MN1");
 }
}
/*---------------------------------------------------------------+
|  Ôóíêöèÿ êîððåêòíîãî îòîáðàæåíèÿ Òàéìôðåéìà.Êîíåö.             |
+---------------------------------------------------------------*/

/*----------------------------------------------------------+
|  Ôóíêöèÿ äëÿ ïîèñêà ïàòòåðíîâ Ãàðòëè.  Íà÷àëî.            |
+----------------------------------------------------------*/

void GartleyPatternsSearch(int X,int A,int B,int C,int D,int Depth)
{
/* Îáúÿâëåíèå ïåðåìåííûõ */ 
   
   double R0382=0.382,
          R0500=0.500,
          R0618=0.618,
          R0786=0.786,
          R0886=0.886,
          R1128=1.128,
          R1236=1.236,
          R1272=1.272,
          R1618=1.618,
          R2236=2.236,
          R2618=2.618,
          R3618=3.618;
    int XB,AC,BD,XD;
    double   retXD, retXB, retBD, retAC, minret, maxret;
    string BullBear="", NamePattern="",MinMax="";
    static int varX,varA,varB,varC,varD;
    double PriceD_XD,PriceD_BD;
//----

    if(varX==X && varA==A && varB==B && varC==C && varD==D)return;
    else {varX=X; varA=A; varB=B; varC=C; varD=D;}
    minret=1-ExtDopusk; maxret=1+ExtDopusk;
 
  /* èùåì ïàòòåðíû ïî 5-òè òî÷êàì */
  if(FuturePattern==false)
  {
   if(zz[D]<zz[B] && zz[C]>zz[B] && zz[C]<zz[A] && zz[B]>zz[X])
   {
    BullBear = "Bullish";
    MinMax="Min";
   }
   if(zz[D]>zz[B] && zz[C]<zz[B] && zz[C]>zz[A] && zz[B]<zz[X])
   {
    BullBear = "Bearish";
    MinMax="Max";
   }
   
   /* íàõîäèì ðåòðåéñìåíòû */
   if(BullBear!="")
   {
    retXB=(zz[A]-zz[B])/(zz[A]-zz[X]+0.000001);
    retAC=(zz[C]-zz[B])/(zz[A]-zz[B]+0.000001);
    retBD=(zz[C]-zz[D])/(zz[C]-zz[B]+0.000001);
    retXD=(zz[A]-zz[D])/(zz[A]-zz[X]+0.000001);
    /* äàëåå ñðàâíèâàåì ðåòðåéñìåíòû */
    if((retXB>=R0382*minret) && (retXB<=R0618*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret) && (retBD>=R1128*minret) && (retBD<=R2236*maxret) && (retXD>=R0618*minret) && (retXD<=R0786*maxret))
    {
     NamePattern="Gartley";
    }
    else if ((retXB>=R0618*minret) && (retXB<=R0886*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret) && (retBD>=R1272*minret) && (retBD<=R2618*maxret) && (retXD>=R1272*minret) && (retXD<=R1618*maxret))
    {
     NamePattern="Butterfly";
    }
    else if ((retXB>=R0382*minret) && (retXB<=R0886*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret) && (retBD>=R1618*minret) && (retBD<=R3618*maxret) && (retXD>=R1618*minret) && (retXD<=R1618*maxret))
    {
     NamePattern="Crab";
    }
    else if ((retXB>=R0382*minret) && (retXB<=R0618*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret) && (retBD>=R1272*minret) && (retBD<=R2618*maxret) && (retXD>=R0886*minret) && (retXD<=R0886*maxret))
    { // Âñå ðåòðåéñìåíòû âçÿòû èç òàáëèö âûëîæåííûõ â âåòêå http://onix-trade.net/forum/index.php?s=dde8437cd886b3ef7328f83ddc17c4fe&showtopic=118&st=2780, à òàêæå ôîðóìà TSD è êíèãè Ëàððè Ïåññàâåíòî (ñïàñèáî Nen'ó çà ïîìîùü)
     NamePattern="Bat";
    }
   }
     
   if (NamePattern != "")
        {
         CreateRealPattern(NamePattern,BullBear,Depth,X,A,B,C,D,retXB,retAC,retBD,retXD,minret,maxret);
         TargetAndFibo(NamePattern,BullBear,MinMax,maxret,Depth,X,A,B,C,D);
        } 
  }
  if(FuturePattern==true)
  {
   int X4,A4,B4,C4;
   double retBDminD,retBDmaxD,retXDminD,retXDmaxD,minD,maxD,maxAC;
   X4=A;A4=B;B4=C;C4=D;
   if(zz[B4]<zz[A4] && zz[B4]>zz[X4] && zz[C4]<zz[A4] && zz[C4]>zz[B4])
   {
    BullBear = "Bullish";
    MinMax="Max";
   }
   if(zz[B4]>zz[A4] && zz[B4]<zz[X4] && zz[C4]>zz[A4] && zz[C4]<zz[B4])
   {
    BullBear = "Bearish";
    MinMax="Min";
   }
   
   /* íàõîäèì ðåòðåéñìåíòû */
   /* Âñå ðåòðåéñìåíòû âçÿòû èç òàáëèö âûëîæåííûõ â âåòêå http://onix-trade.net/forum/index.php?s=dde8437cd886b3ef7328f83ddc17c4fe&showtopic=118&st=2780, à òàêæå ôîðóìà TSD è êíèãè Ëàððè Ïåññàâåíòî (ñïàñèáî Nen'ó çà ïîìîùü)*/
   if(BullBear!="")
   {
    retXB=(zz[A4]-zz[B4])/(zz[A4]-zz[X4]+0.000001);
    retAC=(zz[C4]-zz[B4])/(zz[A4]-zz[B4]+0.000001);
    
    /* äàëåå ñðàâíèâàåì ðåòðåéñìåíòû */
    if((retXB>=R0382*minret) && (retXB<=R0618*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret))
    {
     NamePattern="Gartley";
     retBDminD=zz[C4]-R1128*minret*(zz[C4]-zz[B4]);
     retBDmaxD=zz[C4]-R2236*maxret*(zz[C4]-zz[B4]);
     retXDminD=zz[A4]-R0618*minret*(zz[A4]-zz[X4]);
     retXDmaxD=zz[A4]-R0786*maxret*(zz[A4]-zz[X4]);
     maxAC=0.886*maxret*(zz[A4]-zz[B4])+zz[B4];
     if(BullBear=="Bullish")
     {
      if(retBDminD<retXDminD)minD=retBDminD;else minD=retXDminD;
      if(retBDmaxD>retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
     }
     if(BullBear=="Bearish")
     {
      if(retBDminD>retXDminD)minD=retBDminD;else minD=retXDminD;
      if(retBDmaxD<retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
     }
     CreateFuturePattern(X4,A4,B4,C4,Depth,minD,maxD,maxAC,retXB,retAC,BullBear,NamePattern,MinMax);
    }
    else if ((retXB>=R0618*minret) && (retXB<=R0886*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret))
    {
     NamePattern="Butterfly";
     retBDminD=zz[C4]-R1272*minret*(zz[C4]-zz[B4]);
     retBDmaxD=zz[C4]-R2618*maxret*(zz[C4]-zz[B4]);
     retXDminD=zz[A4]-R1272*minret*(zz[A4]-zz[X4]);
     retXDmaxD=zz[A4]-R1618*maxret*(zz[A4]-zz[X4]);
     maxAC=0.886*maxret*(zz[A4]-zz[B4])+zz[B4];
     if(BullBear=="Bullish")
     {
      if(retBDminD<retXDminD)minD=retBDminD;else minD=retXDminD;
      if(retBDmaxD>retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
     }
     if(BullBear=="Bearish")
     {
      if(retBDminD>retXDminD)minD=retBDminD;else minD=retXDminD;
      if(retBDmaxD<retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
     }
     CreateFuturePattern(X4,A4,B4,C4,Depth,minD,maxD,maxAC,retXB,retAC,BullBear,NamePattern,MinMax);
    }
    else if ((retXB>=R0382*minret) && (retXB<=R0886*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret))
    {
     NamePattern="Crab";
     retBDminD=zz[C4]-R1618*minret*(zz[C4]-zz[B4]);
     retBDmaxD=zz[C4]-R3618*maxret*(zz[C4]-zz[B4]);
     retXDminD=zz[A4]-R1618*minret*(zz[A4]-zz[X4]);
     retXDmaxD=zz[A4]-R1618*maxret*(zz[A4]-zz[X4]);
     maxAC=0.886*maxret*(zz[A4]-zz[B4])+zz[B4];
     if(BullBear=="Bullish")
     {
      if(retBDminD<retXDminD)minD=retBDminD;else minD=retXDminD;
      if(retBDmaxD>retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
     }
     if(BullBear=="Bearish")
     {
      if(retBDminD>retXDminD)minD=retBDminD;else minD=retXDminD;
      if(retBDmaxD<retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
     }
     CreateFuturePattern(X4,A4,B4,C4,Depth,minD,maxD,maxAC,retXB,retAC,BullBear,NamePattern,MinMax);
    }
    else if ((retXB>=R0382*minret) && (retXB<=R0618*maxret) && (retAC>=R0382*minret) && (retAC<=R0886*maxret))
    { 
     NamePattern="Bat";
     retBDminD=zz[C4]-R1272*minret*(zz[C4]-zz[B4]);
     retBDmaxD=zz[C4]-R2618*maxret*(zz[C4]-zz[B4]);
     retXDminD=zz[A4]-R0886*minret*(zz[A4]-zz[X4]);
     retXDmaxD=zz[A4]-R0886*maxret*(zz[A4]-zz[X4]);
     maxAC=0.886*maxret*(zz[A4]-zz[B4])+zz[B4];
     if(BullBear=="Bullish")
     {
      if(retBDminD<retXDminD)minD=retBDminD;else minD=retXDminD;
      if(retBDmaxD>retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
     }
     if(BullBear=="Bearish")
     {
      if(retBDminD>retXDminD)minD=retBDminD;else minD=retXDminD;
      if(retBDmaxD<retXDmaxD)maxD=retBDmaxD;else maxD=retXDmaxD;
     }
     CreateFuturePattern(X4,A4,B4,C4,Depth,minD,maxD,maxAC,retXB,retAC,BullBear,NamePattern,MinMax);
    }
   }
  }
 }
/*----------------------------------------------------------+
|  Ôóíêöèÿ äëÿ ïîèñêà ïàòòåðíîâ Ãàðòëè.  Êîíåö.             |
+----------------------------------------------------------*/

/*---------------------------------------------------------------+
|  Ôóíêöèÿ äëÿ ïîèñêà ïàòòåðíà 5-0.  Íà÷àëî.                     |
+---------------------------------------------------------------*/

void Patterns50Search(int X,int A,int B,int C,int D,int Depth)
{
 double   R0500=0.500,
          R1128=1.128,
          R1236=1.236,
          R1272=1.272,
          R1618=1.618,
          R2236=2.236;
    int XB,AC,BD;      
    double   retXD, retXB, retBD, retAC, minret, maxret;
    string BullBear="", NamePattern="", MinMax="";
    static int var50X,var50A,var50B,var50C,var50D;
//----
    
    if(var50X==X && var50A==A && var50B==B && var50C==C && var50D==D)return;
    else {var50X=X; var50A=A; var50B=B; var50C=C; var50D=D;}
    minret=1-ExtDopusk; maxret=1+ExtDopusk;
 
  /* èùåì ïàòòåðíû ïî 5-òè òî÷êàì */
  if(FuturePattern==false)
  {
  if(zz[X]>zz[B] && zz[X]<zz[A] && zz[D]>zz[B] && zz[D]<zz[C] && zz[A]<zz[C])
   {
    BullBear = "Bullish";
    MinMax="Min";
   }
  if(zz[X]<zz[B] && zz[X]>zz[A] && zz[D]<zz[B] && zz[D]>zz[C] && zz[A]>zz[C])
   {
    BullBear = "Bearish";
    MinMax="Max";
   }
   
   /* íàõîäèì ðåòðåéñìåíòû äëÿ Áû÷üåãî ïàòòåðíà */
   if(BullBear!="")
   {
    retXB=(zz[A]-zz[B])/(zz[A]-zz[X]+0.000001);
    retAC=(zz[C]-zz[B])/(zz[A]-zz[B]+0.000001);
    retBD=(zz[C]-zz[D])/(zz[C]-zz[B]+0.000001);
    /* äàëåå ñðàâíèâàåì ðåòðåéñìåíòû */
    if((retXB>=R1128*minret) && (retXB<=R1618*maxret) && (retAC>=R1618*minret) && (retAC<=R2236*maxret) && (retBD>=R0500*minret) && (retBD<=R0500*maxret))
    {
     NamePattern="Pattern_5-0";
    }
   }
      
   if (NamePattern !="")
        {
         CreateRealPattern(NamePattern,BullBear,Depth,X,A,B,C,D,retXB,retAC,retBD,retXD,minret,maxret);
         TargetAndFibo(NamePattern,BullBear,MinMax,maxret,Depth,X,A,B,C,D);
        }    
  }
  if(FuturePattern==true)
  {
   int X4,A4,B4,C4;
   double retBDminD,retBDmaxD,minD,maxD,maxAC;
   X4=A;A4=B;B4=C;C4=D;
   if(zz[X4]<zz[A4] && zz[X4]>zz[B4] && zz[A4]<zz[C4])
   {
    BullBear = "Bullish";
    MinMax="Max";
   }
   if(zz[X4]>zz[A4] && zz[X4]<zz[B4] && zz[A4]>zz[C4])
   {
    BullBear = "Bearish";
    MinMax="Min";
   }
   
   /* íàõîäèì ðåòðåéñìåíòû */
   /* Âñå ðåòðåéñìåíòû âçÿòû èç òàáëèö âûëîæåííûõ â âåòêå http://onix-trade.net/forum/index.php?s=dde8437cd886b3ef7328f83ddc17c4fe&showtopic=118&st=2780, à òàêæå ôîðóìà TSD è êíèãè Ëàððè Ïåññàâåíòî (ñïàñèáî Nen'ó çà ïîìîùü)*/
   if(BullBear!="")
   {
    retXB=(zz[A4]-zz[B4])/(zz[A4]-zz[X4]+0.000001);
    retAC=(zz[C4]-zz[B4])/(zz[A4]-zz[B4]+0.000001);
    
    /* äàëåå ñðàâíèâàåì ðåòðåéñìåíòû */
    if((retXB>=R1128*minret) && (retXB<=R1618*maxret) && (retAC>=R1618*minret) && (retAC<=R2236*maxret))
    {
     NamePattern="Pattern_5-0";
     retBDminD=zz[C4]-R0500*minret*(zz[C4]-zz[B4]);
     retBDmaxD=zz[C4]-R0500*maxret*(zz[C4]-zz[B4]);
     maxAC=2.236*maxret*(zz[A4]-zz[B4])+zz[B4];
     if(BullBear=="Bearish")
     {
      minD=retBDmaxD;maxD=retBDminD;
     }
     if(BullBear=="Bullish")
     {
      minD=retBDminD;maxD=retBDmaxD;
     }
     CreateFuturePattern(X4,A4,B4,C4,Depth,minD,maxD,maxAC,retXB,retAC,BullBear,NamePattern,MinMax);
    }
   }
  }
 }

/*---------------------------------------------------------------+
|  Ôóíêöèÿ äëÿ ïîèñêà ïàòòåðíà 5-0.  Êîíåö.                      |
+---------------------------------------------------------------*/

/*-----------------------------------------------------------
Ïàòòåðí AB=CD. Íà÷àëî.
-----------------------------------------------------------*/
void ABCDSearch(int A,int B,int C,int D,int Depth)
{
 double   R0618=0.618,
          R0786=0.786,
          R1272=1.272,
          R1618=1.618;
 int AC,BD,X;
 double   retBD,retAC,retXB,retXD,minret,maxret;
 string BullBear="", NamePattern="",MinMax="";
 static int varabcdA,varabcdB,varabcdC,varabcdD;
//----
    
 if(varabcdA==A && varabcdB==B && varabcdC==C && varabcdD==D)return;
 else {varabcdA=A; varabcdB=B; varabcdC=C; varabcdD=D;}
 minret=1-ExtDopusk; maxret=1+ExtDopusk;
 
 /* èùåì ïàòòåðíû ïî 5-òè òî÷êàì */
 if(FuturePattern ==false)
 {
  if(MathAbs(zz[A]-zz[B])/MathAbs(zz[C]-zz[D])<=maxret && MathAbs(zz[A]-zz[B])/MathAbs(zz[C]-zz[D])>=minret && (A-C)/(1.0*(B-D))<=1+TimeDopusk && (A-C)/(1.0*(B-D))>=1-TimeDopusk)
  {
   if(zz[A]>zz[C] && zz[B]<zz[C] && zz[B]>zz[D])
   {
    BullBear = "Bullish";
    MinMax="Min";
   }
   if(zz[A]<zz[C] && zz[B]>zz[C] && zz[B]<zz[D])
   {
    BullBear = "Bearish";
    MinMax="Max";
   }
   
  /* íàõîäèì ðåòðåéñìåíòû äëÿ Áû÷üåãî ïàòòåðíà */
   if(BullBear!="")
   {
    retAC=(zz[C]-zz[B])/(zz[A]-zz[B]+0.000001);
    retBD=(zz[C]-zz[D])/(zz[C]-zz[B]+0.000001);
    /* äàëåå ñðàâíèâàåì ðåòðåéñìåíòû */
    if((retAC>=R0618*minret) && (retAC<=R0786*maxret) && (retBD>=R1272*minret) && (retBD<=R1618*maxret))
    {
     NamePattern="AB=CD";
    }
   }
   if (NamePattern != "")
   {
     CreateRealPattern(NamePattern,BullBear,Depth,X,A,B,C,D,retXB,retAC,retBD,retXD,minret,maxret);
     TargetAndFibo(NamePattern,BullBear,MinMax,maxret,Depth,X,A,B,C,D);
   }
  }
 }
 if(FuturePattern==true)
 {
  int X4,A4,B4,C4;
  double retBDminD,retBDmaxD,minD,maxD,maxAC;
   
  A4=B;B4=C;C4=D;
  if(zz[A4]>zz[C4] && zz[C4]>zz[B4])
  {
   BullBear = "Bullish";
   MinMax="Max";
  }
  if(zz[A4]<zz[C4] && zz[C4]<zz[B4])
  {
   BullBear = "Bearish";
   MinMax="Min";
  }
  if(BullBear!="")
  {
   retAC=(zz[C4]-zz[B4])/(zz[A4]-zz[B4]+0.000001);
    
   /* äàëåå ñðàâíèâàåì ðåòðåéñìåíòû */
   if((retAC>=R0618*minret) && (retAC<=R0786*maxret))
   {
    NamePattern="AB=CD";
      retBDminD=zz[C4]-minret*(zz[A4]-zz[B4]);
      retBDmaxD=zz[C4]-maxret*(zz[A4]-zz[B4]);
      maxAC=0.786*maxret*(zz[A4]-zz[B4])+zz[B4];
      if(BullBear=="Bearish")
      {
       minD=retBDmaxD;maxD=retBDminD;
      }
      if(BullBear=="Bullish")
      {
       minD=retBDminD;maxD=retBDmaxD;
      }
      CreateFuturePattern(X4,A4,B4,C4,Depth,minD,maxD,maxAC,retXB,retAC,BullBear,NamePattern,MinMax);
    }
   }
  }
 }

/*-----------------------------------------------------------
Ïàòòåðí AB=CD. Êîíåö.
-----------------------------------------------------------*/

/*-----------------------------------------------------------
Ïàòòåðí Wolfewaves. Íà÷àëî.
-----------------------------------------------------------*/
void WolfWavesSearch(int P1,int P2,int P3,int P4,int P5,int Depth)
{
 datetime t1,t2,t3,t4,t5,t6,t7,t8,t9;
 double p1,p2,p3,p4,p5,p6,p7,p8,p9;
 double condition1,condition2;
 string BullBear="", NamePattern="";
 static int varP1,varP2,varP3,varP4,varP5;
 
//----

 if(varP1==P1 && varP2==P2 && varP3==P3 && varP4==P4 && varP5==P5)return;
 else {varP1=P1; varP2=P2; varP3=P3; varP4=P4; varP5=P5;}
 
 if(FuturePattern==false)
  {
   if(zz[P1]<zz[P2] && zz[P1]>zz[P3] && zz[P4]<zz[P2] && zz[P4]>zz[P1] && zz[P5]<zz[P3] && (P1-P3)/(1.0*(P3-P5))<=1+TimeDopusk && (P1-P3)/(1.0*(P3-P5))>=1-TimeDopusk && (P1-P3)/(1.0*(P2-P4))<=1+TimeDopusk && (P1-P3)/(1.0*(P2-P4))>=1-TimeDopusk && (P2-P4)/(1.0*(P3-P5))<=1+TimeDopusk && (P2-P4)/(1.0*(P3-P5))>=1-TimeDopusk)
    {
     BullBear="Bullish";
    } 
   if(zz[P1]>zz[P2] && zz[P1]<zz[P3] && zz[P4]>zz[P2] && zz[P4]<zz[P1] && zz[P5]>zz[P3] && (P1-P3)/(1.0*(P3-P5))<=1+TimeDopusk && (P1-P3)/(1.0*(P3-P5))>=1-TimeDopusk && (P1-P3)/(1.0*(P2-P4))<=1+TimeDopusk && (P1-P3)/(1.0*(P2-P4))>=1-TimeDopusk && (P2-P4)/(1.0*(P3-P5))<=1+TimeDopusk && (P2-P4)/(1.0*(P3-P5))>=1-TimeDopusk)
    {
     BullBear="Bearish";
    }
   if(BullBear!="")
    {
     t1=Time[P1];p1=zz[P1]; /* êîðäèíàòû ò.1 */
     t2=Time[P2];p2=zz[P2]; /* êîðäèíàòû ò.2 */
     t3=Time[P3];p3=zz[P3]; /* êîðäèíàòû ò.3 */
     t4=Time[P4];p4=zz[P4]; /* êîðäèíàòû ò.4 */
     t5=Time[P5];p5=zz[P5]; /* êîðäèíàòû ò.5 */
     t6=Time[P5];p6=zz[P3]-NormalizeDouble(((zz[P1]-zz[P3])/(P1-P3))*(P3-P5),Digits); /* êîðäèíàòû ò.6 - íà ëèíèè 1-3 */
     t7=Time[P5];p7=zz[P3]-NormalizeDouble(((zz[P2]-zz[P4])/(P2-P4))*(P3-P5),Digits); /* êîðäèíàòû ò.7 - îò ò.3 ëèíèÿ ïàðàëåëüíàÿ 2-4*/
     t8=Time[0]-(2*P4-P1)*Period()*60;p8=2*zz[P4]-zz[P1]; /* êîðäèíàòû ò.8 - íà ëèíèè 1-4 */
     t9=t8+(P1-P3)*Period()*60;p9=p8-(zz[P1]-zz[P3]); /* êîðäèíàòû ò.9 - îò ò.3 ëèíèÿ ïàðàëåëüíàÿ 1-4*/
 
     if(p7<p6){condition1=p6;condition2=p7;}
      else {condition2=p6; condition1=p7;}
     if (zz[P5]<=condition1 && zz[P5]>=condition2)
      {
       NamePattern="WolfeWaves";
       WolfWavesDraw(NamePattern,BullBear,Depth,t1,t2,t3,t4,t5,t6,t7,t8,t9,p1,p2,p3,p4,p5,p6,p7,p8,p9);
      }
   }
 }
 if(FuturePattern==true)
  {
   P1=P2;P2=P3;P3=P4;P4=P5;P5=0;
   Print("P1=",zz[P1],"; P2=",zz[P2],"; P3=",zz[P3],"; P4=",zz[P4]);
   if(zz[P1]<zz[P2] && zz[P1]>zz[P3] && zz[P4]<zz[P2] && zz[P4]>zz[P1] && (P1-P3)/(1.0*(P2-P4))<=1+TimeDopusk && (P1-P3)/(1.0*(P2-P4))>=1-TimeDopusk)
    {
     BullBear="Bull";
    } 
   if(zz[P1]>zz[P2] && zz[P1]<zz[P3] && zz[P4]>zz[P2] && zz[P4]<zz[P1] && (P1-P3)/(1.0*(P2-P4))<=1+TimeDopusk && (P1-P3)/(1.0*(P2-P4))>=1-TimeDopusk)
    {
     BullBear="Bear";
    }
   if(BullBear!="")
    {
     t1=Time[P1];p1=zz[P1]; /* êîðäèíàòû ò.1 */
     t2=Time[P2];p2=zz[P2]; /* êîðäèíàòû ò.2 */
     t3=Time[P3];p3=zz[P3]; /* êîðäèíàòû ò.3 */
     t4=Time[P4];p4=zz[P4]; /* êîðäèíàòû ò.4 */
     if(2*P3-P1>=0)         /* êîðäèíàòû ò.5 */
     {
      t5=Time[2*P3-P1];
      }else t5=Time[0]-(2*P3-P1)*Period()*60;
     p5=2*p3-p1; 
     if(p4>=p5)return;
     t6=t5;p6=p5; /* êîðäèíàòû ò.6 - íà ëèíèè 1-3 */
     t7=t5;p7=zz[P3]-NormalizeDouble(((zz[P2]-zz[P4])/(P2-P4))*(P1-P3),Digits); /* êîðäèíàòû ò.7 - îò ò.3 ëèíèÿ ïàðàëåëüíàÿ 2-4*/
     t8=Time[0]-(2*P4-P1)*Period()*60;p8=2*zz[P4]-zz[P1]; /* êîðäèíàòû ò.8 - íà ëèíèè 1-4 */
     t9=t8+(P1-P3)*Period()*60;p9=p8-(zz[P1]-zz[P3]); /* êîðäèíàòû ò.9 - îò ò.3 ëèíèÿ ïàðàëåëüíàÿ 1-4*/
 
     
       NamePattern="WolfeWaves";
       WolfWavesDraw(NamePattern,BullBear,Depth,t1,t2,t3,t4,t5,t6,t7,t8,t9,p1,p2,p3,p4,p5,p6,p7,p8,p9);
      
   }
  }
}
/*-----------------------------------------------------------
Ïàòòåðí Wolfewaves. Êîíåö.
-----------------------------------------------------------*/

/*-----------------------------------------------------------
Êîððåêöèÿ îáúåêòîâ. Íà÷àëî.
----------------------------------------------------------*/
void CorrectObject()
{
 string name1,name2;
 int i,j;
 
 for(i=0;i<ObjectsTotal();i++)
 {
  name1=ObjectName(i); 
  for(j=0;j<ObjectsTotal();j++)
  {
   name2=ObjectName(j); 
   if(name1!=name2)
   {
    if(ObjectType(name1)==OBJ_TRIANGLE && ObjectType(name2)==OBJ_TRIANGLE)
    {
     if(ObjectGet(name1,OBJPROP_TIME1)==ObjectGet(name2,OBJPROP_TIME1) && ObjectGet(name1,OBJPROP_TIME2)==ObjectGet(name2,OBJPROP_TIME2) && ObjectGet(name1,OBJPROP_TIME3)==ObjectGet(name2,OBJPROP_TIME3) && ObjectGet(name1,OBJPROP_PRICE1)==ObjectGet(name2,OBJPROP_PRICE1) && ObjectGet(name1,OBJPROP_PRICE2)==ObjectGet(name2,OBJPROP_PRICE2) && ObjectGet(name1,OBJPROP_PRICE3)==ObjectGet(name2,OBJPROP_PRICE3))ObjectDelete(name2);
    }
   }
  }
 }
}
/*-----------------------------------------------------------
Êîððåêöèÿ îáúåêòîâ. Êîíåö.
----------------------------------------------------------*/

/*-----------------------------------------------------------
Âûâîä êîìåíòàðèÿ. Íà÷àëî.
----------------------------------------------------------*/
void Commentarii()
{
  string name1,name2;
  int i,j=1;
  
  for(i=0;i<ObjectsTotal();i++)
 {
  name1=ObjectName(i);
  if(ObjectType(name1)==OBJ_TRIANGLE)
  {
   if(j==9)break;
   name2=ObjectDescription(name1);
   
   if(name2!=com1 && name2!=com2 && name2!=com3 && name2!=com4 && name2!=com5 && name2!=com6 && name2!=com7 && name2!=com8 && name2!=com9)
   {
    if(com1==""){com1=name2;j++;continue;}
    if(com2==""){com2=name2;j++;continue;}
    if(com3==""){com3=name2;j++;continue;}
    if(com4==""){com4=name2;j++;continue;}
    if(com5==""){com5=name2;j++;continue;}
    if(com6==""){com6=name2;j++;continue;}
    if(com7==""){com7=name2;j++;continue;}
    if(com8==""){com8=name2;j++;continue;}
    if(com9==""){com9=name2;j++;break;}
   }
  }
 }
 Comment("Search patterns","\n",com1,"\n",com2,"\n",com3,"\n",com4,"\n",com5,"\n",com6,"\n",com7,"\n",com8,"\n",com9,"\n");
}
/*-----------------------------------------------------------
Âûâîä êîìåíòàðèÿ. Êîíåö.
----------------------------------------------------------*/

/*----------------------------------------------------------
Àëåðò. Íà÷àëî.
----------------------------------------------------------/
bool AlertGet(bool AlertPattern)
{
 static string nom1="",nom2="",nom3="",nom4="",nom5="",nom6="",nom7="",nom8="",nom9="";
 bool Al
 if(nom1=="" && nom2=="" && nom3=="" && nom4=="" && nom5=="" && nom6=="" && nom7=="" && nom8=="" && nom9=="")
 {
  nom1=com1;
  nom2=com2;
  nom3=com3;
  nom4=com4;
  nom5=com5;
  nom6=com6;
  nom7=com7;
  nom8=com8;
  nom9=com9;
 }
 if(nom1==com1 || nom2==com1 || nom3==com1 || nom4==com1 || nom5==com1 || nom6==com1 || nom7==com1 || nom8==com1 || nom9==com1)
  {}else 
}


/*----------------------------------------------------------
ExtRet. íà÷àëî.
-----------------------------------------------------------*/
string ExtRet(double enterret,double minret,double maxret)
{ 
 double ret;
 string returnret="",znak="";
 bool Retbool=true;
  if(enterret>=0.382*minret && enterret<=0.382*maxret)
     {
      ret=(enterret/0.382-1)*100;
      if(ret>=0)znak="+";else znak="-";
      Retbool=false;
      returnret=" ("+"0.382"+znak+DoubleToStr(MathAbs(ret),2)+"%"+")";
     }
  if(enterret>=0.5*minret && enterret<=0.5*maxret)
     {
      ret=(enterret/0.5-1)*100;
      if(ret>=0)znak="+";else znak="-";
      Retbool=false;
      returnret=" ("+"0.5"+znak+DoubleToStr(MathAbs(ret),2)+"%"+")";
     }
  if(enterret>=0.618*minret && enterret<=0.618*maxret)
     {
      ret=(enterret/0.618-1)*100;
      if(ret>=0)znak="+";else znak="-";
      Retbool=false;
      returnret=" ("+"0.618"+znak+DoubleToStr(MathAbs(ret),2)+"%"+")";
     }
  if(enterret>=0.707*minret && enterret<=0.707*maxret)
     {
      ret=(enterret/0.707-1)*100;
      if(ret>=0)znak="+";else znak="-";
      Retbool=false;
      returnret=" ("+"0.707"+znak+DoubleToStr(MathAbs(ret),2)+"%"+")";
     }
  if(enterret>=0.786*minret && enterret<=0.786*maxret)
     {
      ret=(enterret/0.786-1)*100;
      if(ret>=0)znak="+";else znak="-";
      Retbool=false;
      returnret=" ("+"0.786"+znak+DoubleToStr(MathAbs(ret),2)+"%"+")";
     }
   if(enterret>=0.886*minret && enterret<=0.886*maxret)
     {
      ret=(enterret/0.886-1)*100;
      if(ret>=0)znak="+";else znak="-";
      Retbool=false;
      returnret=" ("+"0.886"+znak+DoubleToStr(MathAbs(ret),2)+"%"+")";
     }
   if(enterret>=1.128*minret && enterret<=1.128*maxret)
     {
      ret=(enterret/1.128-1)*100;
      if(ret>=0)znak="+";else znak="-";
      Retbool=false;
      returnret=" ("+"1.128"+znak+DoubleToStr(MathAbs(ret),2)+"%"+")";
     }
   if(enterret>=1.236*minret && enterret<=1.236*maxret)
     {
      ret=(enterret/1.236-1)*100;
      if(ret>=0)znak="+";else znak="-";
      Retbool=false;
      returnret=" ("+"1.236"+znak+DoubleToStr(MathAbs(ret),2)+"%"+")";
     }
   if(enterret>=1.272*minret && enterret<=1.272*maxret)
     {
      ret=(enterret/1.272-1)*100;
      if(ret>=0)znak="+";else znak="-";
      Retbool=false;
      returnret=" ("+"1.272"+znak+DoubleToStr(MathAbs(ret),2)+"%"+")";
     }
   if(enterret>=1.414*minret && enterret<=1.414*maxret)
     {
      ret=(enterret/1.414-1)*100;
      if(ret>=0)znak="+";else znak="-";
      Retbool=false;
      returnret=" ("+"1.414"+znak+DoubleToStr(MathAbs(ret),2)+"%"+")";
     }
   if(enterret>=1.618*minret && enterret<=1.618*maxret)
     {
      ret=(enterret/1.618-1)*100;
      if(ret>=0)znak="+";else znak="-";
      Retbool=false;
      returnret=" ("+"1.618"+znak+DoubleToStr(MathAbs(ret),2)+"%"+")";
     }
   if(enterret>=2.236*minret && enterret<=2.236*maxret)
     {
      ret=(enterret/2.236-1)*100;
      if(ret>=0)znak="+";else znak="-";
      Retbool=false;
      returnret=" ("+"2.236"+znak+DoubleToStr(MathAbs(ret),2)+"%"+")";
     }
   if(enterret>=2.618*minret && enterret<=2.618*maxret)
     {
      ret=(enterret/2.618-1)*100;
      if(ret>=0)znak="+";else znak="-";
      Retbool=false;
      returnret=" ("+"2.618"+znak+DoubleToStr(MathAbs(ret),2)+"%"+")";
     }
   if(enterret>=3.618*minret && enterret<=3.618*maxret)
     {
      ret=(enterret/3.618-1)*100;
      if(ret>=0)znak="+";else znak="-";
      Retbool=false;
      returnret=" ("+"3.618"+znak+DoubleToStr(MathAbs(ret),2)+"%"+")";
     }
   if(Retbool){returnret=" (n/a)";}
 return(returnret);
 }
 
/*-----------------------------------------
 ExtRet.Êîíåö.
-----------------------------------------*/

/*-----------------------------------------------
TargetAndFibo.Íà÷àëî.
----------------------------------------------*/
void TargetAndFibo(string NamePattern,string BullBear, string MinMax,double maxret,int Depth,int X,int A,int B,int C,int D)
{
 double PriceD,PriceD_XD,PriceD_BD,TextMove=0.0;
  
  if(BullBear=="Bearish")TextMove=TextEdit();
  if(NamePattern=="Pattern_5-0")PriceD=zz[C]-0.5*maxret*(zz[C]-zz[B]);
  if(NamePattern=="AB=CD")PriceD=zz[C]-maxret*(zz[A]-zz[B]);
  if(NamePattern=="Gartley")
  {
   PriceD_XD=zz[A]-0.786*maxret*(zz[A]-zz[X]);
   PriceD_BD=zz[C]-2.236*maxret*(zz[C]-zz[B]);
  }
  if(NamePattern=="Butterfly")
  {
   PriceD_XD=zz[A]-1.618*maxret*(zz[A]-zz[X]);
   PriceD_BD=zz[C]-2.618*maxret*(zz[C]-zz[B]);
  }
  if(NamePattern=="Crab")
  {
   PriceD_XD=zz[A]-1.618*maxret*(zz[A]-zz[X]);
   PriceD_BD=zz[C]-3.618*maxret*(zz[C]-zz[B]);
  }
  if(NamePattern=="Bat")
  {
   PriceD_XD=zz[A]-0.886*maxret*(zz[A]-zz[X]);
   PriceD_BD=zz[C]-2.618*maxret*(zz[C]-zz[B]);
  }
  if(NamePattern=="Gartley" || NamePattern=="Butterfly" || NamePattern=="Crab" || NamePattern=="Bat")
  {
   if((BullBear=="Bullish" && PriceD_XD<PriceD_BD) || (BullBear=="Bearish" && PriceD_XD>PriceD_BD))
   PriceD=PriceD_BD;
   else PriceD=PriceD_XD;         
  }
   
   datetime timeD;
   if(D-10>=0)timeD=Time[D-10];else timeD=Time[0]-(D-10)*Period()*60;
     ObjectDelete("RealTargetD_"+NamePattern+Depth+save);
     ObjectDelete("RealTextTargetD_"+NamePattern+Depth+save);
     ObjectDelete("RealFiboTarget_"+NamePattern+Depth+save);
     ObjectCreate("RealTargetD_"+NamePattern+Depth+save,OBJ_TREND,0,Time[D],PriceD,timeD,PriceD);
     ObjectSet("RealTargetD_"+NamePattern+Depth+save,OBJPROP_RAY,false);
     ObjectCreate("RealTextTargetD_"+NamePattern+Depth+save,OBJ_TEXT,0,Time[D],PriceD+TextMove);
     ObjectSetText("RealTextTargetD_"+NamePattern+Depth+save,NamePattern+MinMax+"PriceD="+DoubleToStr(PriceD,Digits),10,"Times New Roman",ExtColorRet);
     ObjectCreate("RealFiboTarget_"+NamePattern+Depth+save,OBJ_FIBO,0,Time[C],zz[C],Time[D],zz[D]);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_LEVELCOLOR,Yellow);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_LEVELSTYLE,STYLE_DOT);
     //ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_RAY,false);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_LEVELWIDTH,1);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_FIBOLEVELS,13);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_FIRSTLEVEL+0,0.0);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_FIRSTLEVEL+1,0.146);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_FIRSTLEVEL+2,0.236);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_FIRSTLEVEL+3,0.382);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_FIRSTLEVEL+4,0.5);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_FIRSTLEVEL+5,0.618);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_FIRSTLEVEL+6,0.764);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_FIRSTLEVEL+7,0.854);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_FIRSTLEVEL+8,1.0);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_FIRSTLEVEL+9,1.236);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_FIRSTLEVEL+10,1.618);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_FIRSTLEVEL+11,2.618);
     ObjectSet("RealFiboTarget_"+NamePattern+Depth+save,OBJPROP_FIRSTLEVEL+12,3.618);
     ObjectSetFiboDescription("RealFiboTarget_"+NamePattern+Depth+save,0,NamePattern+" - 0 %"+" ("+DoubleToStr(zz[D],Digits)+")");
     ObjectSetFiboDescription("RealFiboTarget_"+NamePattern+Depth+save,1,NamePattern+" - 14.6 %"+" ("+DoubleToStr(zz[D]-(zz[D]-zz[C])*0.146,Digits)+")");
     ObjectSetFiboDescription("RealFiboTarget_"+NamePattern+Depth+save,2,NamePattern+" - 23.6 %"+" ("+DoubleToStr(zz[D]-(zz[D]-zz[C])*0.236,Digits)+")");
     ObjectSetFiboDescription("RealFiboTarget_"+NamePattern+Depth+save,3,NamePattern+" - 38.2 %"+" ("+DoubleToStr(zz[D]-(zz[D]-zz[C])*0.382,Digits)+")");
     ObjectSetFiboDescription("RealFiboTarget_"+NamePattern+Depth+save,4,NamePattern+" - 50 %"+" ("+DoubleToStr(zz[D]-(zz[D]-zz[C])*0.5,Digits)+")");
     ObjectSetFiboDescription("RealFiboTarget_"+NamePattern+Depth+save,5,NamePattern+" - 61.8 %"+" ("+DoubleToStr(zz[D]-(zz[D]-zz[C])*0.618,Digits)+")");
     ObjectSetFiboDescription("RealFiboTarget_"+NamePattern+Depth+save,6,NamePattern+" - 76.4 %"+" ("+DoubleToStr(zz[D]-(zz[D]-zz[C])*0.764,Digits)+")");
     ObjectSetFiboDescription("RealFiboTarget_"+NamePattern+Depth+save,7,NamePattern+" - 85.4 %"+" ("+DoubleToStr(zz[D]-(zz[D]-zz[C])*0.854,Digits)+")");
     ObjectSetFiboDescription("RealFiboTarget_"+NamePattern+Depth+save,8,NamePattern+" - 100 %"+" ("+DoubleToStr(zz[C],Digits)+")");
     ObjectSetFiboDescription("RealFiboTarget_"+NamePattern+Depth+save,9,NamePattern+" - 123.6 %"+" ("+DoubleToStr(zz[D]-(zz[D]-zz[C])*1.236,Digits)+")");
     ObjectSetFiboDescription("RealFiboTarget_"+NamePattern+Depth+save,10,NamePattern+" - 161.8 %"+" ("+DoubleToStr(zz[D]-(zz[D]-zz[C])*1.618,Digits)+")");
     ObjectSetFiboDescription("RealFiboTarget_"+NamePattern+Depth+save,11,NamePattern+" - 261.8 %"+" ("+DoubleToStr(zz[D]-(zz[D]-zz[C])*2.618,Digits)+")");
     ObjectSetFiboDescription("RealFiboTarget_"+NamePattern+Depth+save,12,NamePattern+" - 361.8 %"+" ("+DoubleToStr(zz[D]-(zz[D]-zz[C])*3.618,Digits)+")");
        
}
/*-----------------------------------------------
TargetAndFibo.Êîíåö.
----------------------------------------------*/


/*-----------------------------------------------
CreateFuturePattern.Íà÷àëî.
----------------------------------------------*/
void CreateFuturePattern(int X4,int A4,int B4,int C4,int Depth,double minD,double maxD,double maxAC,double retXB,double retAC,string BullBear,string NamePattern,string MinMax)
{
 datetime Tm;
 double minret,maxret,TextMove=0.0;
 
 
 minret=1-ExtDopusk; maxret=1+ExtDopusk;
 
 if(2*B4-X4>=0)Tm=Time[2*B4-X4];else Tm=Time[0]-(2*B4-X4)*Period()*60;
 if(NamePattern=="Pattern_5-0" || NamePattern=="AB=CD")
 {
  ObjectDelete("Future3_"+NamePattern+Depth+save);
  ObjectCreate("Future3_"+NamePattern+Depth+save,OBJ_TRIANGLE,0,Time[A4],zz[A4],Time[B4],zz[B4],Time[C4],zz[C4]);
  ObjectSetText("Future3_"+NamePattern+Depth+save,NamePattern+"_"+BullBear+"_"+TimeFrame()+"_"+Depth);
  if(C4-(A4-B4)>=0)Tm=Time[C4-(A4-B4)];else Tm=Time[0]-(C4-(A4-B4))*Period()*60;
 }
 if(NamePattern!="AB=CD")
 {
  ObjectDelete("Future1_"+NamePattern+Depth+save);
  ObjectCreate("Future1_"+NamePattern+Depth+save,OBJ_TRIANGLE,0,Time[X4],zz[X4],Time[A4],zz[A4],Time[B4],zz[B4]);
  ObjectSetText("Future1_"+NamePattern+Depth+save,NamePattern+"_"+BullBear+"_"+TimeFrame()+"_"+Depth);
 }
 ObjectDelete("Future2_"+NamePattern+Depth+save);
 ObjectCreate("Future2_"+NamePattern+Depth+save,OBJ_TRIANGLE,0,Time[B4],zz[B4],Time[C4],zz[C4],Tm,(minD+maxD)/2);
 ObjectSetText("Future2_"+NamePattern+Depth+save,NamePattern+"_"+BullBear+"_"+TimeFrame()+"_"+Depth);
 
 //--------------
 if(NamePattern!="WolfeWaves" && BullBear=="Bullish")TextMove=TextEdit();
 ObjectDelete("FutureTargetC_"+NamePattern+Depth+save);
 ObjectDelete("FutureTextTargetC_"+NamePattern+Depth+save);
 ObjectCreate("FutureTargetC_"+NamePattern+Depth+save,OBJ_TREND,0,Time[C4],maxAC,Time[C4]+10*Period()*60,maxAC);
 ObjectSet("FutureTargetC_"+NamePattern+Depth+save,OBJPROP_RAY,false);
 ObjectCreate("FutureTextTargetC_"+NamePattern+Depth+save,OBJ_TEXT,0,Time[C4],maxAC+TextMove);
 ObjectSetText("FutureTextTargetC_"+NamePattern+Depth+save,NamePattern+MinMax+"PriceC="+DoubleToStr(maxAC,Digits),10,"Times New Roman",ExtColorRet);
 //--------------
 ObjectDelete("FutureMinTargetD_"+NamePattern+Depth+save);
 ObjectDelete("FutureTextMinTargetD_"+NamePattern+Depth+save);
 ObjectCreate("FutureMinTargetD_"+NamePattern+Depth+save,OBJ_TREND,0,Tm,minD,Tm+10*Period()*60,minD);
 ObjectSet("FutureMinTargetD_"+NamePattern+Depth+save,OBJPROP_RAY,false);
 ObjectCreate("FutureTextMinTargetD_"+NamePattern+Depth+save,OBJ_TEXT,0,Tm,minD+TextMove);
 ObjectSetText("FutureTextMinTargetD_"+NamePattern+Depth+save,NamePattern+"MinPriceD="+DoubleToStr(minD,Digits),10,"Times New Roman",ExtColorRet);
 //--------------
 TextMove=0.0;
 if(NamePattern!="WolfeWaves" && BullBear=="Bearish")TextMove=TextEdit();
 ObjectDelete("FutureMaxTargetD_"+NamePattern+Depth+save);
 ObjectDelete("FutureTextMaxTargetD_"+NamePattern+Depth+save);
 ObjectCreate("FutureMaxTargetD_"+NamePattern+Depth+save,OBJ_TREND,0,Tm,maxD,Tm+10*Period()*60,maxD);
 ObjectSet("FutureMaxTargetD_"+NamePattern+Depth+save,OBJPROP_RAY,false);
 ObjectCreate("FutureTextMaxTargetD_"+NamePattern+Depth+save,OBJ_TEXT,0,Tm,maxD+TextMove);
 ObjectSetText("FutureTextMaxTargetD_"+NamePattern+Depth+save,NamePattern+"MaxPriceD="+DoubleToStr(maxD,Digits),10,"Times New Roman",ExtColorRet);
 TextMove=0.0;
 //--------------
 string RXB=DoubleToStr(retXB,3)+ExtRet(retXB,minret,maxret);
 string RAC=DoubleToStr(retAC,3)+ExtRet(retAC,minret,maxret);
 if(NamePattern!="AB=CD")
 { 
  if(NamePattern!="WolfeWaves" && BullBear=="Bearish")TextMove=TextEdit();
  ObjectDelete("FutureRetXB_"+NamePattern+Depth+save);
  ObjectDelete("FutureTextRetXB_"+NamePattern+Depth+save);
  ObjectCreate("FutureRetXB_"+NamePattern+Depth+save,OBJ_TREND,0,Time[X4],zz[X4],Time[B4],zz[B4]);
  ObjectSet("FutureRetXB_"+NamePattern+Depth+save,OBJPROP_COLOR,ExtColorRet);
  ObjectSet("FutureRetXB_"+NamePattern+Depth+save,OBJPROP_STYLE,STYLE_DOT);
  ObjectSet("FutureRetXB_"+NamePattern+Depth+save,OBJPROP_RAY,false);
  ObjectCreate("FutureTextRetXB_"+NamePattern+Depth+save,OBJ_TEXT,0,Time[X4]/2+Time[B4]/2,(zz[X4]+zz[B4])/2+TextMove);
  ObjectSetText("FutureTextRetXB_"+NamePattern+Depth+save,RXB,10,"Times New Roman",ExtColorRet);
  ObjectSet("FutureTextRetXB_"+NamePattern+Depth+save,OBJPROP_ANGLE,AngleEdit(X4,zz[X4],B4,zz[B4]));
  TextMove=0.0;
 }
 if(NamePattern!="WolfeWaves" && BullBear=="Bullish")TextMove=TextEdit();
 ObjectDelete("FutureRetAC_"+NamePattern+Depth+save);
 ObjectDelete("FutureTextRetAC_"+NamePattern+Depth+save);
 ObjectCreate("FutureRetAC_"+NamePattern+Depth+save,OBJ_TREND,0,Time[A4],zz[A4],Time[C4],zz[C4]);
 ObjectSet("FutureRetAC_"+NamePattern+Depth+save,OBJPROP_COLOR,ExtColorRet);
 ObjectSet("FutureRetAC_"+NamePattern+Depth+save,OBJPROP_STYLE,STYLE_DOT);
 ObjectSet("FutureRetAC_"+NamePattern+Depth+save,OBJPROP_RAY,false);
 ObjectCreate("FutureTextRetAC_"+NamePattern+Depth+save,OBJ_TEXT,0,Time[A4]/2+Time[C4]/2,(zz[A4]+zz[C4])/2+TextMove);
 ObjectSetText("FutureTextRetAC_"+NamePattern+Depth+save,RAC,10,"Times New Roman",ExtColorRet);
 ObjectSet("FutureTextRetAC_"+NamePattern+Depth+save,OBJPROP_ANGLE,AngleEdit(A4,zz[A4],C4,zz[C4]));
 TextMove=0.0;
 //--------------
}
/*-----------------------------------------------
CreateFuturePattern.Êîíåö.
----------------------------------------------*/


/*-----------------------------------------------
CreateRealPattern.Íà÷àëî.
----------------------------------------------*/
void CreateRealPattern(string NamePattern,string BullBear,int Depth,int X,int A,int B,int C,int D,double retXB,double retAC,double retBD,double retXD,double minret,double maxret)
{ 
  double TextMove=0.0;
  int XB=MathCeil((X+B)/2);        
  int AC=MathCeil((A+C)/2);
  int BD=MathCeil((B+D)/2);
  int XD=MathCeil((X+D)/2);
  string RXB=DoubleToStr(retXB,3)+ExtRet(retXB,minret,maxret);
  string RAC=DoubleToStr(retAC,3)+ExtRet(retAC,minret,maxret);
  string RBD=DoubleToStr(retBD,3)+ExtRet(retBD,minret,maxret);
  string RXD=DoubleToStr(retXD,3)+ExtRet(retXD,minret,maxret);
         
   if(NamePattern!="AB=CD")
   {
    ObjectDelete("Real1_"+NamePattern+Depth+save);
    ObjectCreate("Real1_"+NamePattern+Depth+save,OBJ_TRIANGLE,0,Time[X],zz[X],Time[A],zz[A],Time[B],zz[B]);
    ObjectSet("Real1_"+NamePattern+Depth+save,OBJPROP_COLOR,ExtColorGartley);
    ObjectSetText("Real1_"+NamePattern+Depth+save,"Real_"+NamePattern+"_"+BullBear+"_"+TimeFrame()+"_"+Depth);
   }
   ObjectDelete("Real2_"+NamePattern+Depth+save);
   ObjectCreate("Real2_"+NamePattern+Depth+save,OBJ_TRIANGLE,0,Time[B],zz[B],Time[C],zz[C],Time[D],zz[D]);
   ObjectSet("Real2_"+NamePattern+Depth+save,OBJPROP_COLOR,ExtColorGartley);
   ObjectSetText("Real2_"+NamePattern+Depth+save,"Real_"+NamePattern+"_"+BullBear+"_"+TimeFrame()+"_"+Depth);
   if(NamePattern=="Pattern_5-0" || NamePattern=="AB=CD")
    {
     ObjectDelete("Real3_"+NamePattern+Depth+save);
     ObjectCreate("Real3_"+NamePattern+Depth+save,OBJ_TRIANGLE,0,Time[A],zz[A],Time[B],zz[B],Time[C],zz[C]);
     ObjectSet("Real3_"+NamePattern+Depth+save,OBJPROP_COLOR,ExtColorGartley);
     ObjectSetText("Real3_"+NamePattern+Depth+save,"Real_"+NamePattern+"_"+BullBear+"_"+TimeFrame()+"_"+Depth);
    }
   if(NamePattern!="WolfeWaves" && BullBear=="Bullish")TextMove=TextEdit();
   ObjectDelete("RealRetAC_"+NamePattern+Depth+save);
   ObjectDelete("RealTextRetAC_"+NamePattern+Depth+save);
   ObjectCreate("RealRetAC_"+NamePattern+Depth+save,OBJ_TREND,0,Time[A],zz[A],Time[C],zz[C]);
   ObjectSet("RealRetAC_"+NamePattern+Depth+save,OBJPROP_COLOR,ExtColorRet);
   ObjectSet("RealRetAC_"+NamePattern+Depth+save,OBJPROP_STYLE,STYLE_DOT);
   ObjectSet("RealRetAC_"+NamePattern+Depth+save,OBJPROP_RAY,false);
   ObjectCreate("RealTextRetAC_"+NamePattern+Depth+save,OBJ_TEXT,0,Time[AC],(zz[A]+zz[C])/2+TextMove);
   ObjectSetText("RealTextRetAC_"+NamePattern+Depth+save,RAC,10,"Times New Roman",ExtColorRet);
   ObjectSet("RealTextRetAC_"+NamePattern+Depth+save,OBJPROP_ANGLE,AngleEdit(A,zz[A],C,zz[C]));
   TextMove=0.0;
   if(NamePattern!="WolfeWaves" && BullBear=="Bearish")TextMove=TextEdit();
   if(NamePattern!="AB=CD")
   {
    ObjectDelete("RealRetXB_"+NamePattern+Depth+save);
    ObjectDelete("RealTextRetXB_"+NamePattern+Depth+save);
    ObjectCreate("RealRetXB_"+NamePattern+Depth+save,OBJ_TREND,0,Time[X],zz[X],Time[B],zz[B]);
    ObjectSet("RealRetXB_"+NamePattern+Depth+save,OBJPROP_COLOR,ExtColorRet);
    ObjectSet("RealRetXB_"+NamePattern+Depth+save,OBJPROP_STYLE,STYLE_DOT);
    ObjectSet("RealRetXB_"+NamePattern+Depth+save,OBJPROP_RAY,false);
    ObjectCreate("RealTextRetXB_"+NamePattern+Depth+save,OBJ_TEXT,0,Time[XB],(zz[X]+zz[B])/2+TextMove);
    ObjectSetText("RealTextRetXB_"+NamePattern+Depth+save,RXB,10,"Times New Roman",ExtColorRet);
    ObjectSet("RealTextRetXB_"+NamePattern+Depth+save,OBJPROP_ANGLE,AngleEdit(X,zz[X],B,zz[B]));
   }
   ObjectDelete("RealRetBD_"+NamePattern+Depth+save);
   ObjectDelete("RealTextRetBD_"+NamePattern+Depth+save);
   ObjectCreate("RealRetBD_"+NamePattern+Depth+save,OBJ_TREND,0,Time[B],zz[B],Time[D],zz[D]);
   ObjectSet("RealRetBD_"+NamePattern+Depth+save,OBJPROP_COLOR,ExtColorRet);
   ObjectSet("RealRetBD_"+NamePattern+Depth+save,OBJPROP_STYLE,STYLE_DOT);
   ObjectSet("RealRetBD_"+NamePattern+Depth+save,OBJPROP_RAY,false);
   ObjectCreate("RealTextRetBD_"+NamePattern+Depth+save,OBJ_TEXT,0,Time[BD],(zz[B]+zz[D])/2+TextMove);
   ObjectSetText("RealTextRetBD_"+NamePattern+Depth+save,RBD,10,"Times New Roman",ExtColorRet);
   ObjectSet("RealTextRetBD_"+NamePattern+Depth+save,OBJPROP_ANGLE,AngleEdit(B,zz[B],D,zz[D]));
   
   if(NamePattern!="Pattern_5-0" && NamePattern!="AB=CD")
    {
     ObjectDelete("RealRetXD_"+NamePattern+Depth+save);
     ObjectDelete("RealTextRetXD_"+NamePattern+Depth+save);
     ObjectCreate("RealRetXD_"+NamePattern+Depth+save,OBJ_TREND,0,Time[X],zz[X],Time[D],zz[D]);
     ObjectSet("RealRetXD_"+NamePattern+Depth+save,OBJPROP_COLOR,ExtColorRet);
     ObjectSet("RealRetXD_"+NamePattern+Depth+save,OBJPROP_STYLE,STYLE_DOT);
     ObjectSet("RealRetXD_"+NamePattern+Depth+save,OBJPROP_RAY,false);
     ObjectCreate("RealTextRetXD_"+NamePattern+Depth+save,OBJ_TEXT,0,Time[XD],(zz[X]+zz[D])/2+TextMove);
     ObjectSetText("RealTextRetXD_"+NamePattern+Depth+save,RXD,10,"Times New Roman",ExtColorRet);
     ObjectSet("RealTextRetXD_"+NamePattern+Depth+save,OBJPROP_ANGLE,AngleEdit(X,zz[X],D,zz[D]));
    }
    TextMove=0.0;
   if(NamePattern!="AB=CD")
   {
    ObjectDelete("RealLineXA_"+NamePattern+Depth+save);
    ObjectCreate("RealLineXA_"+NamePattern+Depth+save,OBJ_TREND,0,Time[X],zz[X],Time[A],zz[A]);
    ObjectSet("RealLineXA_"+NamePattern+Depth+save,OBJPROP_COLOR,SkyBlue);
    ObjectSet("RealLineXA_"+NamePattern+Depth+save,OBJPROP_STYLE,STYLE_DOT);
    ObjectSet("RealLineXA_"+NamePattern+Depth+save,OBJPROP_RAY,false);
    ObjectSet("RealLineXA_"+NamePattern+Depth+save,OBJPROP_WIDTH,2);
   }
   ObjectDelete("RealLineAB_"+NamePattern+Depth+save);
   ObjectDelete("RealLineBC_"+NamePattern+Depth+save);
   ObjectDelete("RealLineCD_"+NamePattern+Depth+save);
   ObjectCreate("RealLineAB_"+NamePattern+Depth+save,OBJ_TREND,0,Time[A],zz[A],Time[B],zz[B]);
   ObjectSet("RealLineAB_"+NamePattern+Depth+save,OBJPROP_COLOR,SkyBlue);
   ObjectSet("RealLineAB_"+NamePattern+Depth+save,OBJPROP_STYLE,STYLE_DOT);
   ObjectSet("RealLineAB_"+NamePattern+Depth+save,OBJPROP_RAY,false);
   ObjectSet("RealLineAB_"+NamePattern+Depth+save,OBJPROP_WIDTH,2);
   ObjectCreate("RealLineBC_"+NamePattern+Depth+save,OBJ_TREND,0,Time[B],zz[B],Time[C],zz[C]);
   ObjectSet("RealLineBC_"+NamePattern+Depth+save,OBJPROP_COLOR,SkyBlue);
   ObjectSet("RealLineBC_"+NamePattern+Depth+save,OBJPROP_STYLE,STYLE_DOT);
   ObjectSet("RealLineBC_"+NamePattern+Depth+save,OBJPROP_RAY,false);
   ObjectSet("RealLineBC_"+NamePattern+Depth+save,OBJPROP_WIDTH,2);
   ObjectCreate("RealLineCD_"+NamePattern+Depth+save,OBJ_TREND,0,Time[C],zz[C],Time[D],zz[D]);
   ObjectSet("RealLineCD_"+NamePattern+Depth+save,OBJPROP_COLOR,SkyBlue);
   ObjectSet("RealLineCD_"+NamePattern+Depth+save,OBJPROP_STYLE,STYLE_DOT);
   ObjectSet("RealLineCD_"+NamePattern+Depth+save,OBJPROP_RAY,false);
   ObjectSet("RealLineCD_"+NamePattern+Depth+save,OBJPROP_WIDTH,2);
}
/*-----------------------------------------------
CreateRealPattern.Êîíåö.
----------------------------------------------*/

/*----------------------------------------------
Óäàëåíèå îáúåêòîâ. Íà÷àëî.
-----------------------------------------------/
void DeleteObject()
{
 string name;
   for(int i=0;i<ObjectsTotal();i++)
   {
    name=ObjectName(i);
    if(StringSubstr(name,0,4)=="Real" || StringSubstr(name,0,4)=="Futu")
    {ObjectDelete(name);}
   }
}
/*------------------------------------------------
Óäàëåíèå îáúåêòîâ. Êîíåö.
-----------------------------------------------*/

/*------------------------------------------------
Ïîñòðîåíèå WW. Íà÷àëî.
-------------------------------------------------*/
void WolfWavesDraw(string NamePattern,string BullBear,int Depth,datetime t1,datetime t2,datetime t3,datetime t4,datetime t5,datetime t6,datetime t7,datetime t8,datetime t9,double p1,double p2,double p3,double p4,double p5,double p6,double p7,double p8,double p9)
{
 ObjectCreate("RealRetXB_"+NamePattern+Depth+save,OBJ_TREND,0,t1,p1,t6,p6);
 ObjectSet("RealRetXB_"+NamePattern+Depth+save,OBJPROP_COLOR,Blue);
 ObjectSet("RealRetXB_"+NamePattern+Depth+save,OBJPROP_RAY,false);
 ObjectCreate("RealRetXD_"+NamePattern+Depth+save,OBJ_TREND,0,t1,p1,t8,p8);
 ObjectSet("RealRetXD_"+NamePattern+Depth+save,OBJPROP_COLOR,Red);
 ObjectSet("RealRetXD_"+NamePattern+Depth+save,OBJPROP_RAY,false);
 ObjectCreate("RealRetAC_"+NamePattern+Depth+save,OBJ_TREND,0,t2,p2,t4,p4);
 ObjectSet("RealRetAC_"+NamePattern+Depth+save,OBJPROP_COLOR,Blue);
 ObjectSet("RealRetAC_"+NamePattern+Depth+save,OBJPROP_RAY,false);
 
 if(SweetZoneStart)
  {
   ObjectCreate("Real1_"+NamePattern+Depth+save,OBJ_TRIANGLE,0,t3,p3,t6,p6,t7,p7);
   ObjectSet("Real1_"+NamePattern+Depth+save,OBJPROP_COLOR,SZScolor);
   ObjectSetText("Real1_"+NamePattern+Depth+save,NamePattern+"-"+BullBear+"_"+TimeFrame()+"_"+Depth);
  }
 if(SweetZoneEnd)
  {
   ObjectCreate("Real2_"+NamePattern+Depth+save,OBJ_TRIANGLE,0,t1,p1,t3,p3,t8,p8);
   ObjectCreate("Real3_"+NamePattern+Depth+save,OBJ_TRIANGLE,0,t3,p3,t8,p8,t9,p9);
   ObjectSet("Real2_"+NamePattern+Depth+save,OBJPROP_COLOR,SZEcolor);
   ObjectSet("Real3_"+NamePattern+Depth+save,OBJPROP_COLOR,SZEcolor);
   ObjectSetText("Real2_"+NamePattern+Depth+save,NamePattern+"-"+BullBear+"_"+TimeFrame()+"_"+Depth);
   ObjectSetText("Real3_"+NamePattern+Depth+save,NamePattern+"-"+BullBear+"_"+TimeFrame()+"_"+Depth);
  }
}
/*------------------------------------------------
Ïîñòðîåíèå WW. Êîíåö.
-------------------------------------------------*/

/*-------------------------------------------------------+
| Ôóíêöèÿ âîçâðàùàåò ñìåùåøèå òåêñòà, ÷òîáû îí íå íàåæçàë|
| íà áàðû.Íà÷àëî.                                        |
+-------------------------------------------------------*/
 double TextEdit()
 {
  double MaxPrice,MinPrice,Diapazon,PixelsOfPips,edit;
  
  MaxPrice=WindowPriceMax();// ìàêñèìàëüíàÿ öåíà â ðàáî÷åì îêíå
  MinPrice=WindowPriceMin();// ìèíèìàëüíàÿ öåíà â ðàáî÷åì îêíå
  Diapazon=MaxPrice-MinPrice; // çäåñü ìîæíî ñäåëàòü óìíîæåíèå íà ðàçðÿäíîñòü èíñòðóìåíòà, ÷òîáû ïîëó÷èòü ðåçóëüòàò â ïóíêòàõ, íî â êîíöå ïðèäåòñÿ âñåðàâíî äåëèòü îáðàòíî, ïîýòîìó è íå äåëàþ.
  PixelsOfPips=VPixels/Diapazon; // êîë-âî ïèêñåëåé íà 1 ïóíêò
  edit=19/PixelsOfPips; /* ãäå 19 - ýòî âûñîòà â ïèêñåëÿõ òåêñòîâîãî îáúåêòà */
  //Comment("edit: ",edit,"\n","Left: ",rect[0]," Top: ",rect[1]," Right: ",rect[2]," Bottom: ",rect[3],"\n","MaxPrice=",WindowPriceMax(),"; MinPrice=",WindowPriceMin());
  return(edit);
 }
/*-------------------------------------------------------+
| Ôóíêöèÿ âîçâðàùàåò ñìåùåøèå òåêñòà, ÷òîáû îí íå íàåæçàë|
| íà áàðû.Êîíåö.                                         |
+-------------------------------------------------------*/

/*-------------------------------------------------------+
| Ôóíêöèÿ âîçâðàùàåò óãîë íàêëîíà òåêñòà, ÷òîáû îí íå    |
| íàåæçàë íà ëèíèþ ðåòðåéñìåíòà.Íà÷àëî.                  |
+-------------------------------------------------------*/
 double AngleEdit(int BarPoint1,double PricePoint1,int BarPoint2,double PricePoint2)
 {
  double MaxPrice,MinPrice,Angle,edit;
  int BarChart;
  
  MaxPrice=WindowPriceMax();// ìàêñèìàëüíàÿ öåíà â ðàáî÷åì îêíå
  MinPrice=WindowPriceMin();// ìèíèìàëüíàÿ öåíà â ðàáî÷åì îêíå
  BarChart=WindowBarsPerChart(); // êîëè÷åñòâî áàðîâ ïîìåùàþùèõñÿ â îêíå.
  Angle=MathArctan(((PricePoint2-PricePoint1)*VPixels/(MaxPrice-MinPrice))/((BarPoint1-BarPoint2)*GPixels/BarChart));
  edit=Angle*57.3;
  return(edit);
 }
/*-------------------------------------------------------+
| Ôóíêöèÿ âîçâðàùàåò óãîë íàêëîíà òåêñòà, ÷òîáû îí íå    |
| íàåæçàë íà ëèíèþ ðåòðåéñìåíòà.Êîíåö.                   |
+-------------------------------------------------------*/

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