//+------------------------------------------------------------------+ //| GannZIGZAG.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "" #property link "" //---- #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 DeepSkyBlue #property indicator_color2 Black //---- input parameters extern int GSv_range=2; //---- buffers double GSv_sl[]; double GSv_m[]; //---- bool draw_up=0,draw_dn=0,initfl=0; int fPoint_i,sPoint_i,s_up,s_dn,drawf,lb,idFile; double h,l; bool cur_h=0,cur_l=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_SECTION,STYLE_DOT); //SetIndexStyle(1,DRAW_SECTION); SetIndexBuffer(0,GSv_sl); //SetIndexBuffer(1,GSv_m); SetIndexEmptyValue(0,0.0); //SetIndexEmptyValue(1,0.0); FileDelete("Gann.txt"); idFile=FileOpen("Gann.txt",FILE_READ|FILE_WRITE," "); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int cb,limit,i; //---- if(GSv_range<1 ) { Alert("Èíäèêàòîð ðàññ÷èòûâàåò çíà÷åíèÿ /n ïðè ïàðàìåòðå GSv_range íå ìåíüøå 1!!!"); return(-1); } if(counted_bars<0 ) { return(-1); } else { if(Bars-1-counted_bars<=0 ) { limit=0; } else { limit=Bars-1-counted_bars; } } //ïåðâîíà÷àëüíàÿ èíèöèàëèçàöèÿ if(initfl!=1 ) { myInit(); } //FileWrite(idFile," 0. Áàðîâ íà ãðàôèêå "+Bars); //öèêë ïî áàðàì for( cb=limit;cb>=0;cb--) { if(cb==0)FileWrite(idFile,"---- èíäåêñ òåêóùåãî áàðà "+cb+" "+(Bars-1-cb)+" âðåìÿ "+TimeToStr(Time[cb])+" áàðîâ íà ãðàôèêå "+Bars); //åñëè íà ïðåäûäóùåì áàðå áûë îòðèñîâàí ýêñòðåìóì if(GSv_sl[cb+1]>0 && lb!=Bars-1-cb ) { if(draw_up!=0 ) { s_dn=0; if(cb==0)FileWrite(idFile," 1. Áûë îòðèñîâàí ìàêñèìóì, ñ÷åò÷èê ìèíèìóìîâ îáíóëåí"); } else { if(draw_dn!=0 ) { s_up=0; if(cb==0)FileWrite(idFile," 2. Áûë îòðèñîâàí ìèíèìóì, ñ÷åò÷èê ìàêñèìóìîâ îáíóëåí"); } } } if(lb!=Bars-1-cb ) { cur_h=0; cur_l=0; if(cb==0)FileWrite(idFile," 2.1 íîâûé áàð ôëàãè íàëè÷èÿ ìàêñèìóìà è ìèíèìóìà ñáðîøåíû"); } if(cb>Bars-2-drawf || (High[cb]<=High[cb+1] && Low[cb]>=Low[cb+1]) ) { if(cb==0)FileWrite(idFile," 3. Áàð ëèáî 'âíóòðåííèé', ëèáî äî ïåðâîãî ýêñòðåìóìà"); continue; } if(draw_up!=0 ) { if(cb==0)FileWrite(idFile," 4. Èíäèêàòîð íàïðàâëåí ââåðõ"); //åñëè ëèíèÿ íàïðàâëåíà ââåðõ if(High[cb]>h ) { //åñëè äîñòèãíóò íîâûé ìàêñèìóì h=High[cb]; cur_h=1; if(cb==0)FileWrite(idFile," 5. Äîñòèãíóò íîâûé ìàêñèìóì = "+h+" cur_h "+cur_h); } if(Low[cb]<l ) { //åñëè äîñòèãíóò íîâûé ìèíèìóì l=Low[cb]; if(cb==0)FileWrite(idFile," 6. Äîñòèãíóò íîâûé ìèíèìóì = "+l); //åñëè ýòî íå òîò æå ñàìûé áàð if(lb!=Bars-1-cb || cur_l!=1)s_dn++; cur_l=1; if(cb==0)FileWrite(idFile," 7. Áàð íîâûé, ñ÷åò÷èê ìèíèìóìîâ óâåëè÷åí "+s_dn+" cur_l "+cur_l); } //åñëè ñ÷åò÷èêè ðàâíû if(s_up==s_dn ) { if(cb==0)FileWrite(idFile," 8. Ñ÷åò÷èêè ðàâíû"); //åñëè ïîñëåäíèé áàð îäíîâðåìåííî íîâûé ìàêñèìóì è ìèíèìóì if(cur_h==cur_l && cur_l==1 ) { if(cb==0)FileWrite(idFile," 9. Åñòü äâà ýêñòðåìóìà"); //åñëè ñâå÷à ìåäâåæüÿ if(Close[cb]<=Open[cb] ) { draw_up=0; draw_dn=1; fPoint_i=sPoint_i; sPoint_i=Bars-1-cb; GSv_sl[cb]=l; for( i=cb+1;i<Bars-1-fPoint_i;i++ ) { GSv_sl[i]=0; } if(cb==0)FileWrite(idFile," 10. Ñâå÷à ìåäâåæüÿ, ëèíèÿ ââåðõ = "+draw_up+", ëèíèÿ âíèç,"+draw_dn+" fPoint_i = "+fPoint_i+" sPoint_i "+sPoint_i+" èíäèêàòîð = "+GSv_sl[cb]); } else { //åñëè ñâå÷à áû÷üÿ sPoint_i=Bars-1-cb; GSv_sl[cb]=h; for( i=cb+1;i<Bars-1-fPoint_i;i++ ) { GSv_sl[i]=0; } if(cb==0)FileWrite(idFile," 11. Ñâå÷à áû÷üÿ, ëèíèÿ ââåðõ = "+draw_up+", ëèíèÿ âíèç,"+draw_dn+" fPoint_i = "+fPoint_i+" sPoint_i "+sPoint_i+" èíäèêàòîð = "+GSv_sl[cb]); } } else { //åñëè ïîñëåäíèé áàð òîëüêî íîâûé ìàêñèìóì if(cur_h==1 ) { sPoint_i=Bars-1-cb; GSv_sl[cb]=h; l=Low[cb]; for( i=cb+1;i<Bars-1-fPoint_i;i++ ) { GSv_sl[i]=0; } if(cb==0)FileWrite(idFile," 12. Òîëüêî ìàêñèìóì, èíäèêàòîð = "+GSv_sl[cb]+" sPoint_i "+sPoint_i+" l "+l); } else { if(cur_l==1 ) { //åñëè ïîñëåäíèé áàð òîëüêî íîâûé ìèíèìóì draw_up=0; draw_dn=1; fPoint_i=sPoint_i; sPoint_i=Bars-1-cb; GSv_sl[cb]=l; h=High[cb]; for( i=cb+1;i<Bars-1-fPoint_i;i++ ) { GSv_sl[i]=0; } if(cb==0)FileWrite(idFile," 13. Òîëüêî ìèíèìóì, èíäèêàòîð = "+GSv_sl[cb]+" fPoint_i "+fPoint_i+" sPoint_i "+sPoint_i+" draw_up "+draw_up+" draw_dn "+draw_dn+" h "+h); } } } } else { //èíà÷å åñëè ñìåíû íàïðàâëåíèÿ íåò ÿâíî (ñ÷åò÷èê Dn ñâå÷åé íå ðàâåí GSv_range) if(cb==0)FileWrite(idFile," 14. Ñ÷åò÷èêè íå ðàâíû"); //åñëè äîñòèãíóò íîâûé ìàêñèìóì if(cur_h==1 ) { sPoint_i=Bars-1-cb; GSv_sl[cb]=h; for( i=cb+1;i<Bars-1-fPoint_i;i++ ) { GSv_sl[i]=0; } l=Low[cb]; if(cb==0)FileWrite(idFile," 15. Åñòü íîâûé ìàêñèìóì, èíäèêàòîð "+GSv_sl[cb]+" sPoint_i "+sPoint_i+" l "+l); } } } else { //åñëè ëèíèÿ íàïðàâëåíà âíèç if(cb==0)FileWrite(idFile," 16. Èíäèêàòîð íàïðàâëåí âíèç"); if(High[cb]>h ) { //åñëè äîñòèãíóò íîâûé ìàêñèìóì h=High[cb]; if(cb==0)FileWrite(idFile," 17. Äîñòèãíóò íîâûé ìàêñèìóì "+h); if(lb!=Bars-1-cb || cur_h!=1)s_up++; cur_h=1; //åñëè ýòî íå òîò æå ñàìûé áàð if(cb==0)FileWrite(idFile," 18. Íîâûé áàð, ñ÷åò÷èê ìàêñèìóìîâ óâåëè÷åí "+s_up+" cur_h "+cur_h+" h "+h); } if(Low[cb]<l ) { //åñëè äîñòèãíóò íîâûé ìèíèìóì l=Low[cb]; cur_l=1; if(cb==0)FileWrite(idFile," 19. Äîñòèãíóò íîâûé ìèíèìóì "+l+" cur_l "+cur_l); } //åñëè ñ÷åò÷èêè ðàâíû if(s_up==s_dn ) { if(cb==0)FileWrite(idFile," 20. Ñ÷åò÷èêè ðàâíû"); //åñëè ïîñëåäíèé áàð îäíîâðåìåííî íîâûé ìàêñèìóì è ìèíèìóì if(cur_h==cur_l && cur_l==1 ) { if(cb==0)FileWrite(idFile," 21. Åñòü äâà ýêñòðåìóìà"); //åñëè ñâå÷à ìåäâåæüÿ if(Close[cb]<=Open[cb] ) { sPoint_i=Bars-1-cb; GSv_sl[cb]=l; for( i=cb+1;i<Bars-1-fPoint_i;i++ ) { GSv_sl[i]=0; } if(cb==0)FileWrite(idFile," 22. Ñâå÷à ìåäâåæüÿ, èíäèêàòîð "+GSv_sl[cb]+" sPoint_i "+sPoint_i); } else { //åñëè ñâå÷à áû÷üÿ draw_up=1; draw_dn=0; fPoint_i=sPoint_i; sPoint_i=Bars-1-cb; GSv_sl[cb]=h; for( i=cb+1;i<Bars-1-fPoint_i;i++ ) { GSv_sl[i]=0; } if(cb==0)FileWrite(idFile," 23. Ñâå÷à áû÷üÿ, èíäèêàòîð "+GSv_sl[cb]+" draw_up "+draw_up+" draw_dn "+draw_dn+" sPoint_i "+sPoint_i+" fPoint_i "+fPoint_i); } } else { //åñëè ïîñëåäíèé áàð òîëüêî íîâûé ìàêñèìóì if(cur_h==1 ) { draw_up=1; draw_dn=0; fPoint_i=sPoint_i; sPoint_i=Bars-1-cb; GSv_sl[cb]=h; l=Low[cb]; for( i=cb+1;i<Bars-1-fPoint_i;i++ ) { GSv_sl[i]=0; } if(cb==0)FileWrite(idFile," 24. Òîëüêî ìàêñèìóì, èíäèêàòîð "+GSv_sl[cb]+" draw_up "+draw_up+" draw_dn "+draw_dn+" sPoint_i "+sPoint_i+" fPoint_i "+fPoint_i+" l "+l); } else { if(cur_l==1 ) { //åñëè ïîñëåäíèé áàð òîëüêî íîâûé ìèíèìóì sPoint_i=Bars-1-cb; GSv_sl[cb]=l; h=High[cb]; for( i=cb+1;i<Bars-1-fPoint_i;i++ ) { GSv_sl[i]=0; } if(cb==0)FileWrite(idFile," 25. Òîëüêî ìèíèìóì, èíäèêàòîð "+GSv_sl[cb]+" sPoint_i "+sPoint_i+" h "+h); } } } } else { //èíà÷å åñëè ñìåíû íàïðàâëåíèÿ íåò ÿâíî (ñ÷åò÷èê Up ñâå÷åé íå ðàâåí GSv_range) if(cb==0)FileWrite(idFile," 26. Ñ÷åò÷èêè íå ðàâíû"); //åñëè äîñòèãíóò íîâûé ìèíèìóì if(cur_l==1 ) { sPoint_i=Bars-1-cb; GSv_sl[cb]=l; for( i=cb+1;i<Bars-1-fPoint_i;i++ ) { GSv_sl[i]=0; } h=High[cb]; if(cb==0)FileWrite(idFile," 27. Äîñòèãíóò íîâûé ìèíèìóì, èíäèêàòîð "+GSv_sl[cb]+" sPoint_i "+sPoint_i+" h "+h); } } } if(lb!=Bars-1-cb)lb=Bars-1-cb; } //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- FileClose(idFile); //---- return(0); } //+------------------------------------------------------------------+ // Ôóíêöèÿ íà÷àëüíîé èíèöèàëèçàöèè èíäèêàòîðà | //+------------------------------------------------------------------+ void myInit() { //---- int cb; fPoint_i=0; h=High[Bars-1]; l=Low[Bars-1]; for( cb=Bars-2;cb>=0;cb--) { if(High[cb]>High[cb+1] || Low[cb]<Low[cb+1] ) { if(High[cb]>h && High[cb]>High[cb+1] ) { s_up++; } if(Low[cb]<l && Low[cb]<Low[cb+1] ) { s_dn++; } } else { continue; } if(s_up==s_dn && s_up==GSv_range ) { h=High[cb]; l=Low[cb]; sPoint_i=Bars-1-cb; if(Close[cb]>=Open[cb] ) { s_dn=0; GSv_sl[Bars-1]=Low[Bars-1]; GSv_sl[cb]=High[cb]; draw_up=1; break; } else { s_up=0; GSv_sl[Bars-1]=High[Bars-1]; GSv_sl[cb]=Low[cb]; draw_dn=1; break; } } else { h=High[cb]; l=Low[cb]; sPoint_i=Bars-1-cb; if(s_up==GSv_range ) { s_dn=0; GSv_sl[Bars-1]=Low[Bars-1]; GSv_sl[cb]=High[cb]; draw_up=1; break; } else { if(s_dn==GSv_range ) { s_up=0; GSv_sl[Bars-1]=High[Bars-1]; GSv_sl[cb]=Low[cb]; draw_dn=1; break; } } } } initfl=1; drawf=sPoint_i; //---- return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar
Series array that contains open prices of each bar
Indicator Curves created:
Implements a curve of type DRAW_SECTION
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features:
Uses files from the file system
It issuies visual alerts to the screen
It writes information to file