诚信为本
量力而为
当前位置:峰汇在线 > MetaTrader 4 > MT4指标 > 正文

之字形通道 DT_ZZ_optimized.mq4

DT_ZZ_optimized 指标是之字形通道的一种优化。

图表:DT_ZZ_optimized 指标

源码:

//+------------------------------------------------------------------+
//|                                              DT_ZZ_optimized.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright @2006, klot."
#property link      "http://www.125808047.com"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Green
#property indicator_color2 Blue
#property indicator_color3 Red

extern int ExtDepth=12;
extern int calculateLevel=2; 

double zzL[];
double zzH[];
double zz[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
{
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexStyle(2,DRAW_ARROW);
   
   SetIndexArrow(1,159);
   SetIndexArrow(2,159);
   
   SetIndexBuffer(0,zz);
   SetIndexBuffer(1,zzH);
   SetIndexBuffer(2,zzL);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexEmptyValue(2,0.0);
     
   IndicatorShortName("DT_ZZ("+ExtDepth+")");
   Comment("www.125808047.com");
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   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; 
            }
         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; 
            }
         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(rates_total);
   }
//+------------------------------------------------------------------+
打赏
版权所有转载请注明标题及链接:峰汇在线 » 之字形通道 DT_ZZ_optimized.mq4
上一篇:
下一篇:
分享到: 更多 (0)

如您觉得此文不错请扫码打赏!

支付宝扫一扫打赏

微信扫一扫打赏