//+------------------------------------------------------------------+ //| CCIFilter vX.mq4 | //| | //| mod by Raff, email & sound by cja | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Forex-TSD.com " #property link "http://www.forex-tsd.com/" #property indicator_separate_window #property indicator_buffers 7 #property indicator_color1 Gray #property indicator_color2 Green #property indicator_color3 Aqua #property indicator_color4 Gold #property indicator_color5 Tomato #property indicator_color6 Red #property indicator_color7 Lime #property indicator_width1 3 #property indicator_width2 3 #property indicator_width3 3 #property indicator_width4 3 #property indicator_width5 3 #property indicator_width6 2 #property indicator_width7 2 //---- input parameters extern string IIIIIIIIIIIII="<<< CCI Settings >>>>>>>>>>>"; extern int CCIPeriod = 14; extern int CCIPrice = 0; extern string IIIIIIIIIIIIII="<<< Alert Settings >>>>>>>>>>>"; extern bool SoundAlert_ON = false; extern string SoundFile ="alert2.wav"; extern bool SendEmail = false; extern bool Pop_UP_Alert = false; extern string IIIIIIIIIIIIII....Arrow_Numbers="<<< 233/234-241/242-225/226 >>>>>>>>>>>"; extern string IIIIIIIIIIIIII....Dot_Numbers="<<< 159/158/108/174 >>>>>>>>>>>"; extern int SignalUP_Arrow = 233; extern int SignalDN_Arrow = 234; extern int UpperTriggerLevel = 100; extern int LowerTriggerLevel = -100; extern int CriticalLevel_UP = 250; extern int CriticalLevel_DN = -250; extern bool HISTOGRAM = false; extern bool Alerts = true; extern string CriticalLevelUP = "Critical Level UPPER"; extern string CriticalLevelDN = "Critical Level LOWER"; extern string ZeroBuyAlert = "Zero Cross"; extern string ZeroSellAlert = "Zero Cross"; extern string UpperTriggerBuyAlert = "Upper Trigger Cross"; extern string UpperTriggerSellAlert = "Upper Trigger Cross"; extern string LowerTriggerBuyAlert = "Lower Trigger Cross"; extern string LowerTriggerSellAlert = "Lower Trigger Cross"; //---- indicator buffers double CCI[]; double UpBuffer1[]; double UpBuffer2[]; double DnBuffer1[]; double DnBuffer2[]; double DnArr[]; double UpArr[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(7); int DrawType = DRAW_LINE; if (HISTOGRAM) DrawType = DRAW_HISTOGRAM; SetIndexStyle(0,DRAW_LINE,STYLE_SOLID); SetIndexStyle(1,DrawType,STYLE_SOLID); SetIndexStyle(2,DrawType,STYLE_SOLID); SetIndexStyle(3,DrawType,STYLE_SOLID); SetIndexStyle(4,DrawType,STYLE_SOLID); SetIndexStyle(5,DRAW_ARROW); SetIndexArrow(5,SignalDN_Arrow); SetIndexBuffer(5,DnArr); SetIndexStyle(6,DRAW_ARROW); SetIndexArrow(6,SignalUP_Arrow); SetIndexBuffer(6,UpArr); SetIndexBuffer(0,CCI); SetIndexBuffer(1,UpBuffer1); SetIndexBuffer(2,UpBuffer2); SetIndexBuffer(3,DnBuffer1); SetIndexBuffer(4,DnBuffer2); SetIndexBuffer(5,DnArr); SetIndexBuffer(6,UpArr); SetLevelValue(0,ZeroBuyAlert ); SetLevelValue(1,UpperTriggerLevel ); SetLevelValue(2,CriticalLevel_UP ); SetLevelValue(3,CriticalLevel_DN); SetLevelValue(4,LowerTriggerLevel); SetLevelStyle(STYLE_DOT,1,DarkSlateGray); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)-2); string ALERT1="",ALERT2="",ALERT3=""; if(SoundAlert_ON==true)ALERT1="ON"; if(SoundAlert_ON==false)ALERT1="OFF"; if(SendEmail==true)ALERT2="ON"; if(SendEmail==false)ALERT2="OFF"; if(Pop_UP_Alert==true)ALERT3="ON"; if(Pop_UP_Alert==false)ALERT3="OFF"; string short_name; short_name="CCI [ Pop_UP "+ALERT3+" ] [ Sound "+ALERT1+" ] [ Email "+ALERT2+" ]"; IndicatorShortName(short_name); SetIndexLabel(0,"CCI"); SetIndexLabel(1,"UpTrend"); SetIndexLabel(2,"Mild UpTrend"); SetIndexLabel(3,"Mild DownTrend"); SetIndexLabel(4,"DownTrend"); SetIndexDrawBegin(0,CCIPeriod); SetIndexDrawBegin(1,CCIPeriod); SetIndexDrawBegin(2,CCIPeriod); SetIndexDrawBegin(3,CCIPeriod); SetIndexDrawBegin(4,CCIPeriod); return(0); } //+------------------------------------------------------------------+ //| CCIFilter | //+------------------------------------------------------------------+ int start() { int shift,trend; double CCI0, CCI1; double UpDnZero, UpDnBuffer; if (UpperTriggerLevel<0) UpperTriggerLevel=0; if (LowerTriggerLevel>0) UpperTriggerLevel=0; for(shift=Bars-CCIPeriod-1;shift>=0;shift--) { DnArr[shift]=EMPTY_VALUE; UpArr[shift]=EMPTY_VALUE; CCI[shift]=EMPTY_VALUE; CCI0=iCCI(NULL,0,CCIPeriod,CCIPrice,shift); CCI1=iCCI(NULL,0,CCIPeriod,CCIPrice,shift+1); UpDnZero=0; UpDnBuffer=1; if (!HISTOGRAM) {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 (CCI0>0 && CCI1<=0) {if(!HISTOGRAM) UpArr[shift]=0; if(shift==0) Alerts(ZeroBuyAlert);} if (CCI0<0 && CCI1>=0) {if(!HISTOGRAM) DnArr[shift]=0; if(shift==0) Alerts(ZeroSellAlert);} if (CCI0>UpperTriggerLevel && CCI1<=UpperTriggerLevel && UpperTriggerLevel>0) {if(!HISTOGRAM) UpArr[shift]=UpperTriggerLevel; if(shift==0) Alerts(UpperTriggerBuyAlert);} if (CCI0<UpperTriggerLevel && CCI1>=UpperTriggerLevel && UpperTriggerLevel>0) {if(!HISTOGRAM) DnArr[shift]=UpperTriggerLevel; if(shift==0) Alerts(UpperTriggerSellAlert);} if (CCI0>LowerTriggerLevel && CCI1<=LowerTriggerLevel && LowerTriggerLevel<0) {if(!HISTOGRAM) UpArr[shift]=LowerTriggerLevel; if(shift==0) Alerts(LowerTriggerBuyAlert);} if (CCI0<LowerTriggerLevel && CCI1>=LowerTriggerLevel && LowerTriggerLevel<0) {if(!HISTOGRAM) DnArr[shift]=LowerTriggerLevel; if(shift==0) Alerts(LowerTriggerSellAlert);} if (MathAbs(CCI0)>CriticalLevel_UP && MathAbs(CCI1)<=CriticalLevel_UP) {if(shift==0) Alerts(CriticalLevelUP);} if (MathAbs(CCI0)<CriticalLevel_DN && MathAbs(CCI1)>=CriticalLevel_DN) {if(shift==0) Alerts(CriticalLevelDN);} } return(0); } void Alerts(string AlertText) { static datetime timeprev; if(timeprev<iTime(NULL,0,0) && Alerts) {timeprev=iTime(NULL,0,0);if (Pop_UP_Alert==true)Alert(AlertText," ",Symbol()," - ",Period()," at ", Close[0]," - ", TimeToStr(TimeLocal(),TIME_SECONDS)); if (SendEmail==true)SendMail("CCI Alert",AlertText+"\n "+Symbol()+" M"+Period()+""+DoubleToStr(Bid,Digits)+"\n" +"Time = "+TimeToStr(TimeLocal(),TIME_SECONDS)+"\n"+"Date = "+TimeToStr(TimeLocal(),TIME_DATE)+""); if(SoundAlert_ON==true)PlaySound(SoundFile);} }
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Implements a curve of type DrawType
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 sends emails
It plays sound alerts