//+------------------------------------------------------------------+ //| Classic ZigZag .mq4 | //| Copyright c 2008, FXIBANK & INTG | //| rone.sergey@gmail.com | //+------------------------------------------------------------------+ #property copyright "Copyright c 2008, FXIBANK & INTG" #property link "rone.sergey@gmail.com" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Blue #property indicator_width1 2 extern int BarsDepth=2000; extern double ReversalPercent=0.3; extern bool UseReversalPips=true; extern bool ShowBarsCount=false; extern int ReversalPips=0; extern bool ShowPipsValue=true; extern bool HidePippets=false; extern int FontSize=8; extern string FontName="Arial"; extern color FontColor=Red; extern int TextIndentUp=40; extern int TextIndentDown=10; string Cmnt = ""; double zz[]; //----------------------------------- int deinit() { ObjectsDeleteAll(0,OBJ_TEXT); } //----------------------------------- int init() { SetIndexBuffer(0,zz); SetIndexStyle(0,DRAW_SECTION); Cmnt = "ZigPips "; if (ReversalPips == 0) { if (Period() <= PERIOD_M15) ReversalPips = 35; else if (Period() <= PERIOD_H1) ReversalPips = 70; else ReversalPips = 140; Cmnt = "ZigPips Auto "; } } //----------------------------------- int start() { Comment(Cmnt,ReversalPips); double reverse, prev, dPipsValue; bool bUp=true; int last, prevLast, nBarsInZ; string sData, id; if (BarsDepth==0) BarsDepth=Bars-1; for (int i=BarsDepth; i>=0; i--) { if (UseReversalPips) reverse=ReversalPips*Point; else reverse = NormalizeDouble(ReversalPercent*Close[i]/100,Digits); // если вверх if (bUp) { // продолжаем идти вверх if (High[i]>prev) { zz[i]=High[i]; prev=High[i]; zz[last]=EMPTY_VALUE; last=i; } else { // если разворачиваемся вниз if (Low[i]prev+reverse) { bUp=true; zz[i]=High[i]; prev=High[i]; if (ShowPipsValue) { dPipsValue=(High[prevLast]-Low[last])/Point; // расстояние в пипсах в секции nBarsInZ = prevLast-last; // кол-во баров в секции if (HidePippets==true) sData=DoubleToStr(dPipsValue/10,0); else sData=DoubleToStr(dPipsValue,0); if (ShowBarsCount==true) { sData=StringConcatenate(sData," (",nBarsInZ,")"); } id="ZP "+ReversalPips+" "+TimeToStr(Time[last],TIME_DATE|TIME_MINUTES); // выводим данные под разворотным лоу if (ObjectFind(id)==-1) { ObjectCreate(id,OBJ_TEXT,0,Time[last],Low[last]-TextIndentDown*Point); //ObjectSetText(id,sData,FontSize,FontName,FontColor); } ObjectMove(id,0,Time[last],Low[last]-TextIndentDown*Point); ObjectSetText(id,sData,FontSize,FontName,FontColor); } prevLast=last; last=i; } // стоим на месте else { zz[i]=EMPTY_VALUE; } } } } return(0); }