10评论

2收藏

请求哪位高手,帮忙把ZiaZag加上突破报警

avatar CJL | 1280 人阅读 | 10 人评论 | 2019-05-05

本帖最后由 CJL 于 2019-5-5 19:52 编辑

//+------------------------------------------------------------------+
//|                                                   ZigZag TP.mq4  |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow
#property indicator_width1 1
//---- indicator parameters
extern int ExtDepth       = 12;
extern int ExtDeviation   =  5;
extern int ExtBackstep    =  3;
//---- indicator buffers
double ZigzagBuffer[];
double HighMapBuffer[];
double LowMapBuffer[];

int level=3;
bool downloadhistory=false;
double acehigh[];
double high;
double acelow[];
double low;

void PrintText (string text, string objName, double textColor, double row, double column)
{
   int rowHeight = 10;

   ObjectCreate( objName, OBJ_LABEL, 0, 0, 0 );
   ObjectSet( objName, OBJPROP_COLOR, textColor );
   ObjectSet( objName, OBJPROP_CORNER, 3 );
   ObjectSet( objName, OBJPROP_XDISTANCE, column );
   ObjectSet( objName, OBJPROP_YDISTANCE, row*rowHeight);
   ObjectSetText( objName, text, 10, "Terminal" );
}

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(3);
//---- drawing settings
   SetIndexStyle(0,DRAW_SECTION);
//---- indicator buffers mapping
   SetIndexBuffer(0,ZigzagBuffer);
   SetIndexBuffer(1,HighMapBuffer);
   SetIndexBuffer(2,LowMapBuffer);

   SetIndexEmptyValue(0,0.0);


//---- indicator short name
   IndicatorShortName("ZigZag("+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");
//---- initialization done
   return(0);
  }
int deinit()
{
   int i;

   for (i=1;i<=3;i++)
   {
      ObjectDelete("item"+i);
   }
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {

   double vertices[10];
   double vertexPos[10];
   int vertexIndex;

    ObjectDelete("high");
    ObjectDelete("low");

   int i, counted_bars = IndicatorCounted();
   int limit,counterZ,whatlookfor;
   int shift,back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow;

   if (counted_bars==0 && downloadhistory) // history was downloaded
     {
      ArrayInitialize(ZigzagBuffer,0.0);
      ArrayInitialize(HighMapBuffer,0.0);
      ArrayInitialize(LowMapBuffer,0.0);
     }
   if (counted_bars==0)
     {
      limit=Bars-ExtDepth;
      downloadhistory=true;
     }
   if (counted_bars>0)
     {
      while (counterZ<level && i<100)
        {
         res=ZigzagBuffer;
         if (res!=0) counterZ++;
         i++;
        }
      i--;
      limit=i;
      if (LowMapBuffer!=0)
        {
         curlow=LowMapBuffer;
         whatlookfor=1;
        }
      else
        {
         curhigh=HighMapBuffer;
         whatlookfor=-1;
        }
      for (i=limit-1;i>=0;i--)  
        {
         ZigzagBuffer=0.0;  
         LowMapBuffer=0.0;
         HighMapBuffer=0.0;
        }
     }

   for(shift=limit; shift>=0; shift--)
     {
      val=Low[iLowest(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=LowMapBuffer[shift+back];
               if((res!=0)&&(res>val)) LowMapBuffer[shift+back]=0.0;
              }
           }
        }
      if (Low[shift]==val) LowMapBuffer[shift]=val; else LowMapBuffer[shift]=0.0;
      //--- high
      val=High[iHighest(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=HighMapBuffer[shift+back];
               if((res!=0)&&(res<val)) HighMapBuffer[shift+back]=0.0;
              }
           }
        }
      if (High[shift]==val) HighMapBuffer[shift]=val; else HighMapBuffer[shift]=0.0;
     }

   // final cutting
   if (whatlookfor==0)
     {
      lastlow=0;
      lasthigh=0;  
     }
   else
     {
      lastlow=curlow;
      lasthigh=curhigh;
     }
   for (shift=limit;shift>=0;shift--)
     {
      res=0.0;
      switch(whatlookfor)
        {
         case 0: // look for peak or lawn
            if (lastlow==0 && lasthigh==0)
              {
               if (HighMapBuffer[shift]!=0)
                 {
                  lasthigh=High[shift];
                  lasthighpos=shift;
                  whatlookfor=-1;
                  ZigzagBuffer[shift]=lasthigh;
                  res=1;
                  acehigh = lasthigh;
                 }
               if (LowMapBuffer[shift]!=0)
                 {
                  lastlow=Low[shift];
                  lastlowpos=shift;
                  whatlookfor=1;
                  ZigzagBuffer[shift]=lastlow;
                  res=1;
                  acelow = lastlow;
                 }
              }
             break;  
         case 1: // look for peak
            if (LowMapBuffer[shift]!=0.0 && LowMapBuffer[shift]<lastlow && HighMapBuffer[shift]==0.0)
              {
               ZigzagBuffer[lastlowpos]=0.0;
               lastlowpos=shift;
               lastlow=LowMapBuffer[shift];
               ZigzagBuffer[shift]=lastlow;
               res=1;
              }
            if (HighMapBuffer[shift]!=0.0 && LowMapBuffer[shift]==0.0)
              {
               lasthigh=HighMapBuffer[shift];
               lasthighpos=shift;
               ZigzagBuffer[shift]=lasthigh;
               whatlookfor=-1;
               res=1;
              }   
            break;               
         case -1: // look for lawn
            if (HighMapBuffer[shift]!=0.0 && HighMapBuffer[shift]>lasthigh && LowMapBuffer[shift]==0.0)
              {
               ZigzagBuffer[lasthighpos]=0.0;
               lasthighpos=shift;
               lasthigh=HighMapBuffer[shift];
               ZigzagBuffer[shift]=lasthigh;
              }
            if (LowMapBuffer[shift]!=0.0 && HighMapBuffer[shift]==0.0)
              {
               lastlow=LowMapBuffer[shift];
               lastlowpos=shift;
               ZigzagBuffer[shift]=lastlow;
               whatlookfor=1;
              }   
            break;               
         default: return;
        }
     }

   vertexIndex = 0;
   for (i=0;i<Bars;i++)
   {
      if (ZigzagBuffer != 0.0)
      {
         vertices [vertexIndex] = ZigzagBuffer ;
         vertexPos [vertexIndex] = i;
         vertexIndex++;
         if (vertexIndex == 10)
         {
            break;
         }
      }
   }

   PrintText (" ZZ = "+DoubleToStr(MathAbs(vertices[1]-vertices[2])/Point,0)+" pips", "item1", DarkGray, 1, 10);

   if (vertices[1] > vertices [2])
   {
      high = vertices[1];
      lasthighpos = vertexPos[1];
      low = vertices[2];
      lastlowpos = vertexPos[2];
   }
   else
   {
      high = vertices[2];
      lasthighpos = vertexPos[2];
      low = vertices[1];
      lastlowpos = vertexPos[1];
   }

   ObjectCreate("high", OBJ_TREND, 0, Time[lasthighpos], high, Time[0],high);
   ObjectSet("high", OBJPROP_STYLE, STYLE_SOLID);
   ObjectSet("high", OBJPROP_COLOR, Lime);                  
   ObjectSet("high", OBJPROP_WIDTH, 1);
   ObjectSet("high", OBJPROP_RAY, true);
   ObjectSet("high", OBJPROP_BACK,true);

   ObjectCreate("low", OBJ_TREND, 0, Time[lastlowpos], low, Time[0],low);
   ObjectSet("low", OBJPROP_STYLE, STYLE_SOLID);
   ObjectSet("low", OBJPROP_COLOR, Red);                  
   ObjectSet("low", OBJPROP_WIDTH, 1);
   ObjectSet("low", OBJPROP_RAY, true);
   ObjectSet("low", OBJPROP_BACK,true);

   return(0);
}
//+------------------------------------------------------------------+


QQ图片20190505195140.png
""
还没有人打赏,支持一下

评论|共 10 个

宗辰

发表于 2020-6-8 22:32:19 | 显示全部楼层

学习了,谢谢分享、、、

李华

发表于 2020-7-12 16:16:20 | 显示全部楼层

帮你顶下哈!!

不爱不恨

发表于 2020-7-16 13:26:44 | 显示全部楼层

帮你顶下哈!!

jhyzjxc123

发表于 2020-7-22 18:04:33 | 显示全部楼层

学习了,不错

邪恶的蛋

发表于 2020-8-9 15:09:53 | 显示全部楼层

谢谢楼主分享

joyce40998

发表于 2020-8-19 15:46:11 | 显示全部楼层

帮你顶下哈!!

村长hys

发表于 2020-9-5 15:34:56 | 显示全部楼层

学习了,不错

薛匀回林仰

发表于 2020-11-24 10:26:38 | 显示全部楼层

谢谢

成都外汇

发表于 2021-7-24 18:46:42 | 显示全部楼层

谢谢

12下一页
您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则