//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 1
#property  indicator_color1  LimeGreen
#property  indicator_width1  2

//---- indicator buffers
double	SumOfPriceRatio[];
double Tick;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
	string	name;
	SetIndexStyle(0,DRAW_HISTOGRAM);
	SetIndexBuffer(0,SumOfPriceRatio);
	SetIndexLabel(0,"SumOfPriceRatio");
 
	Tick = MarketInfo(Symbol(), MODE_TICKSIZE);	   
   if (Digits % 2 == 1) {Tick *= 10;}           

	IndicatorDigits(0);
	IndicatorShortName(name + " SumOfPriceRatio ");
	 
	return(0);
}
int deinit() {
	 
	return(0);
}
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int counted_bars;

int start() {

	counted_bars=IndicatorCounted();
	if(counted_bars>0) counted_bars--;
   int limit = MathMin(5000, Bars-counted_bars);
   //Print (" limit ", limit);
	for (int i=limit; i>=0; i--) 
	{	 
	    double val = GetSumOfPriceRatio(i);	     
       SumOfPriceRatio[i] =val;
	}

	return(0);
}

double GetSumOfPriceRatio(int shift)
{ 
  
   double sumTotal = 0;
   int start = iBarShift(Symbol(),1,Time[shift]);
   int end = iBarShift(Symbol(),1,Time[shift-1]);
   //if (start - end < 1300) Print (" shift ", shift, " start ",start , " end ", end, " bars ", start - end, " Time[shift] ", TimeToStr(Time[shift]));   
   
   double sumPos = MarketInfo(Symbol(), MODE_TICKSIZE);
   double sumNeg =  MarketInfo(Symbol(), MODE_TICKSIZE);
   
	for (int i=iBarShift(Symbol(),1,Time[shift]); i>iBarShift(Symbol(),1,Time[shift-1]); i--) 
	{	 	
	     double pos = 0;
	     double neg = 0;
       if (iOpen(Symbol(),1,i) >= iClose(Symbol(),1,i))
       {
         double topWick = iHigh(Symbol(),1,i) - iOpen(Symbol(),1,i);
         double bottomWick = iClose(Symbol(),1,i) - iLow(Symbol(),1,i);
         neg+= (topWick + bottomWick);
         pos+= (topWick + bottomWick);
         neg+= iOpen(Symbol(),1,i) - iClose(Symbol(),1,i);
       }
       else
       {
         topWick = iHigh(Symbol(),1,i) - iClose(Symbol(),1,i);
         bottomWick = iOpen(Symbol(),1,i) - iLow(Symbol(),1,i);
         neg+= (topWick + bottomWick);
         pos+= (topWick + bottomWick);      
         pos+= iClose(Symbol(),1,i) - iOpen(Symbol(),1,i);
       }
       //if (iClose(Symbol(),1,i+1) - iOpen(Symbol(),1,i))
      // {
      // }
      // neg+=MathAbs(iClose(Symbol(),1,i+1) - iOpen(Symbol(),1,i));
       
       sumPos+=pos;
       sumNeg+=neg;
	}
    if (sumNeg ==0 || sumPos == 0) return (0);
   if (sumPos > sumNeg) return ((sumPos / sumNeg)-1);
   else return ((-1 * (sumNeg / sumPos)) + 1);
}
    