//+------------------------------------------------------------------+ //| CCIFilter vX.mq4 | //| | //| mod by Raff | //+------------------------------------------------------------------+ // mtf 2008fxtsd ki //2008fxtsd CCI_Filter_vX2DSalert1_mtf.mq4 alerts switches #property copyright "Copyright © 2006, Forex-TSD.com " #property link "http://www.forex-tsd.com/" #property indicator_separate_window #property indicator_buffers 8 #property indicator_color1 SlateGray #property indicator_color2 LimeGreen #property indicator_color3 Teal #property indicator_color4 IndianRed #property indicator_color5 Red #property indicator_color6 Magenta #property indicator_color7 SpringGreen #property indicator_color8 Yellow #property indicator_width1 2 #property indicator_width2 2 #property indicator_width3 2 #property indicator_width4 2 #property indicator_width5 2 #property indicator_width6 1 #property indicator_width7 1 #property indicator_width8 1 //#property indicator_level1 0 #property indicator_level1 -100 #property indicator_level2 100 #property indicator_level3 -200 #property indicator_level4 200 #property indicator_levelcolor DarkSlateGray //---- input parameters extern int CCIPeriod = 14; extern int CCIPrice = 0; extern int UpperTriggerLevel = 100; extern int LowerTriggerLevel = -100; extern int CriticalLevel = 250; extern int TimeFrame = 0; extern string TimeFrames = "M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF"; extern bool ShowBARS = false; extern int BarWidth = 4; extern bool Show_Dots = true; extern bool Alerts = true; extern bool CriticalLevelAlerts = true; extern string CriticalLevelAlert = " CCI Critical Level Cross"; extern bool ZeroCrossAlerts = true; extern string ZeroBuyAlert = " BUY: CCI Zero Cross"; extern string ZeroSellAlert = " SELL: CCI Zero Cross"; extern bool TriggerLevelAlerts = true; extern string UpperTriggerBuyAlert = " BUY: CCI Upper Trigger Cross Up"; extern string UpperTriggerSellAlert = " SELL CCI Upper Trigger Cross Dn"; extern string LowerTriggerBuyAlert = " BUY: CCI Lower Trigger Cross Up"; extern string LowerTriggerSellAlert = " SELL: CCI Lower Trigger Cross Dn"; extern string AlertsSoundFile = "news.wav"; extern int MaxBarsToCount = 1500; extern string note_Price = "Price(C O1 H2 3L 4M 5T W6) ModeMa(SMA0,EMA1,SmmMA2,LWMA3)"; //---- indicator buffers double CCI[]; double UpBuffer1[]; double UpBuffer2[]; double DnBuffer1[]; double DnBuffer2[]; double DnArr[]; double UpArr[]; double CCI_Dot[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(8); SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexStyle(2,DRAW_LINE); SetIndexStyle(3,DRAW_LINE); SetIndexStyle(4,DRAW_LINE); if (ShowBARS) { SetIndexStyle(1,DRAW_HISTOGRAM,0,BarWidth); SetIndexStyle(2,DRAW_HISTOGRAM,0,BarWidth); SetIndexStyle(3,DRAW_HISTOGRAM,0,BarWidth); SetIndexStyle(4,DRAW_HISTOGRAM,0,BarWidth); } SetIndexEmptyValue(5,EMPTY_VALUE); SetIndexEmptyValue(6,EMPTY_VALUE); SetIndexStyle (5,DRAW_ARROW); SetIndexArrow (5,159); SetIndexBuffer (5,DnArr); SetIndexStyle (6,DRAW_ARROW); SetIndexArrow (6,159); SetIndexBuffer (6,UpArr); SetIndexEmptyValue(7,EMPTY_VALUE); SetIndexArrow(7,158); //159 115 SetIndexStyle(7,DRAW_NONE); if(Show_Dots) SetIndexStyle(7,DRAW_ARROW); SetIndexBuffer(0,CCI); SetIndexBuffer(1,UpBuffer1); SetIndexBuffer(2,UpBuffer2); SetIndexBuffer(3,DnBuffer1); SetIndexBuffer(4,DnBuffer2); SetIndexBuffer(5,DnArr); SetIndexBuffer(6,UpArr); SetIndexBuffer(7,CCI_Dot); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)); switch(TimeFrame) { case 1 : string TimeFrameStr= "M1"; break; case 5 : TimeFrameStr= "M5"; break; case 15 : TimeFrameStr= "M15"; break; case 30 : TimeFrameStr= "M30"; break; case 60 : TimeFrameStr= "H1"; break; case 240 : TimeFrameStr= "H4"; break; case 1440 : TimeFrameStr= "D1"; break; case 10080 : TimeFrameStr= "W1"; break; case 43200 : TimeFrameStr= "MN1"; break; default : TimeFrameStr= "TF0"; } string short_name; short_name="CCI Filter ("+CCIPeriod+") ["+TimeFrameStr+"] ("+UpperTriggerLevel+", "+LowerTriggerLevel+", "+CriticalLevel+")"; IndicatorShortName(short_name); SetIndexLabel(0,"CCI ("+CCIPeriod+")["+TimeFrameStr+"]"); SetIndexLabel(1,"UpTrend"); SetIndexLabel(2,"Mild UpTrend"); SetIndexLabel(3,"Mild DownTrend"); SetIndexLabel(4,"DownTrend"); SetIndexLabel(5,"CCI ("+CCIPeriod+")["+TimeFrameStr+"]Dn"); SetIndexLabel(6,"CCI ("+CCIPeriod+")["+TimeFrameStr+"]Up"); SetIndexDrawBegin(0,CCIPeriod); SetIndexDrawBegin(1,CCIPeriod); SetIndexDrawBegin(2,CCIPeriod); SetIndexDrawBegin(3,CCIPeriod); SetIndexDrawBegin(4,CCIPeriod); SetIndexDrawBegin(5,CCIPeriod); SetIndexDrawBegin(6,CCIPeriod); SetIndexDrawBegin(7,CCIPeriod); return(0); } //+------------------------------------------------------------------+ //| CCIFilter | //+------------------------------------------------------------------+ int start() { int shift,trend; datetime TimeArray[]; ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame); double CCI0, CCI1; double UpDnZero, UpDnBuffer; if (UpperTriggerLevel<0) UpperTriggerLevel=0; if (LowerTriggerLevel>0) UpperTriggerLevel=0; int limit,y=0,counted_bars=IndicatorCounted(); limit= Bars-counted_bars; limit= MathMax(limit,TimeFrame/Period()); limit= MathMin(limit,MaxBarsToCount); for(shift=0,y=0;shift<limit;shift++) { if (Time[shift]<TimeArray[y]) y++; CCI_Dot[shift]=EMPTY_VALUE; DnArr[shift]=EMPTY_VALUE; UpArr[shift]=EMPTY_VALUE; CCI[shift]=EMPTY_VALUE; CCI0=iCCI(NULL,TimeFrame,CCIPeriod,CCIPrice,y); CCI1=iCCI(NULL,TimeFrame,CCIPeriod,CCIPrice,y+1); if(Time[shift]==TimeArray[y]) {CCI_Dot[shift]=iCCI(NULL,TimeFrame,CCIPeriod,CCIPrice,y); if (ShowBARS) CCI_Dot[shift]=0;} UpDnZero=0; UpDnBuffer=1; if (!ShowBARS) {UpDnZero=EMPTY_VALUE; UpDnBuffer=CCI0; CCI[shift]=CCI0;} UpBuffer1[shift]=UpDnZero; UpBuffer2[shift]=UpDnZero; DnBuffer1[shift]=UpDnZero; DnBuffer2[shift]=UpDnZero; if (CCI0>UpperTriggerLevel) UpBuffer1[shift]=UpDnBuffer; if (CCI0>0 && CCI0<=UpperTriggerLevel) UpBuffer2[shift]=UpDnBuffer; if (CCI0<0 && CCI0>=LowerTriggerLevel) DnBuffer1[shift]=UpDnBuffer; if (CCI0<LowerTriggerLevel) DnBuffer2[shift]=UpDnBuffer; if (ZeroCrossAlerts) { if (CCI0>0 && CCI1<=0) {if(!ShowBARS) UpArr[shift]=0; if(shift==0) Alerts(ZeroBuyAlert); } if (CCI0<0 && CCI1>=0) {if(!ShowBARS) DnArr[shift]=0; if(shift==0) Alerts(ZeroSellAlert); } } if (TriggerLevelAlerts) { if (CCI0>UpperTriggerLevel && CCI1<=UpperTriggerLevel && UpperTriggerLevel>0) {if(!ShowBARS) UpArr[shift]=UpperTriggerLevel; if(shift==0) Alerts(UpperTriggerBuyAlert); } if (CCI0<UpperTriggerLevel && CCI1>=UpperTriggerLevel && UpperTriggerLevel>0) {if(!ShowBARS) DnArr[shift]=UpperTriggerLevel; if(shift==0) Alerts(UpperTriggerSellAlert); } if (CCI0>LowerTriggerLevel && CCI1<=LowerTriggerLevel && LowerTriggerLevel<0) {if(!ShowBARS) UpArr[shift]=LowerTriggerLevel; if(shift==0) Alerts(LowerTriggerBuyAlert); } if (CCI0<LowerTriggerLevel && CCI1>=LowerTriggerLevel && LowerTriggerLevel<0) {if(!ShowBARS) DnArr[shift]=LowerTriggerLevel; if(shift==0) Alerts(LowerTriggerSellAlert);} } if (CriticalLevelAlerts) { if (MathAbs(CCI0)>CriticalLevel && MathAbs(CCI1)<=CriticalLevel) {if(shift==0 && CriticalLevelAlerts) Alerts(CriticalLevelAlert);} if (MathAbs(CCI0)<CriticalLevel && MathAbs(CCI1)>=CriticalLevel) {if(shift==0) Alerts(CriticalLevelAlert);} } } return(0); } void Alerts(string AlertText) { static datetime timeprev; if(timeprev<iTime(NULL,0,0) && Alerts) { timeprev=iTime(NULL,0,0); Alert( "CCI Filter ("+CCIPeriod+") TF["+TimeFrame+"] " +UpperTriggerLevel+", "+LowerTriggerLevel+", "+CriticalLevel+"; ", AlertText, " ",Symbol()," - chart M",Period()," at ", Close[0]," - ", TimeToStr(CurTime(),TIME_SECONDS)); PlaySound(AlertsSoundFile); } }
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Series array that contains close prices for each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Implements a curve of type DRAW_HISTOGRAM
Implements a curve of type DRAW_NONE
Implements a curve of type DRAW_ARROW
Indicators Used:
Commodity channel index
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen
It plays sound alerts