StochCross_CCI





//+----------------------------------------------------------------------------------+
//|                                   Stochastic CCI filtered crossed over indicator |
//+----------------------------------------------------------------------------------+
//|                                         Stochastic CCI filtered crossed over.mq4 |
//|                                                     Copyright © 2008, Melvin Tan |
//|                                                                                  |
//+----------------------------------------------------------------------------------+

#property copyright "Melvin Tan"
#property link      "none at the moment"

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

extern string note1 = "Stochastic settings";
extern int    KPeriod1     =  5;
extern int    DPeriod1     =  3;
extern int    Slowing1     =  3;
extern string note2 = "0=sma, 1=ema, 2=smma, 3=lwma";
extern int    MAMethod1    =   1;
extern string note3 = "0=high/low, 1=close/close";
extern int    PriceField1  =   0;
extern int    TrendCCI_Period = 50;
extern int    EntryCCI_Period = 14;
extern bool   AlertOn = false;

double CrossUp[];
double CrossDown[];

string AlertPrefix;
string GetTimeFrameStr() {
   switch(Period())
   {
      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=Period();
   } 
   return (TimeFrameStr);
   }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
      SetIndexStyle(0,DRAW_ARROW);
      SetIndexArrow(0, 233);
      SetIndexStyle(1,DRAW_ARROW);
      SetIndexArrow(1, 234);
      SetIndexBuffer(0, CrossUp);
      SetIndexBuffer(1, CrossDown);

      SetIndexEmptyValue(0,EMPTY_VALUE);
      SetIndexEmptyValue(1,EMPTY_VALUE);
   
   
   AlertPrefix=Symbol()+" ("+GetTimeFrameStr()+"):  ";
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
bool NewBar()
{
   static datetime lastbar;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
}   
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
   int limit, i, counter;
   double stochastic1now, stochastic2now, stochastic1previous, stochastic2previous, stochastic1after, stochastic2after;
   double Range, AvgRange;
   double TrendCCI, EntryCCInow, EntryCCIprevious;
   bool isbuy, issell;
   int counted_bars=IndicatorCounted();
//---- check for possible errors
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
   
   for(i = 0; i <= limit; i++) {
   
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++)
      {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
      }
      Range=AvgRange/10;      
      
      stochastic1now = iStochastic(NULL,0,KPeriod1,DPeriod1,Slowing1,MAMethod1,PriceField1,0,i);
      stochastic1previous = iStochastic(NULL,0,KPeriod1,DPeriod1,Slowing1,MAMethod1,PriceField1,0,i+1);
      stochastic2now = iStochastic(NULL,0,KPeriod1,DPeriod1,Slowing1,MAMethod1,PriceField1,1,i);
      stochastic2previous = iStochastic(NULL,0,KPeriod1,DPeriod1,Slowing1,MAMethod1,PriceField1,1,i+1);
      TrendCCI = iCCI(NULL, 0, TrendCCI_Period, PRICE_TYPICAL, i);
      EntryCCInow = iCCI(NULL, 0, EntryCCI_Period, PRICE_TYPICAL, i);
      EntryCCIprevious = iCCI(NULL, 0, EntryCCI_Period, PRICE_TYPICAL, i+1);
                  
      if ((stochastic1now > stochastic2now) && (stochastic1previous < stochastic2previous) && (TrendCCI > 0) && (EntryCCInow > EntryCCIprevious) && (EntryCCInow > -100) && (EntryCCInow < 200))
      {
                   CrossUp[i] = Low[i] - Range*1.5;
                   if (AlertOn && NewBar()) {
                      Alert(AlertPrefix+"Stoch ("+KPeriod1+","+DPeriod1+","+Slowing1+") %K crosses UP %D\nBUY signal @ Ask = ",Ask,"; Bid = ",Bid,"\nDate & Time = ",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()));
                   }   
      }
      else if ((stochastic1now < stochastic2now) && (stochastic1previous > stochastic2previous) && (TrendCCI < 0) && (EntryCCInow < EntryCCIprevious) && (EntryCCInow < 100) && (EntryCCInow > -200))
      {
                 CrossDown[i] = High[i] + Range*1.5;
                   if (AlertOn && NewBar()){
                      Alert(AlertPrefix+"Stoch ("+KPeriod1+","+DPeriod1+","+Slowing1+") %K crosses DOWN %D\nSELL signal @ Ask = ",Ask,"; Bid = ",Bid,"\nDate & Time = ",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()));
                   }
      }
      else 
      {
      CrossUp[i] = EMPTY_VALUE;
      CrossDown[i] = EMPTY_VALUE;
      }

   }
   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


Indicator Curves created:

Implements a curve of type DRAW_ARROW


Indicators Used:

Stochastic oscillator
Commodity channel index


Custom Indicators Used:

Order Management characteristics:

Other Features:

It issuies visual alerts to the screen