Author: nen@.....ru
ZUP_beta4
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
ZUP_beta4
//+----------------------------------------------------------------------+
//|ZigZag ñ ÷èëàìè Ïåñàâåíòî                                             |
//|----------------------------------------------------------------------+                                                                  |
//|ExtHidden - 0 - âñå ëèíèè ñêðûòû. Îáû÷íûé ZigZag.                     |
//|            1 - ïîêàçûâàåò âñå ëèíèè ìåæäó ôðàêòàëàìè, ó êîòîðûõ      |
//|                ïðîöåíò âîññòàíîâëåíèÿ >0.21 è <5.                    |
//|            2 - ïîêàçûâàåò òîëüêî òå  ëèíèè, ãäå ïðîöåíò âîññòàíî-    |  
//|                âëåíèÿ ðàâåí ÷èñëàì Ïåñàâåíòî (è 0.866 äëÿ ïîñòðî-    |
//|                åíèÿ ïàòòåðíîâ Gartley)                               |
//|            3 - ïîêàçûâàåò ÷èñëà, ïåðå÷èñëåííûå â ïóíêòå 2            |
//|                è ñîîòâåòñòâóþùèå ëèíèè                               |
//|            4 - ïîêàçûâàåò ÷èñëà íå Ïåñàâåíòî è ñîîòâåòñòâóþùèå ëèíèè |
//|                                                                      |
//|                                                                      |
//|ExtFractal - êîëè÷åñòâî ôðàêòàëîâ (ìàêñèìóìîâ, ìèíèìóìîâ),            |
//|             îò êîòîðûõ èäóò ëèíèè ê äðóãèì ôðàêòàëàì                 |
//|                                                                      |
//|ExtFractalEnd - êîëè÷åñòâî ôðàêòàëîâ, ê êîòîðûì èäóò ëèíèè            |
//|                äàëüøå ýòîãî ôðàêòàëà ñîåäèíÿþùèõ ëèíèé íå áóäåò      |
//|                Åñëè ExtFractalEnd=0 òî ïîñëåäíèé ôðàêòàë ðàâåí       |
//|                ìàêñèìàëüíîìó ÷èñëó ôðàêòàëîâ.                        |
//|                Ìèíèìàëüíîå çíà÷åíèå ExtFractalEnd=5                  |
//|                                                                      |
//|ExtDeltaType -    0 - âûâîäÿòñÿ ïðîöåíòû âîññòàíîâëåíèÿ "êàê åñòü"    |
//|                  1 - ðàñ÷åò äîïóñêà (%-÷èñëî Ïåñàâåíòî)<ExtDelta     |
//|                  2 - ((%-÷èñëî Ïåñàâåíòî)/÷èñëî Ïåñàâåíòî)<ExtDelta  |
//|                                                                      |
//|                                                                      |
//|ExtDelta - (äîïóñê) îòêëîíåíèå â ðàñ÷åòå. Çàäàåò âåëè÷èíó             |
//|           ïîòåíöèàëüíîé ðàçâîðîòíîé çîíû.                            |
//|                  äîëæíî áûòü 0<ExtDelta<1                            |
//|                                                                      |
//|ExtFibo  - true - âûâîäÿòñÿ óðîâíè Ôèáîíà÷÷è                          |
//|           false - íå âûâîäÿòñÿ óðîâíè Ôèáîíà÷÷è (îòíîñèòåëüíî        |
//|                   ïðåäïîñëåäíåãî êîëåíà ZigZag-a)                    |
//|                                                                      |
//+----------------------------------------------------------------------+
#property copyright "nen@.....ru"
#property link      "http://onix-trade.net/forum/index.php?act=post&do=reply_post&f=9&t=118"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- indicator parameters
extern int ExtDepth=12;
extern int ExtHidden=1;
extern int ExtFractal=10;
extern int ExtFractalEnd=10;
extern double ExtDelta=0.04;
extern int ExtDeltaType=1;
extern bool ExtFibo=false;
extern color ExtLine=DarkBlue;
extern color ExtPesavento=Yellow;
extern color ExtGartley866=GreenYellow;
extern color ExtNotFibo=SlateGray;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
//---- indicator buffers
// Ìàññèâ äëÿ îòðèñîâêè ZigZag
double zz[];
// Ìàññèâ ìèíèìóìîâ ÷åðíîâîé
double ExtMapBuffer[];
// Ìàññèâ ìàêñèìóìîâ ÷åðíîâîé
double ExtMapBuffer2[];

// Ìàññèâ ÷èñåë Ïåñàâåíòî (Ôèáû è ìîäèôèöèðîâàííûå Ôèáû)
double fi[]={0.382, 0.5, 0.618, 0.707, 0.786, 0.841, 0.886, 1.0, 1.128, 1.272, 1.414, 1.5, 1.618, 2.0, 2.414, 2.618, 4.0};
string fitxt[]={ ".382", "0.5", ".618", ".707", ".786", ".841", ".886", "1.0", "1.128", "1.272", "1.414", "1.5", "1.618", "2.0", "2.414", "2.618", "4.0" };
// Ìàòðèöà äëÿ ïîèñêà èñ÷åçíóâøèõ áàðîâ afr - ìàññèâ çíà÷åíèé âðåìåíè ïÿòè ïîñëåäíèõ ôðàêòàëîâ + îäíà ÿ÷åéêà - ïðèçíàê èíèöèàëèçàöèè
// afrl - ìèíèìóìû, afrh - ìàêñèìóìû
int afr[]={0.0,0.0,0.0,0.0,0.0,0.0};
double afrl[]={0.0,0.0,0.0,0.0,0.0}, afrh[]={0.0,0.0,0.0,0.0,0.0};

double HL,HLp,kk,kj,Angle;
// LowPrim,HighPrim,LowLast,HighLast - çíà÷åíèÿ ìèíèìóìîâ è ìàêñèìóìîâ áàðîâ
double LowPrim,HighPrim,LowLast,HighLast;
// numLowPrim,numHighPrim,numLowLast,numHighLast -íîìåðà áàðîâ
int numLowPrim,numHighPrim,numLowLast,numHighLast,k,k1,k2,ki,countLow1,countHigh1,shift,shift1;
// Âðåìÿ ñâå÷è ñ ïåðâûì îò íóëåâîãî áàðà ôðàêòàëîì
int timeFr1,timeFr1new,timeFr2Low,timeFr2High;
// Êîëè÷åñòâî ëèíèé, èäóùèõ îò ïåðâîãî îò íóëåâîãî áàðà ôðàêòàëà ê ñîñåäíèì ôðàêòàëàì
int countLineFr1;
// Ñ÷åò÷èê ôðàêòàëîâ
int countFr;
// Áàð, äî êîòîðîãî íàäî ðèñîâàòü ñîåäèíèòåëüíûå ëèíèè îò íóëåâîãî áàðà
int countBarEnd=0;
// Áàð, äî êîòîðîãî íàäî ïåðåñ÷èòûâàòü îò íóëåâîãî áàðà
int numBar=0;
// Íîìåð îáúåêòà
int numOb;
//Màêñèìóì èëè ìèíèìóì áàðà ïåðâîãî ôðàêòàëà (è ïðåäûäóùåãî ôðàêòàëà)
double hFr1, lFr1, hFr2, lFr2;
// Ôëàãè
// flagFrNew=true - îáðàçîâàëñÿ íîâûé ôðàêòàë èëè ïåðâûé ôðàêòàë ñìåñòèëñÿ íà äðóãîé áàð. =false - ïî óìîë÷àíèþ.
// flagFr=true - ïîñëåäíèé ôðàêòàë ìàêñèìóì. false - ïîñëåäíèé ôðàêòàë ìèíèìóì.
bool flagLow,flagHigh,flagFr,flagFrNew=false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(5);
//---- drawing settings
   SetIndexStyle(0,DRAW_SECTION);
//---- indicator buffers mapping
   SetIndexBuffer(0,zz);
   SetIndexBuffer(1,ExtMapBuffer);
   SetIndexBuffer(2,ExtMapBuffer2);
   SetIndexEmptyValue(0,0.0);
   ArraySetAsSeries(zz,true);
   ArraySetAsSeries(ExtMapBuffer,true);
   ArraySetAsSeries(ExtMapBuffer2,true);
//---- indicator short name
   IndicatorShortName("ZZ("+ExtDepth+")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Äåèíèöèàëèçàöèÿ. Óäàëåíèå âñåõ òðåíäîâûõ ëèíèé è òåêñòîâûõ îáúåêòîâ
//+------------------------------------------------------------------+
int deinit(){ ObjectsDeleteAll(0,2); ObjectsDeleteAll(0,21); ObjectDelete("Fibo"); return(0);}
//********************************************************
int start()
  {
   int counted_bars=IndicatorCounted();

   if( counted_bars<0 )
   {
      Alert("Ñáîé ðàñ÷åòà èíäèêàòîðà");
      return(-1);
   }

//  ZigZag èç ÌÒ. Íà÷àëî.
   int    shift, back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow;

   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];
      if(val==lastlow) val=0.0;
      else 
        { 
         lastlow=val; 
         if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer[shift+back];
               if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0; 
              }
           }
        } 
      ExtMapBuffer[shift]=val;
      //--- high
      val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];
      if(val==lasthigh) val=0.0;
      else 
        {
         lasthigh=val;
         if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer2[shift+back];
               if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0; 
              } 
           }
        }
      ExtMapBuffer2[shift]=val;
     }

   // final cutting 
   lasthigh=-1; lasthighpos=-1;
   lastlow=-1;  lastlowpos=-1;

   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      curlow=ExtMapBuffer[shift];
      curhigh=ExtMapBuffer2[shift];
      if((curlow==0)&&(curhigh==0)) continue;
      //---
      if(curhigh!=0)
        {
         if(lasthigh>0) 
           {
            if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
            else ExtMapBuffer2[shift]=0;
           }
         //---
         if(lasthigh<curhigh || lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }
      //----
      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
            else ExtMapBuffer[shift]=0;
           }
         //---
         if((curlow<lastlow)||(lastlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           } 
         lasthigh=-1;
        }
     }
  
   countLow1=0;
   countHigh1=0;

   for(shift=Bars-1; shift>=0; shift--)
     {
      zz[shift]=ExtMapBuffer[shift];
      if(shift>=Bars-ExtDepth) {ExtMapBuffer2[shift]=0.0;ExtMapBuffer[shift]=0.0; zz[shift]=0.0;}
      else
        {
         res=ExtMapBuffer2[shift];
         if(res!=0.0) zz[shift]=res;
        }
        if (ExtMapBuffer[shift]>0.0) {countLow1++;}
        if (ExtMapBuffer2[shift]>0.0) {countHigh1++;}
     }
// ZigZag èç ÌÒ. Êîíåö. Äîáàâëåí â ZigZag ïîäñ÷åò êîëè÷åñòâà ôðàêòàëàâ countLow1 è countHigh1.
// Äàëåå èäåò "äîîñíàñòêà" ZigZag-à.
    
      // Ïðîâåðêà ïðàâèëüíîñòè ââåäåííûõ âíåøíèõ ïåðåìåííûõ
      if (countBarEnd==0)
        {
         if (ExtDelta<=0) ExtDelta=0.001;
         if (ExtDelta>1) ExtDelta=0.999;

         if (ExtHidden<0) ExtHidden=0;
         if (ExtHidden>4) ExtHidden=4;
 
         if (ExtDeltaType<0) ExtDeltaType=0;
         if (ExtDeltaType>3) ExtDeltaType=3;

         if (ExtFractalEnd>0)
           {
            if (ExtFractalEnd<5) ExtFractalEnd=5;

            if (countLow1>ExtFractalEnd) countLow1=ExtFractalEnd;
            if (countHigh1>ExtFractalEnd) countHigh1=ExtFractalEnd;
           }
        }

   if (flagFrNew)
     {
      countLow1=0;
      countHigh1=0;
      for(shift=0; shift<=numBar; shift++)
        {
         if (ExtMapBuffer[shift]>0.0) {countLow1++;}
         if (ExtMapBuffer2[shift]>0.0) {countHigh1++;}    
        }  
      counted_bars=3;
     }

   if (Bars - counted_bars>2 && ExtHidden>0)
     {

// Èíèöèàëèçàöèÿ ìàòðèöû
      if (afr[5]<1)
        {
         k=0;
         for (shift=0; shift<Bars && k<5; shift++)
           {
            if (zz[shift]>0)
              {
               afr[k]=Time[shift];
               if (zz[shift]==ExtMapBuffer[shift]) {afrl[k]=Low[shift]; afrh[k]=0.0;}
               if (zz[shift]==ExtMapBuffer2[shift]) {afrh[k]=High[shift]; afrl[k]=0.0;}
               k++;
              }
           }
         afr[k]=1;

         if (ExtFibo)
           {
            if (afrl[1]>0) ObjectCreate("fibo",OBJ_FIBO,0,afr[2],afrh[2],afr[1],afrl[1]);
            else ObjectCreate("fibo",OBJ_FIBO,0,afr[2],afrl[2],afr[1],afrh[1]);
           }
        }
     for (shift=0; shift<Bars; shift++) // Ïîèñê âðåìåíè áàðà ïåðâîãî ôðàêòàëà, ñ÷èòàÿ îò íóëåâîãî áàðà
       {
        if (zz[shift]>0.0) 
         {
          timeFr1=Time[shift];
          if (ExtMapBuffer[shift]==zz[shift]) {lFr1=Low[shift]; hFr1=0.0;}
          if (ExtMapBuffer2[shift]==zz[shift]) {hFr1=High[shift]; lFr1=0.0;}

          break;
         }
       }
      // Ïîèñê íîìåðà áàðà, äî êîòîðîãî áóäóò ðèñîâàòüñÿ ñîåäèíèòåëüíûå ëèíèè 
      if (countBarEnd==0)
        {
         if (ExtFractalEnd>0)
           {
            k=ExtFractalEnd;
            for (shift=0; shift<Bars && k>0; shift++) if (zz[shift]>0 && ExtMapBuffer2[shift]>0) {countBarEnd=shift; k--;}
           }
         else countBarEnd=Bars-3;
        }

//-----------1 Îòðèñîâêà ìàêñèìóìîâ. Íà÷àëî.
//+--------------------------------------------------------------------------+
//| Âûâîä ñîåäèíÿþùèõ ëèíèé è ÷èñåë Ïåñàâåíòî è 0.866 äëÿ ìàêñèìóìîâ ZigZag-a
//| Îòðèñîâêà èäåò îò íóëåâîãî áàðà
//+--------------------------------------------------------------------------+

   numLowPrim=0; numLowLast=0;
   numHighPrim=0; numHighLast=0;

   LowPrim=0.0; LowLast=0.0;
   HighPrim=0.0; HighLast=0.0;
   
   flagHigh=false;
   Angle=-100;
   
   if (flagFrNew) countFr=1;
   else countFr=ExtFractal;
   
   for (k=0; (k<Bars-1 && countHigh1>0 && countFr>0); k++)
     {
      if (ExtMapBuffer[k]>0.0 && LowPrim==0.0 && HighPrim>0 && ExtMapBuffer[k]==zz[k]) {LowPrim=ExtMapBuffer[k]; numLowPrim=k;}
      if (ExtMapBuffer[k]>0.0 && ExtMapBuffer[k]<LowPrim && HighPrim>0 && ExtMapBuffer[k]==zz[k]) {LowPrim=ExtMapBuffer[k]; numLowPrim=k;}
      if (ExtMapBuffer2[k]>0.0 && ExtMapBuffer2[k]==zz[k])
        {
         if (HighPrim>0) 
           {
            if (HighLast>0) 
              {
               if (flagHigh)
                 {
                  if (ExtMapBuffer2[k]>HighLast) {HighLast=High[k]; numHighLast=k;}
                 }
               else
                 {
                  if (ExtMapBuffer2[k]>HighPrim) flagHigh=true;
                  HighLast=High[k];
                  numHighLast=k;
                 }
              }
            else {numHighLast=k; HighLast=High[k];}

              HL=High[numHighLast]-Low[numLowPrim];
              kj=(HighPrim-HighLast)*10000/(numHighLast-numHighPrim);
              if (HL>0 && (Angle>kj || Angle==-100))  // Ïðîâåðêà óãëà íàêëîíà ëèíèè
                {
                 Angle=kj;
                 // Ñîçäàíèå ëèíèè è òåêñòîâîãî îáúåêòà
                 HLp=High[numHighPrim]-Low[numLowPrim];
                 k1=MathCeil((numHighPrim+numHighLast)/2);
                 kj=HLp/HL;
 
                 if (kj>0.21 && kj<=5)
                   {
                    // Ñîçäàíèå òåêñòîâîãî îáúåêòà (÷èñëà Ïåñàâåíòî). % âîññòàíîâëåíèÿ ìåæäó ìàêñèìóìàìè
                    kk=kj;
                    k2=1;

                    if (ExtDeltaType==2) for (ki=16;ki>=0;ki--) {if (MathAbs((fi[ki]-kj)/fi[ki])<=ExtDelta) {kk=fi[ki]; k2=-1; break;}}
                    if (ExtDeltaType==1) for (ki=16;ki>=0;ki--) {if (MathAbs(fi[ki]-kj)<=ExtDelta) {kk=fi[ki]; k2=-1; break;}}

                    if (k2<0)
                      // ïðîöåíò âîññòàíîâëåíèÿ ÷èñëà Ïåñàâåíòî è 0.866
                      {
                      if (ExtHidden!=4 && ExtHidden>0)                  
                        {
                         ObjectCreate("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],OBJ_TEXT,0,Time[k1],MathAbs((High[numHighPrim]+High[numHighLast])/2));
                         if (kk==0.886) // Gartley
                           ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],fitxt[ki],7,"Arial", ExtGartley866);
                         else
                           ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],fitxt[ki],7,"Arial",ExtPesavento);
                        }
                       }
                    else
                      // ïðîöåíò âîññòàíîâëåíèÿ (íå Ïåñàâåíòî è 0.866)
                      {
                       if (ExtHidden==1 || ExtHidden==4)
                         {
                          ObjectCreate("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],OBJ_TEXT,0,Time[k1],MathAbs((High[numHighPrim]+High[numHighLast])/2));
                          ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],""+DoubleToStr(kk,2),7,"Arial",ExtNotFibo);
                         }
                      }
                      if ((ExtHidden==2 && k2<0) || (ExtHidden!=0 && ExtHidden!=2))
                        {
                         ObjectCreate("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJ_TREND,0,Time[numHighPrim],High[numHighPrim],Time[numHighLast],High[numHighLast]);
                         ObjectSet("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJPROP_RAY,false);
                         ObjectSet("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJPROP_STYLE,STYLE_DOT);
                         ObjectSet("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJPROP_COLOR,ExtLine);
                        }
                   }
                }
           }
         else 
            {numHighPrim=k; HighPrim=High[k];}
        }
       // Ïåðåõîä íà ñëåäóþùèé ôðàêòàë
       if (k>countBarEnd) 
//       if (k>Bars-3) 
         {
          k=numHighPrim+1; countHigh1--; countFr--;
          numLowPrim=0; numLowLast=0;
          numHighPrim=0; numHighLast=0;

          LowPrim=0.0; LowLast=0.0;
          HighPrim=0.0; HighLast=0.0;
   
          flagHigh=false;
          Angle=-100;
         }
     }
//-----------1 Îòðèñîâêà ìàêñèìóìîâ. Êîíåö.

//-----------2 Îòðèñîâêà ìèíèìóìîâ. Íà÷àëî.
//+-------------------------------------------------------------------------+
//| Âûâîä ñîåäèíÿþùèõ ëèíèé è ÷èñåë Ïåñàâåíòî è 0.866 äëÿ ìèíèìóìîâ ZigZag-a
//| Îòðèñîâêà èäåò îò íóëåâîãî áàðà
//+-------------------------------------------------------------------------+

   numLowPrim=0; numLowLast=0;
   numHighPrim=0; numHighLast=0;

   LowPrim=0.0; LowLast=0.0;
   HighPrim=0.0; HighLast=0.0;
   
   flagLow=false; 
   Angle=-100;

   if (flagFrNew) countFr=1;
   else countFr=ExtFractal;

   for (k=0; (k<Bars && countLow1>0 && countFr>0); k++)
     {
      if (ExtMapBuffer2[k]>HighPrim && LowPrim>0) {HighPrim=High[k]; numHighPrim=k;}
      if (ExtMapBuffer[k]>0.0 && ExtMapBuffer[k]==zz[k]) 
        {
         if (LowPrim>0) 
           {
            if (LowLast>0) 
              {
               if (flagLow)
                 {
                  if (ExtMapBuffer[k]<LowLast) {LowLast=Low[k]; numLowLast=k;}
                 }
               else
                 {
                  if (ExtMapBuffer[k]<LowPrim) flagLow=true;
                  LowLast=Low[k];
                  numLowLast=k;
                 }
              }
            else {numLowLast=k; LowLast=Low[k];}
              // âûâîä ñîåäèíÿþùèõ ëèíèé è ïðîöåíòîâ âîññòàíîâëåíèÿ(÷èñåë Ïåñàâåíòî)
              HL=High[numHighPrim]-Low[numLowLast];
              kj=(LowPrim-LowLast)*1000/(numLowLast-numLowPrim);
              if (HL>0 && (Angle<kj || Angle==-100))  // Ïðîâåðêà óãëà íàêëîíà ëèíèè
                {
                 Angle=kj;

                 HLp=High[numHighPrim]-Low[numLowPrim];
                 k1=MathCeil((numLowPrim+numLowLast)/2);
                 kj=HLp/HL;

                 if (kj>0.21 && kj<=5)
                   {
                    // Ñîçäàíèå òåêñòîâîãî îáúåêòà (÷èñëà Ïåñàâåíòî). % âîññòàíîâëåíèÿ ìåæäó ìèíèìóìàìè
                    kk=kj;
                    k2=1;

                    if (ExtDeltaType==2) for (ki=16;ki>=0;ki--) {if (MathAbs((fi[ki]-kj)/fi[ki])<=ExtDelta) {kk=fi[ki]; k2=-1; break;}}
                    if (ExtDeltaType==1) for (ki=16;ki>=0;ki--) {if (MathAbs(fi[ki]-kj)<=ExtDelta) {kk=fi[ki]; k2=-1; break;}}

                    if (k2<0)
                    // ïðîöåíò âîññòàíîâëåíèÿ ÷èñëà Ïåñàâåíòî è 0.866
                      {
                       if (ExtHidden!=4 && ExtHidden>0)                  
                         {
                          ObjectCreate("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],OBJ_TEXT,0,Time[k1],MathAbs((Low[numLowPrim]+Low[numLowLast])/2));
                          if (kk==0.886) // Gartley
                            ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],fitxt[ki],7,"Arial", ExtGartley866);
                          else
                            ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],fitxt[ki],7,"Arial",ExtPesavento);
                         }
                      }
                    else 
                    // ïðîöåíò âîññòàíîâëåíèÿ (íå Ïåñàâåíòî è 0.866)
                      { 
                       if (ExtHidden==1 || ExtHidden==4)
                         ObjectCreate("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],OBJ_TEXT,0,Time[k1],MathAbs((Low[numLowPrim]+Low[numLowLast])/2));
                         ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],""+DoubleToStr(kk,2),7,"Arial",ExtNotFibo);
                      }
                      if ((ExtHidden==2 && k2<0) || (ExtHidden!=0 && ExtHidden!=2))
                        {
                         ObjectCreate("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJ_TREND,0,Time[numLowPrim],Low[numLowPrim],Time[numLowLast],Low[numLowLast]);
                         ObjectSet("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJPROP_RAY,false);
                         ObjectSet("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJPROP_STYLE,STYLE_DOT);
                         ObjectSet("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJPROP_COLOR,ExtLine);
                        }
                   }
                }
           }
         else {numLowPrim=k; LowPrim=Low[k];}
        }
       // Ïåðåõîä íà ñëåäóþùèé ôðàêòàë
       if (k>countBarEnd) 
//       if (k>Bars-3) 
         {
          k=numLowPrim+1; countLow1--; countFr--;

          numLowPrim=0; numLowLast=0;
          numHighPrim=0; numHighLast=0;

          LowPrim=0.0; LowLast=0.0;
          HighPrim=0.0; HighLast=0.0;
  
          flagLow=false;
          Angle=-100;
         }
     }

  flagFrNew=false;
  numBar=0;
//-----------2 Îòðèñîâêà ìèíèìóìîâ. Êîíåö.
  }
else // counted_bars<=2 Ïðîâåðêà ñìåùåíèé ôðàêòàëîâ.

// Ïðîâåðêà íà ðàçðåøåíèå âûâîäà îñíàñòêè. Íà÷àëî.
if (ExtHidden>0)
//
  {
//

// Êîððåêöèÿ ñîåäèíÿþùèõ ëèíèé è ÷èñåë. Íà÷àëî.

  {

   // Ïîèñê âðåìåíè áàðà ïåðâîãî ôðàêòàëà, ñ÷èòàÿ îò íóëåâîãî áàðà
   for (shift1=0; shift1<Bars; shift1++) 
     {
      if (zz[shift1]>0.0) 
       {
        timeFr1new=Time[shift1];
        break;
       }
     }
   // Ïîèñê áàðà, íà êîòîðîì áûë ïîñëåäíèé ôðàêòàë
   shift=iBarShift(Symbol(),Period(),timeFr1); 
  // Ñðàâíåíèå òåêóùåãî çíà÷åíèÿ ôðàêòàëà ñ òåì, êîòîðûé áûë ðàíåå


  // Îáðàçîâàëñÿ íîâûé ôðàêòàë
  if (timeFr1new!=timeFr1)
    {
     flagFrNew=true;
     if (shift>numBar) numBar=shift;
     afr[5]=0;
    }
  // Ôðàêòàë íà ìàêñèìóìå ñäâèíóëñÿ íà äðóãîé áàð
  if (hFr1>0 && zz[shift]==0.0)
    {
     flagFrNew=true;
     if (shift>numBar) numBar=shift;
     afr[5]=0;
    }
  // Ôðàêòàë íà ìèíèìóìå ñäâèíóëñÿ íà äðóãîé áàð
  if (lFr1>0 && zz[shift]==0.0)
    {
     flagFrNew=true;
     if (shift>numBar) numBar=shift;
     afr[5]=0;
    }


//-----------3 Ñìåñòèëñÿ ìèíèìóì èëè ìàêñèìóì, íî îñòàëñÿ íà òîì æå áàðå. Íà÷àëî.

//============= 1 ñìåñòèëñÿ ìàêñèìóì. Íà÷àëî.
if (hFr1-High[shift]!=0 && hFr1>0)
  {

   numLowPrim=0; numLowLast=0;
   numHighPrim=shift; numHighLast=0;

   LowPrim=0.0; LowLast=0.0;
   HighPrim=High[shift]; HighLast=0.0;
   
   flagHigh=false;
   Angle=-100;

   for (k=shift+1; k<Bars; k++)
     {

      if (ExtMapBuffer[k]>0.0 && LowPrim==0.0 && ExtMapBuffer[k]==zz[k]) {LowPrim=ExtMapBuffer[k]; numLowPrim=k;}
      if (ExtMapBuffer[k]>0.0 && ExtMapBuffer[k]<LowPrim && ExtMapBuffer[k]==zz[k]) {LowPrim=ExtMapBuffer[k]; numLowPrim=k;}
      if (ExtMapBuffer2[k]>0.0  && ExtMapBuffer2[k]==zz[k])
        {
         if (HighLast>0) 
           {
            if (flagHigh)
              {
               if (ExtMapBuffer2[k]>HighLast) {HighLast=High[k]; numHighLast=k;}
              }
            else
              {
               if (ExtMapBuffer2[k]>HighPrim) flagHigh=true;
               HighLast=High[k];
               numHighLast=k;
              }
           }
         else {numHighLast=k; HighLast=High[k];}
         HL=High[numHighLast]-Low[numLowPrim];
         kj=(HighPrim-HighLast)*10000/(numHighLast-numHighPrim);
         if (HL>0 && (Angle>kj || Angle==-100))  // Ïðîâåðêà óãëà íàêëîíà ëèíèè
           {
            Angle=kj;
// Ñîçäàíèå ëèíèè
            HLp=High[numHighPrim]-Low[numLowPrim];
            k1=MathCeil((shift+numHighLast)/2);
            kj=HLp/HL;
// Ïîèñê ñòàðîé ñîåäèíèòåëüíîé ëèíèè                 
            numOb=ObjectFind("ph" + Time[numHighPrim] + "_" + Time[numHighLast]);
            if (numOb>-1)
              {
               if (kj>0.21 && kj<=5)
                 {
                  // Ïåðåìåùåíèå îáúåêòîâ
                  ObjectMove("ph" + Time[numHighPrim] + "_" + Time[numHighLast],0,Time[numHighPrim],High[numHighPrim]);
                  ObjectMove("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],0,Time[k1],MathAbs((High[numHighPrim]+High[numHighLast])/2));

                  // Ñîçäàíèå òåêñòîâîãî îáúåêòà (÷èñëà Ïåñàâåíòî). % âîññòàíîâëåíèÿ ìåæäó ìàêñèìóìàìè
                  kk=kj;
                  k2=1;

                  if (ExtDeltaType==2) for (ki=16;ki>=0;ki--) {if (MathAbs((fi[ki]-kj)/fi[ki])<=ExtDelta) {kk=fi[ki]; k2=-1; break;}}
                  if (ExtDeltaType==1) for (ki=16;ki>=0;ki--) {if (MathAbs(fi[ki]-kj)<=ExtDelta) {kk=fi[ki]; k2=-1; break;}}

                  if (k2<0)
                    // ïðîöåíò âîññòàíîâëåíèÿ ÷èñëî Ïåñàâåíòî
                    if (ExtHidden!=4 && ExtHidden>0)
                      {
                       if (kk==0.886)
                         ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],fitxt[ki],7,"Arial", ExtGartley866);
                       else
                         ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],fitxt[ki],7,"Arial",ExtPesavento);
                      }
                    else
                    // ïðîöåíò âîññòàíîâëåíèÿ (íå Ïåñàâåíòî)
                      if (ExtHidden==1 || ExtHidden==4)
                        ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],""+DoubleToStr(kk,2),7,"Arial",ExtNotFibo);
                 }
               else
                 {
                  ObjectDelete("ph" + Time[numHighPrim] + "_" + Time[numHighLast]); 
                  ObjectDelete("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast]);
                 }
              }
            else
              {
//******* Ïðîðèñîâêà íîâîé ëèíèè, åñëè îíà ïîÿâèëàñü.
               if (kj>0.21 && kj<=5)
                 {
                  // Ñîçäàíèå òåêñòîâîãî îáúåêòà (÷èñëà Ïåñàâåíòî). % âîññòàíîâëåíèÿ ìåæäó ìàêñèìóìàìè
                  kk=kj;
                  k2=1;

                  if (ExtDeltaType==1) for (ki=16;ki>=0;ki--) {if (MathAbs(fi[ki]-kj)<=ExtDelta) {kk=fi[ki]; k2=-1; break;}}
                  if (ExtDeltaType==2) for (ki=16;ki>=0;ki--) {if (MathAbs((fi[ki]-kj)/fi[ki])<=ExtDelta) {kk=fi[ki]; k2=-1; break;}}

                  if (k2<0)
                    // ïðîöåíò âîññòàíîâëåíèÿ ÷èñëà Ïåñàâåíòî è 0.866
                    {
                     if (ExtHidden!=4 && ExtHidden>0)                  
                       {
                        ObjectCreate("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],OBJ_TEXT,0,Time[k1],MathAbs((High[numHighPrim]+High[numHighLast])/2));
                        if (kk==0.886) // Gartley
                          ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],fitxt[ki],7,"Arial", ExtGartley866);
                        else
                          ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],fitxt[ki],7,"Arial",ExtPesavento);
                       }
                    }
                  else
                    // ïðîöåíò âîññòàíîâëåíèÿ (íå Ïåñàâåíòî è 0.866)
                    {
                     if (ExtHidden==1 || ExtHidden==4)
                       {
                        ObjectCreate("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],OBJ_TEXT,0,Time[k1],MathAbs((High[numHighPrim]+High[numHighLast])/2));
                        ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],""+DoubleToStr(kk,2),7,"Arial",ExtNotFibo);
                       }
                    }
                  if ((ExtHidden==2 && k2<0) || (ExtHidden!=0 && ExtHidden!=2))
                    {
                     ObjectCreate("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJ_TREND,0,Time[numHighPrim],High[numHighPrim],Time[numHighLast],High[numHighLast]);
                     ObjectSet("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJPROP_RAY,false);
                     ObjectSet("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJPROP_STYLE,STYLE_DOT);
                     ObjectSet("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJPROP_COLOR,ExtLine);
                    }
                 }
//*******
               }
             }
        }
     }
     hFr1=High[shift];
     timeFr1=Time[shift];
   }
//============= 1 ñìåñòèëñÿ ìàêñèìóì. Êîíåö.
//
//============= 1 ñìåñòèëñÿ ìèíèìóì. Íà÷àëî.
if (lFr1-Low[shift]!=0 && lFr1>0)
  {

   numLowPrim=0; numLowLast=0;
   numHighPrim=shift; numHighLast=0;

   LowPrim=Low[shift]; LowLast=0.0;
   HighPrim=0.0; HighLast=0.0;
   
   flagLow=false;
   Angle=-100;
   for (k=shift+1; k<Bars; k++)
     {
      if (ExtMapBuffer2[k]>HighPrim) {HighPrim=High[k]; numHighPrim=k;}
      if (ExtMapBuffer[k]>0.0 && ExtMapBuffer[k]==zz[k]) 
        {
         if (LowLast>0) 
           {
            if (flagLow)
              {
               if (ExtMapBuffer[k]<LowLast) {LowLast=Low[k]; numLowLast=k;}
              }
            else
              {
               if (ExtMapBuffer[k]<LowPrim) flagLow=true;
               LowLast=Low[k];
               numLowLast=k;
              }
           }
         else {numLowLast=k; LowLast=Low[k];}
         HL=High[numHighPrim]-Low[numLowLast];
         kj=(LowPrim-LowLast)*1000/(numLowLast-numLowPrim);
         if (HL>0 && (Angle<kj || Angle==-100))  // Ïðîâåðêà óãëà íàêëîíà ëèíèè
           {
            Angle=kj;

            HLp=High[numHighPrim]-Low[numLowPrim];
            k1=MathCeil((numLowPrim+numLowLast)/2);
            kj=HLp/HL;
// Ïîèñê ñòàðîé ñîåäèíèòåëüíîé ëèíèè                 
            numOb=ObjectFind("pl" + Time[numLowPrim] + "_" + Time[numLowLast]);
            if (numOb>-1)
              {
               if (kj>0.21 && kj<=5)
                 {
                  // Ïåðåìåùåíèå îáúåêòîâ
                  ObjectMove("pl" + Time[numLowPrim] + "_" + Time[numLowLast],0,Time[numLowPrim],Low[numLowPrim]);
                  ObjectMove("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],0,Time[k1],MathAbs((Low[numLowPrim]+Low[numLowLast])/2));

                  // Ñîçäàíèå òåêñòîâîãî îáúåêòà (÷èñëà Ïåñàâåíòî). % âîññòàíîâëåíèÿ ìåæäó ìèíèìóìàìè
                  kk=kj;
                  k2=1;

                  if (ExtDeltaType==2) for (ki=16;ki>=0;ki--) {if (MathAbs((fi[ki]-kj)/fi[ki])<=ExtDelta) {kk=fi[ki]; k2=-1; break;}}
                  if (ExtDeltaType==1) for (ki=16;ki>=0;ki--) {if (MathAbs(fi[ki]-kj)<=ExtDelta) {kk=fi[ki]; k2=-1; break;}}

                  if (k2<0)
                  // ïðîöåíò âîññòàíîâëåíèÿ ÷èñëà Ïåñàâåíòî è 0.866
                    {
                     if (ExtHidden!=4 && ExtHidden>0)                  
                       {
                        if (kk==0.886) // Gartley
                          ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],fitxt[ki],7,"Arial", ExtGartley866);
                        else
                          ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],fitxt[ki],7,"Arial",ExtPesavento);
                       }
                    }
                  else 
                    // ïðîöåíò âîññòàíîâëåíèÿ (íå Ïåñàâåíòî è 0.866)
                    if (ExtHidden==1 || ExtHidden==4)
                      ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],""+DoubleToStr(kk,2),7,"Arial",ExtNotFibo);
                 }           
               else
                 {
                  ObjectDelete("pl" + Time[numLowPrim] + "_" + Time[numLowLast]); 
                  ObjectDelete("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast]);
                 }
              }  
            else
              {
//******* Ïðîðèñîâêà íîâîé ëèíèè, åñëè îíà ïîÿâèëàñü.
               if (kj>0.21 && kj<=5)
                 {
                  // Ñîçäàíèå òåêñòîâîãî îáúåêòà (÷èñëà Ïåñàâåíòî). % âîññòàíîâëåíèÿ ìåæäó ìèíèìóìàìè
                  kk=kj;
                  k2=1;

                  if (ExtDeltaType==2) for (ki=16;ki>=0;ki--) {if (MathAbs((fi[ki]-kj)/fi[ki])<=ExtDelta) {kk=fi[ki]; k2=-1; break;}}
                  if (ExtDeltaType==1) for (ki=16;ki>=0;ki--) {if (MathAbs(fi[ki]-kj)<=ExtDelta) {kk=fi[ki]; k2=-1; break;}}

                  if (k2<0)
                    // ïðîöåíò âîññòàíîâëåíèÿ ÷èñëà Ïåñàâåíòî è 0.866
                    {
                     if (ExtHidden!=4 && ExtHidden>0)                  
                       {
                        ObjectCreate("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],OBJ_TEXT,0,Time[k1],MathAbs((Low[numLowPrim]+Low[numLowLast])/2));
                        if (kk==0.886) // Gartley
                          ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],fitxt[ki],7,"Arial", ExtGartley866);
                        else
                          ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],fitxt[ki],7,"Arial",ExtPesavento);
                       }
                    }
                  else 
                    // ïðîöåíò âîññòàíîâëåíèÿ (íå Ïåñàâåíòî è 0.866)
                    { 
                     if (ExtHidden==1 || ExtHidden==4)
                       ObjectCreate("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],OBJ_TEXT,0,Time[k1],MathAbs((Low[numLowPrim]+Low[numLowLast])/2));
                       ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],""+DoubleToStr(kk,2),7,"Arial",ExtNotFibo);
                    }
                    if ((ExtHidden==2 && k2<0) || (ExtHidden!=0 && ExtHidden!=2))
                      {
                       ObjectCreate("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJ_TREND,0,Time[numLowPrim],Low[numLowPrim],Time[numLowLast],Low[numLowLast]);
                       ObjectSet("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJPROP_RAY,false);
                       ObjectSet("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJPROP_STYLE,STYLE_DOT);
                       ObjectSet("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJPROP_COLOR,ExtLine);
                      }
                 }           
//*******
                }
             }
        }
     }
     lFr1=Low[shift];
     timeFr1=Time[shift];
   }
//============= 1 ñìåñòèëñÿ ìèíèìóì. Êîíåö.
//-----------3 Ñìåñòèëñÿ ìèíèìóì èëè ìàêñèìóì, íî îñòàëñÿ íà òîì æå áàðå. Êîíåö.


   // Ïîèñê èñ÷åçíóâøèõ ôðàêòàëîâ è óäàëåíèå ëèíèé, èñõîäÿùèõ îò ýòèõ ôðàêòàëîâ. Ïåðåçàïèñü ìàòðèöû.
   for (k=0; k<5; k++)
     {
      
      if (afrl[k]>0)
        {
         // Ïîèñê áàðà, íà êîòîðîì áûë ýòîò ôðàêòàë
         shift=iBarShift(Symbol(),Period(),afr[k]); 
         if (zz[shift]==0)
           {
            if (shift>numBar) numBar=shift;

            afr[5]=0;
            numLowPrim=shift; numLowLast=0;LowLast=10000000;
            for (k1=shift+1; k1<Bars; k1++)
              {
               if (ExtMapBuffer[k1]<LowLast && ExtMapBuffer[k1]>0) 
                 {
                  LowLast=Low[k1]; numLowLast=k1;
                  numOb=ObjectFind("pl" + Time[numLowPrim] + "_" + Time[numLowLast]);
                  if (numOb>-1)
                    {
                     ObjectDelete("pl" + Time[numLowPrim] + "_" + Time[numLowLast]); 
                     ObjectDelete("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast]);
                    }
                 }
              }
           }
        }

      if (afrh[k]>0)
        {
         // Ïîèñê áàðà, íà êîòîðîì áûë ýòîò ôðàêòàë
         shift=iBarShift(Symbol(),Period(),afr[k]); 
         if (zz[shift]==0)
           {
            if (shift>numBar) numBar=shift;

            afr[5]=0;
            numHighPrim=shift; numHighLast=0;HighLast=0.0;
            for (k1=shift+1; k1<Bars; k1++)
              {
               if (ExtMapBuffer2[k1]>HighLast) 
                 {
                  HighLast=High[k1]; numHighLast=k1;
                  numOb=ObjectFind("ph" + Time[numHighPrim] + "_" + Time[numHighLast]);
                  if (numOb>-1)
                    {
                     ObjectDelete("ph" + Time[numHighPrim] + "_" + Time[numHighLast]); 
                     ObjectDelete("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast]);
                    }
                 }
              }

           }
        }

     }

   // Ïåðåçàïèñü ìàòðèöû
   if (afr[5]<1)
     if (ExtFibo) ObjectDelete("Fibo");
     {
      k=0;
      for (shift=0; shift<Bars && k<5; shift++)
        {
         if (zz[shift]>0)
           {
            afr[k]=Time[shift];
            if (zz[shift]==ExtMapBuffer[shift]) {afrl[k]=Low[shift]; afrh[k]=0.0;}
            if (zz[shift]==ExtMapBuffer2[shift]) {afrh[k]=High[shift]; afrl[k]=0.0;}
            k++;
           }
        }
      afr[k]=1;
      if (ExtFibo)
        {
         if (afrl[1]>0) ObjectCreate("fibo",OBJ_FIBO,0,afr[2],afrh[2],afr[1],afrl[1]);
         else ObjectCreate("fibo",OBJ_FIBO,0,afr[2],afrl[2],afr[1],afrh[1]);
        }
     }

// Ïðîâåðêà íà ðàçðåøåíèå âûâîäà îñíàñòêè. Êîíåö.
//
  }
//


// Êîððåêöèÿ. Êîíåö.
  }


// end
}

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