#property indicator_chart_window // â îêíå èíñòðóìåíòà #property indicator_buffers 5 #property indicator_color1 Magenta // çèãçàã #property indicator_color3 Green // âåðõí. ãð. êàíàëà #property indicator_color4 Red // íèæí. ãð. êàíàëà #property indicator_color5 Blue // íèæí. ãð. êàíàëà // âõîäíûå ïàðàìåòðû extern double Step=0.02; // íà÷àëüíîå çíà÷åíèå è øàã extern double Maximum=0.2; // êîíå÷íîå çíà÷åíèå extern int ShowChannel=2; // ïîêàçàòü 1 - ïî ìåñòó ýêñòðåìóìîâ, 2 - ïî âðåìåíè îïðåäåëåíèÿ extern int ShowZigZag=0; // ïîêàçàòü 1 - ïî ìåñòó ýêñòðåìóìîâ, 2 - ïî âðåìåíè îïðåäåëåíèÿ // èíä.áóôåðû double ZZpeak[], // ïèê ZZtrough[], // âïàäèíà ChTop[], // âåðõí. ãð. êàíàëà ChBot[], // íèæí. ãð. êàíàëà SAR[]; // SAR // îáùèå ïåðåìåííûå double OverBought; // çîíà ïåðåêóïëåííîñòè bool dir; // 0-ïîéìàíà âïàäèíà, 1 - ïèê double max,min; // òåêóùèå ìàêñ., ìèíèìóìû double top,bot; // ïèêè, âïàäèíû int j; // ñ÷åò÷èê ñìåùåíèÿ bool count=1; // íàïðàâëåíèå ïîèñêà öåíîâîãî ýêñòðåìóìà; 1 - îò ñòàðøèõ áàðîâ ê ìëàäøèì //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { if(ShowZigZag<0 || ShowChannel<0) count=0; ShowZigZag=MathAbs(ShowZigZag); ShowChannel=MathAbs(ShowChannel); //---- indicators SetIndexBuffer(0,ZZpeak); SetIndexEmptyValue(0,0.0); SetIndexLabel(0,"Peak"); SetIndexBuffer(1,ZZtrough); SetIndexEmptyValue(1,0.0); SetIndexLabel(1,"Trough"); if(ShowZigZag>0) { SetIndexStyle(0,DRAW_ZIGZAG); SetIndexStyle(1,DRAW_ZIGZAG); } else { SetIndexStyle(0,DRAW_NONE); SetIndexStyle(1,DRAW_NONE); } SetIndexBuffer(2,ChTop); SetIndexEmptyValue(2,0.0); SetIndexStyle(2,DRAW_LINE); SetIndexLabel(2,"ChTop"); SetIndexBuffer(3,ChBot); SetIndexEmptyValue(3,0.0); SetIndexStyle(3,DRAW_LINE); SetIndexLabel(3,"ChBot"); if(ShowChannel>0) { SetIndexStyle(2,DRAW_LINE); SetIndexStyle(3,DRAW_LINE); } else { SetIndexStyle(2,DRAW_NONE); SetIndexStyle(3,DRAW_NONE); } SetIndexBuffer(4,SAR); SetIndexStyle(4,DRAW_ARROW); SetIndexEmptyValue(4,0.0); SetIndexArrow(4,159); string _sar="SAR("+DoubleToStr(Step,3)+","+DoubleToStr(Maximum,1)+")"; SetIndexLabel(4,_sar); //---- IndicatorShortName("ZZ@SAR"); return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int ic=IndicatorCounted(); if(Bars-ic-1>1) ic=reinit(); int limit=Bars-ic-1; // êîë-âî ïåðåñ÷åòîâ for(int i=limit; i>=0; i--) SAR[i]=iSAR(NULL,0,Step,Maximum, i); for(i=limit; i>0; i--) { double sar=SAR[i]; double mid[2]; // ñð. öåíà mid[0]=(High[i]+Low[i])/2; // ñð.öåíà íà òåêóùåì áàðå mid[1]=(High[i+1]+Low[i+1])/2; // ñð.öåíà íà ïðåä.áàðå j++; // ñ÷åò÷èê ñìåùåíèÿ bool up=SAR[i+1]>=mid[1] && SAR[i]<mid[0]; // ïåðåâîðîò ââåðõ bool dn=SAR[i+1]<=mid[1] && SAR[i]>mid[0]; // ïååâîðîò âíèç if(dir) // ëîâëÿ ïèêà { if(dn) // ïåðåâîðîò âíèç { double h=0; if(count) {for(int k=j; k>=0; k--) if(High[i+k]>h) {int sh=i+k; h=High[i+k];}} else {for(k=0; k<=j; k++) if(High[i+k]>h) {sh=i+k; h=High[i+k];}} top=High[sh]; if(ShowZigZag==1) ZZpeak[sh]=top; else ZZpeak[i]=top; if(ShowChannel==1) for(k=sh; k>i; k--) ChTop[k]=top; j=1; dir=0; // ïîéìàí ïèê } } else // ëîâëÿ âïàäèíû { if(up) // ïåðåâîðîò ââåðõ { double l=High[i]*100; if(count) {for(k=j; k>=0; k--) if(Low[i+k]<l) {sh=i+k;l=Low[i+k];}} else {for(k=0; k<=j; k++) if(Low[i+k]<l) {sh=i+k;l=Low[i+k];}} bot=Low[sh]; // âïàäèíà = ìèíèìóìó if(ShowZigZag==1) ZZtrough[sh]=bot; else ZZtrough[i]=bot; if(ShowChannel==1) for(k=sh; k>i; k--) ChBot[k]=bot; j=1;dir=1; // ïîéìàíà âïàäèíà } } for(k=0; k<2; k++) {ChTop[i-k]=top; ChBot[i-k]=bot;} } return(0); } // ô-ÿ äîïîëíèòåëüíîé èíèöèàëèçàöèè int reinit() { ArrayInitialize(ZZpeak,0.0); ArrayInitialize(ZZtrough,0.0); ArrayInitialize(ChTop,0.0); ArrayInitialize(ChBot,0.0); ArrayInitialize(SAR,0.0); dir=0;max=0;min=0;top=0;bot=0;j=0; return(0); }
Sample
Analysis
Market Information Used:
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Indicator Curves created:
Implements a curve of type DRAW_ZIGZAG
Implements a curve of type DRAW_NONE
Implements a curve of type DRAW_LINE
Implements a curve of type DRAW_ARROW
Indicators Used:
Parabolic Stop and Reverse system
Custom Indicators Used:
Order Management characteristics:
Other Features: