Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
ZigZagc
// ÈÍÄÈÊÀÒÎÐ  //

#property indicator_chart_window
#property indicator_buffers 8  
#property indicator_color1 Red
#property indicator_color2 DarkSlateGray
#property indicator_color3 DarkSlateGray
#property indicator_color4 Silver
#property indicator_color5 DimGray
#property indicator_color6 DimGray
#property indicator_color7 DarkGreen
#property indicator_color8 SaddleBrown
//---- indicator parameters
extern int ExtDepth=12;
//---- indicator buffers
double LowBuffer[515];
double HighBuffer[515];
double ZgMas[];
double LwMas[];
double HgMas[];
double SrdMas[];
double Lw[];
double Hg[];
double Rd[];
double Gr[];
//====
double wp,wp1,wp2,lastlow,lasthigh;
int sl,sh,sk,sk2,ysh,ysl,ci,ps,pz,
     ps1,ps2,ps3,psa,pd,ska,knl,c,histori=500,time;
//====
int init()
  {
//---- indicators
   IndicatorBuffers(8);
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexStyle(1,DRAW_SECTION);
   SetIndexStyle(2,DRAW_SECTION);
   SetIndexStyle(3,DRAW_SECTION);
   SetIndexStyle(4,DRAW_SECTION);
   SetIndexStyle(5,DRAW_SECTION);
   SetIndexStyle(6,DRAW_SECTION);
   SetIndexStyle(7,DRAW_SECTION);
   SetIndexBuffer(0,ZgMas);
   SetIndexBuffer(1,LwMas);
   SetIndexBuffer(2,HgMas);
   SetIndexBuffer(3,SrdMas);
   SetIndexBuffer(4,Lw);
   SetIndexBuffer(5,Hg);
   SetIndexBuffer(6,Gr);
   SetIndexBuffer(7,Rd);
   SetIndexEmptyValue(0,0.0); 
   SetIndexEmptyValue(1,0.0);
   SetIndexEmptyValue(2,0.0);
   SetIndexEmptyValue(3,0.0);
   SetIndexEmptyValue(4,0.0);
   SetIndexEmptyValue(5,0.0);
   SetIndexEmptyValue(6,0.0);
   SetIndexEmptyValue(7,0.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int i,y,vl;
   double val,kl,kh;
//==============================================//
   if(Bars-c>1)c=0;
   if(c==0){
   ArrayInitialize(LowBuffer,0.0);
   ArrayInitialize(HighBuffer,0.0);   
   ArrayInitialize(SrdMas,0.0);
   ArrayInitialize(ZgMas,0.0);
   ArrayInitialize(Lw,0.0);
   ArrayInitialize(Hg,0.0);
       ska=0;psa=0;ysl=0;ysh=0;} 
//==============================================//
   if(c==0)i=histori; else i=Bars-c; c=Bars;
//==============================================//  
   if(i==1){sl++;sh++;pd++;ps++;ps1++;ps2++;ps3++;psa++;ysl++;ysh++;pz++;
    for(y=histori;y>=-1;y--) 
     {LowBuffer[y+1]=LowBuffer[y];HighBuffer[y+1]=HighBuffer[y];}}
   for(y=i;y>=0;y--) {vl=0;
//==============================//
       val=Low[iLowest(NULL,0,MODE_LOW,ExtDepth,y)];
      if(val!=lastlow&&val==Low[y]&&HighBuffer[y]==0)
       {lastlow=val;if(sk==1){LowBuffer[y]=val; sl=y; sk=-1;vl=-1;}
          else{if(val<LowBuffer[sl]){LowBuffer[sl]=0;
                 LowBuffer[y]=val;sl=y;sk=-1;vl=-1;}}
        } 
//==================\\\=========//
      val=High[iHighest(NULL,0,MODE_HIGH,ExtDepth,y)];
      if(val!=lasthigh&&val==High[y]&&LowBuffer[y]==0)
       {lasthigh=val;if(sk==-1){HighBuffer[y]=val; sh=y; sk=1;vl=1;}
          else{if(val>HighBuffer[sh]){HighBuffer[sh]=0;
               HighBuffer[y]=val;sh=y;sk=1;vl=1;}}
        }  
//====================================================//
    if(sk2!=sk){ps3=ps2;ps2=ps1;ps1=ps;wp2=wp1;wp1=wp; sk2=sk;}
    if(vl!=0){ps=y; if(sk==1)val=HighBuffer[ps]-HighBuffer[ps2];
     if(sk==-1)val=LowBuffer[ps]-LowBuffer[ps2] ; wp=val/(ps2-ps);}
   }       
//===================================================//  
 if(ska!=sk)knl=0; if(sk==1&&wp>=wp1&&knl==0)  knl=1;
                   if(sk==-1&&wp<=wp1&&knl==0)knl=-1;
 if(ska!=sk||i==1){ArrayCopy(LwMas,LowBuffer);ArrayCopy(HgMas,HighBuffer);}
 //============================================//
 if((vl!=0&&knl!=0)||i==1||ska!=sk){if(ska==0)pd=ps;
   if(sk==1) if(wp<wp1)val=wp1; else val=wp;
   if(sk==-1)if(wp>wp1)val=wp1; else val=wp;

   if(sk==1) {if(wp<=wp1&&ps!=0)HgMas[ps]=0;if(wp>=wp1&&ps==0&&pd!=0)HgMas[pd]=0;}
   if(sk==-1){if(wp>=wp1&&ps!=0)LwMas[ps]=0;if(wp<=wp1&&ps==0&&pd!=0)LwMas[pd]=0;}

   if(sk==1)  {LwMas[0]=LwMas[ps1]+val*ps1; HgMas[0]=HgMas[ps2]+val*ps2;}
   if(sk==-1) {LwMas[0]=LwMas[ps2]+val*ps2; HgMas[0]=HgMas[ps1]+val*ps1;}
      pd=ps;}  
//===================================================//
   if(vl!=0||ska==0){y=0;if(ska==0)y=histori;if(ska==0)pz=ps;
    while(y>=0&&ska==0){ 
   if(HighBuffer[y]!=0)ZgMas[y]=HighBuffer[y];
   if(LowBuffer[y]!=0) ZgMas[y]=LowBuffer[y];
      y--;}
   if(ska!=0){if(vl==1)ZgMas[0]=HighBuffer[0];
              if(vl==-1)ZgMas[0]=LowBuffer[0];
   if(vl==1&&pz!=0&&ska==sk) ZgMas[pz]=0;
   if(vl==-1&&pz!=0&&ska==sk)ZgMas[pz]=0;
   pz=0;}}
//======================================================//
   if((knl!=0&&vl!=0)||i==1||ska!=sk){y=0;if(ska==0)y=histori;
    while(y>0){   
   if(HgMas[y]!=0)  
      {kh=HgMas[y]-(HgMas[y]-HgMas[ysh])*(ysl-y)/(ysh-y);kl=LwMas[ysl]; 
       SrdMas[ysl]=(kl+kh)/2; ysh=y;}
   if(LwMas[y]!=0)
      {kl=LwMas[y]-(LwMas[y]-LwMas[ysl])*(ysh-y)/(ysl-y);kh=HgMas[ysh];
       SrdMas[ysh]=(kl+kh)/2; ysl=y;} 
       y--;}
//=========================================================//
   if(HgMas[1]==0&&LwMas[1]==0)SrdMas[1]=0;  
      SrdMas[0]=(HgMas[0]+LwMas[0])/2;  
   if((knl!=0&&vl!=0)||ska!=sk){ 
   if(ps==0&&psa!=0&&ska==sk)SrdMas[psa]=0;   
      val=HgMas[0]-LwMas[0];           

   if(LwMas[ps1]!=0)SrdMas[ps1]=LwMas[ps1]+val/2;
   if(HgMas[ps1]!=0)SrdMas[ps1]=HgMas[ps1]-val/2;

   if(HgMas[ps]!=0&&ps!=0){SrdMas[ps]=HgMas[ps]-val/2;}
   if(LwMas[ps]!=0&&ps!=0){SrdMas[ps]=LwMas[ps]+val/2;} 

   if(ska!=sk&&ska!=0&&sk==1) 
      {kl=LwMas[ps1]-(LwMas[ps1]-LwMas[ps3])*(ps2-ps1)/(ps3-ps1);
       SrdMas[ps2]=(HgMas[ps2]+kl)/2;}
   if(ska!=sk&&ska!=0&&sk==-1)
      {kh=HgMas[ps1]-(HgMas[ps1]-HgMas[ps3])*(ps2-ps1)/(ps3-ps1);
       SrdMas[ps2]=(LwMas[ps2]+kh)/2;}
      psa=ps;}} 
//============================================================//
   if(ska!=sk){ArrayInitialize(Lw,0.0);ArrayInitialize(Hg,0.0);
               ArrayInitialize(Rd,0.0);ArrayInitialize(Gr,0.0);}
   if((ska!=sk||i==1)&&((sk==1&&wp>wp1)||(sk==-1&&wp<wp1))){
   if(sk==1) {Hg[ps2]=HgMas[ps2];Hg[0]=HgMas[ps2]+wp1*ps2;
              Lw[ps1]=LwMas[ps1];Lw[0]=LwMas[ps1]+wp1*ps1;}
   if(sk==-1){Hg[ps1]=HgMas[ps1];Hg[0]=HgMas[ps1]+wp1*ps1;
              Lw[ps2]=LwMas[ps2];Lw[0]=LwMas[ps2]+wp1*ps2;}}
//=====================// red green //=========================//
/*   if(ska!=sk||i==1){
   if(sk==1){Rd[ps2]=HgMas[ps2];Rd[0]=HgMas[ps2]+wp2*ps2;
     Gr[ps2]=HgMas[ps2];Gr[0]=HgMas[ps2]+(2*wp1-wp2)*ps2;}
   if(sk==-1){Rd[ps2]=LwMas[ps2];Rd[0]=LwMas[ps2]+wp2*ps2;
     Gr[ps2]=LwMas[ps2];Gr[0]=LwMas[ps2]+(2*wp1-wp2)*ps2;}}*/
//==============================================//
   ska=sk;
 Comment("vol=",(HgMas[0]-LwMas[0])*10000); 
//==============================================//
//----
   return(0);
  }
//+------------------------------------------------------------------+

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