zz_DT_ZZ_optimized

Author: Copyright � 2006, klot.
zz_DT_ZZ_optimized
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
zz_DT_ZZ_optimized
//+------------------------------------------------------------------+
//|                                                        DT_ZZ.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, klot."
#property link      "klot@mail.ru"
// optimized by Rosh

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Green
#property indicator_color2 Blue
#property indicator_color3 Red
//---- indicator parameters
extern int ExtDepth=12;
extern int calculateLevel=2; 
//---- indicator buffers
double zzL[];
double zzH[];
double zz[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
 //  IndicatorBuffers(3);
//---- drawing settings
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexStyle(2,DRAW_ARROW);
   
   SetIndexArrow(1,159);
   SetIndexArrow(2,159);
   
//---- indicator buffers mapping
   SetIndexBuffer(0,zz);
   SetIndexBuffer(1,zzH);
   SetIndexBuffer(2,zzL);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexEmptyValue(2,0.0);
     
//---- indicator short name
   IndicatorShortName("DT_ZZ("+ExtDepth+")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
   {
   int i,shift,pos,lasthighpos,lastlowpos,curhighpos,curlowpos;
   double curlow,curhigh,lasthigh,lastlow;
   double min, max;
   int counted_bars=IndicatorCounted();
   if (counted_bars==0)
      {
      ArrayInitialize(zz,0.0);
      ArrayInitialize(zzL,0.0);
      ArrayInitialize(zzH,0.0);
   
      lasthighpos=Bars; lastlowpos=Bars;
      lastlow=Low[Bars];lasthigh=High[Bars];
      Print("limit=",Bars-ExtDepth);
      for(shift=Bars-ExtDepth; shift>=0; shift--)
         {
         curlowpos=Lowest(NULL,0,MODE_LOW,ExtDepth,shift);
         curlow=Low[curlowpos];
         curhighpos=Highest(NULL,0,MODE_HIGH,ExtDepth,shift);
         curhigh=High[curhighpos];
         //------------------------------------------------
         if( curlow>=lastlow ) { lastlow=curlow; }
         else
            { 
            //èäåì âíèç
            if( lasthighpos>curlowpos  ) 
               { 
               zzL[curlowpos]=curlow;
               ///*
               min=100000; pos=lasthighpos;
               for(i=lasthighpos; i>=curlowpos; i--)
                  { 
                    if (zzL[i]==0.0) continue;
                    if (zzL[i]<min) { min=zzL[i]; pos=i; }
                    zz[i]=0.0;
                  } 
               zz[pos]=min;
               //*/
               } 
            lastlowpos=curlowpos;
            lastlow=curlow; 
            }
         //--- high
         if( curhigh<=lasthigh )  { lasthigh=curhigh;}
         else
            {  
            // èäåì ââåðõ
            if( lastlowpos>curhighpos ) 
               {  
               zzH[curhighpos]=curhigh;
               ///*
                  max=-100000; pos=lastlowpos;
                  for(i=lastlowpos; i>=curhighpos; i--)
                     { 
                       if (zzH[i]==0.0) continue;
                       if (zzH[i]>max) { max=zzH[i]; pos=i; }
                       zz[i]=0.0;
                     } 
                  zz[pos]=max;
               //*/     
               }  
            lasthighpos=curhighpos;
            lasthigh=curhigh;    
            }       
         zz[0]=Close[0];
         }
       //----------------------------------------------------------------------
      }
   else
      {
      int pos2;
      i=0;
      while (pos2<calculateLevel && i<Bars-1)
         {
         if (zz[i]!=0 && (zzH[i]!=0||zzL[i]!=0)) pos2++;
         i++;
         }
      pos2=i-1;    
      for (i=pos2-1;i>=0;i--)
         {
         zzH[i]=0;
         zzL[i]=0;
         zz[i]=0;   
         }
      if (zzH[pos2]!=0) 
         {
         lasthighpos=pos2;
         lasthigh=High[pos2];
         lastlowpos=Lowest(NULL,0,MODE_LOW,ExtDepth,pos2);
         lastlow=Low[lastlowpos];
         }
      else
         {         
         lastlowpos=pos2;
         lastlow=Low[pos2];
         lasthighpos=Highest(NULL,0,MODE_HIGH,ExtDepth,pos2);
         lasthigh=High[lasthighpos];
         }
      //------------------------- îïñ÷èòàåì çàíîâî   
      Print("limit=",pos2-1);
      for(shift=pos2-1; shift>=0; shift--)
         {
         curlowpos=Lowest(NULL,0,MODE_LOW,ExtDepth,shift);
         curlow=Low[curlowpos];
         curhighpos=Highest(NULL,0,MODE_HIGH,ExtDepth,shift);
         curhigh=High[curhighpos];
         //------------------------------------------------
         if( curlow>=lastlow ) { lastlow=curlow; }
         else
            { 
            //èäåì âíèç
            if( lasthighpos>curlowpos  ) 
               { 
               zzL[curlowpos]=curlow;
               ///*
               min=100000; pos=lasthighpos;
               for(i=lasthighpos; i>=curlowpos; i--)
                  { 
                    if (zzL[i]==0.0) continue;
                    if (zzL[i]<min) { min=zzL[i]; pos=i; }
                    zz[i]=0.0;
                  } 
               zz[pos]=min;
               //*/
               } 
            lastlowpos=curlowpos;
            lastlow=curlow; 
            }
         //--- high
         if( curhigh<=lasthigh )  { lasthigh=curhigh;}
         else
            {  
            // èäåì ââåðõ
            if( lastlowpos>curhighpos ) 
               {  
               zzH[curhighpos]=curhigh;
               ///*
                  max=-100000; pos=lastlowpos;
                  for(i=lastlowpos; i>=curhighpos; i--)
                     { 
                       if (zzH[i]==0.0) continue;
                       if (zzH[i]>max) { max=zzH[i]; pos=i; }
                       zz[i]=0.0;
                     } 
                  zz[pos]=max;
               //*/     
               }  
            lasthighpos=curhighpos;
            lasthigh=curhigh;    
            }       

         }
      //------------------------- îïñ÷èòàåì çàíîâî         
      zz[0]=Close[0];   
      }
   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 ---