//+------------------------------------------------------------------+ //| Coppock.mq4 | //| Based on Coppock.mq4 by Robert Hill | //| Copyright © 2010, EarnForex.com | //| http://www.earnforex.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, EarnForex.com" #property link "http://www.earnforex.com" /* Classical Coppock indicator. Should be applied on monthly timeframe. Periods shouldn't be changed. Change timeframe and parameters for experimental Coppock usage. */ //---- indicator settings #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Red //---- indicator parameters extern int ROC1Period = 14; extern int ROC2Period = 11; extern int MAPeriod = 10; extern string strType = "Moving Average Types:"; extern string strm0 = "0 = SMA, 1 = EMA"; extern string strm1 = "2 = SMMA, 3 = LWMA"; extern int MAType = 3; //---- indicator buffers double Coppock[]; double ROCSum[]; //---- variables int DrawBegin; string strMAType; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- drawing settings IndicatorBuffers(2); SetIndexStyle(0,DRAW_HISTOGRAM); //--- The longest period DrawBegin=MathMax(ROC1Period,ROC2Period)+MAPeriod; SetIndexDrawBegin(0,DrawBegin); IndicatorDigits(Digits); //---- indicator buffers mapping SetIndexBuffer(0,Coppock); SetIndexBuffer(1,ROCSum); //--- SetIndexEmptyValue(0, 0.0); SetIndexEmptyValue(1, 0.0); //--- switch(MAType) { case 1: strMAType="EMA"; break; case 2: strMAType="SMMA"; break; case 3: strMAType="LWMA"; break; default: strMAType="SMA"; break; } IndicatorShortName("Coppock("+ROC1Period+", "+ROC2Period+") "+strMAType+"("+MAPeriod+")"); //--- SetIndexLabel(0,"Coppock"); return(0); } //+------------------------------------------------------------------+ //| Coppock | //+------------------------------------------------------------------+ int start() { int limit,i; 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; if(limit-Bars