Coppock_v1





//+------------------------------------------------------------------+
//|                                                     Coppock .mq4 |
//|                                    Copyright © 2007, Robert Hill |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2007, Robert Hill"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 1
#property  indicator_color1  Red
//---- indicator parameters
extern string  strROC="ROC Period for lookback";
extern int     RPeriod1=80;
extern string  strType1="Moving Average Types" ;
extern string  str10="0 = SMA, 1 = EMA";
extern string  str11="2 = SMMA, 3 = LWMA";
extern int     RMAMode1=0;
extern string  sep0="----------------------------------";
extern int     RPeriod2=10;
extern string  strType2="Moving Average Types" ;
extern string  str20="0 = SMA, 1 = EMA";
extern string  str21="2 = SMMA, 3 = LWMA";
extern int     RMAMode2=0;
extern string  sep1="----------------------------------";
extern string  strMA="MA input parameters";
extern int     MAPeriod=20;
extern string  strType="Moving Average Types" ;
extern string  strm0="0 = SMA, 1 = EMA";
extern string  strm1="2 = SMMA, 3 = LWMA";
extern int     MAType=0;
extern string  sep2="----------------------------------";
extern bool    UsePercent=false;
//---- indicator buffers
double     Coppock[];
double     RateOfChange1[];
double     RateOfChange2[];
double     RateOfChange3[];
//---- variables
int    MAMode;
string strMAType;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   IndicatorBuffers(4);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexDrawBegin(0,MAPeriod);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
//---- indicator buffers mapping
   SetIndexBuffer(0,Coppock);
   SetIndexBuffer(1,RateOfChange1);
   SetIndexBuffer(2,RateOfChange2);
   SetIndexBuffer(3,RateOfChange3);
   switch(MAType)
     {
      case 1: strMAType="EMA"; MAMode=MODE_EMA; break;
      case 2: strMAType="SMMA"; MAMode=MODE_SMMA; break;
      case 3: strMAType="LWMA"; MAMode=MODE_LWMA; break;
      default: strMAType="SMA"; MAMode=MODE_SMA; break;
     }
   IndicatorShortName( "Coppock (" + RPeriod1 + "," + RPeriod2 + ") " + strMAType+ " (" +MAPeriod + ") ");
//---- name for DataWindow and indicator subwindow label
   SetIndexLabel(0,"Coppock");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Coppock                                                          |
//+------------------------------------------------------------------+
int start()
  {
   int limit, i;
   double MA_Cur1, MA_Prev1;
   double MA_Cur2, MA_Prev2;
   double ROC1, ROC2;
   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;
//---- ROC calculations
   for( i=0; i<limit; i++)
     {
      MA_Cur1=iMA(NULL,0,RPeriod1,0,RMAMode1, PRICE_CLOSE,i);
      MA_Prev1=iMA(NULL,0,RPeriod1,0,RMAMode1, PRICE_CLOSE,i+RPeriod1);
      MA_Cur2=iMA(NULL,0,RPeriod2,0,RMAMode2, PRICE_CLOSE,i);
      MA_Prev2=iMA(NULL,0,RPeriod2,0,RMAMode2, PRICE_CLOSE,i+RPeriod2);
      ROC1=MA_Cur1-MA_Prev1;
      ROC2=MA_Cur2-MA_Prev2;
      if (UsePercent)
        {
         RateOfChange1[i]=NormalizeDouble(100 * ROC1/MA_Prev1, 3);
         RateOfChange2[i]=NormalizeDouble(100 * ROC2/MA_Prev2, 3);
        }
      else
        {
         RateOfChange1[i]=NormalizeDouble(ROC1/Point,1);
         RateOfChange2[i]=NormalizeDouble(ROC2/Point,1);
        }
      RateOfChange3[i]=RateOfChange1[i] + RateOfChange2[i];
     }
   for( i=0; i<limit; i++)
     {
      Coppock[i]=iMAOnArray(RateOfChange3,0,MAPeriod,0,MAMode,i);
     }
//---- done
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:



Indicator Curves created:

Implements a curve of type DRAW_HISTOGRAM


Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:

Other Features: