Navigation´╝ÜHome > Content >

CCI_arrow_alerts_1.02_nmc.mq4

Time: 2015-06-21 | Download file:CCI_arrow_alerts_1.02_nmc.mq4

//+------------------------------------------------------------------+
//|                                                   ma crosses.mq4 |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1  Blue
#property indicator_color2  Red

//
//
//
//
//

extern string TimeFrame        = "Current time frame";
extern int    EntryCCI_period  = 210;

extern double alertLevelUp     = 100.0;
extern double alertLevelDn     = -100.0;

extern string note             = "turn on Alert = true; turn off = false";
extern bool   alertsOn         = true;
extern bool   alertsOnCurrent  = true;
extern bool   alertsMessage    = true;
extern bool   alertsSound      = true;
extern bool   alertsEmail      = false;
extern bool   alertsNotify     = false;
extern string soundfile        = "alert2.wav";

extern string note7            = "Arrow Type";
extern string note8            = "0=default,1=Thick,2=Thin,3=Hollow";
extern string note9            = "4=Round,5=Fractal,6=Diagonal Thin";
extern string note10           = "7=Diagonal Thick,8=Diagonal Hollow";
extern string note11           = "9=Thumb,10=Finger";
extern int    ArrowType        = 1;
extern int    arrowthickness   = 1;
extern bool   ArrowsOnFirstBar = true;

//
//
//
//
//

double CrossUp[];
double CrossDn[];
double trend[];

string indicatorFileName;
int    timeFrame;
bool   returnBars;
bool   calculateValue;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(3);

   if(ArrowType==0) 
     {
      SetIndexBuffer(0,CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,119);
      SetIndexBuffer(1,CrossDn);  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,119);
     }
   if(ArrowType==1) 
     {
      SetIndexBuffer(0,CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,233);
      SetIndexBuffer(1,CrossDn);  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,234);
     }
   else if(ArrowType==2) 
     {
      SetIndexBuffer(0,CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,225);
      SetIndexBuffer(1,CrossDn);  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,226);
     }
   else if(ArrowType==3) 
     {
      SetIndexBuffer(0,CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,241);
      SetIndexBuffer(1,CrossDn);  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,242);
     }
   else if(ArrowType==4) 
     {
      SetIndexBuffer(0,CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,221);
      SetIndexBuffer(1,CrossDn);  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,222);
     }
   else if(ArrowType==5) 
     {
      SetIndexBuffer(0,CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,217);
      SetIndexBuffer(1,CrossDn);  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,218);
     }
   else if(ArrowType==6) 
     {
      SetIndexBuffer(0,CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,228);
      SetIndexBuffer(1,CrossDn);  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,230);
     }
   else if(ArrowType==7) 
     {
      SetIndexBuffer(0,CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,236);
      SetIndexBuffer(1,CrossDn);  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,238);
     }
   else if(ArrowType==8) 
     {
      SetIndexBuffer(0,CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,246);
      SetIndexBuffer(1,CrossDn);  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,248);
     }
   else if(ArrowType==9) 
     {
      SetIndexBuffer(0,CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,67);
      SetIndexBuffer(1,CrossDn);  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,68);
     }
   else if(ArrowType==10) 
     {
      SetIndexBuffer(0,CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,71);
      SetIndexBuffer(1,CrossDn);  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,72);
     }

   SetIndexBuffer(2,trend);

//
//
//
//
//

   indicatorFileName = WindowExpertName();
   calculateValue    = (TimeFrame=="calculateValue"); if(calculateValue) return(0);
   returnBars        = (TimeFrame=="returnBars");     if(returnBars)     return(0);
   timeFrame         = stringToTimeFrame(TimeFrame);

//
//
//
//
//

   IndicatorShortName(timeFrameToString(timeFrame)+" CCI arrows ");
   return(0);
  }
int deinit() {  return(0); }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//

int start() 
  {
   int counted_bars=IndicatorCounted();
   int i,limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=MathMin(Bars-counted_bars,Bars-1);
   if(returnBars) { CrossUp[0]=limit+1; return(0); }

//
//
//
//
//

   if(calculateValue || timeFrame==Period())
     {
      for(i=limit; i>=0; i--)
      {
         double cci = iCCI(NULL,0,EntryCCI_period,PRICE_TYPICAL,i);
         trend[i]   = trend[i+1];
           if (cci>alertLevelUp) trend[i] = 1;
           if (cci=0; i--)
     {
      int y = iBarShift(NULL,timeFrame,Time[i]);
      int x = iBarShift(NULL,timeFrame,Time[i+shift]);
      trend[i]=iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",EntryCCI_period,2,y);
      if(x!=y)
        {
         CrossUp[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",EntryCCI_period,0,y);
         CrossDn[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",EntryCCI_period,1,y);
        }
     }
   manageAlerts();
   return(0);
  }

//+-------------------------------------------------------------------
//|                                                                  
//+-------------------------------------------------------------------
//
//
//
//
//

string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
int    iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};
//
//
//
//
//

int stringToTimeFrame(string tfs)
{
   tfs=stringUpperCase(tfs);
   for(int i=ArraySize(iTfTable)-1; i>=0; i--)
      if(tfs==sTfTable[i] || tfs==""+iTfTable[i]) return(MathMax(iTfTable[i],Period()));
return(Period());
}

//
//
//
//
//

string timeFrameToString(int tf)
{
   for(int i=ArraySize(iTfTable)-1; i>=0; i--)
      if(tf==iTfTable[i]) return(sTfTable[i]);
return("");
}
  
//
//
//
//
//

string stringUpperCase(string str)
{
   string   s=str;

   for(int length=StringLen(str)-1; length>=0; length--)
   {
      int tchar=StringGetChar(s,length);
      if((tchar>96 && tchar<123) || (tchar>223 && tchar<256))
         s=StringSetChar(s,length,tchar-32);
      else if(tchar>-33 && tchar<0)
         s=StringSetChar(s,length,tchar+224);
   }
return(s);
}
  
//
//
//
//
//

void manageAlerts()
{
   if(!calculateValue && alertsOn)
   {
      if(alertsOnCurrent)
         int whichBar = 0;
      else     whichBar = 1; whichBar = iBarShift(NULL,0,iTime(NULL,timeFrame,whichBar));
      if(trend[whichBar]!=trend[whichBar+1])
      {
         if(trend[whichBar] == 1) doAlert(whichBar,"crossing "+DoubleToStr(alertLevelUp,2)+" level UP");
         if(trend[whichBar] ==-1) doAlert(whichBar,"crossing "+DoubleToStr(alertLevelDn,2)+" level DOWN");
      }
    }
}

//
//
//
//
//

void doAlert(int forBar,string doWhat)
  {
   static string   previousAlert="nothing";
   static datetime previousTime;
   string message;

   if(previousAlert!=doWhat || previousTime!=Time[forBar]) 
     {
      previousAlert  = doWhat;
      previousTime   = Time[forBar];

      //
      //
      //
      //
      //

      message=StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," - ",timeFrameToString(timeFrame)+" CCI ",doWhat);
      if(alertsMessage) Alert(message);
      if(alertsNotify) SendNotification(message);
      if(alertsEmail) SendMail(StringConcatenate(Symbol()," CCI "),message);
      if(alertsSound) PlaySound("alert2.wav");
     }
  }
//+------------------------------------------------------------------+

Recommend