//+------------------------------------------------------------------+
//|                                              Candle strength.mq4 |
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_minimum -60
#property indicator_maximum 60
#property indicator_level1 50
#property indicator_level2 0
#property indicator_level3 -50

#property indicator_buffers 2
#property indicator_color1  Green
#property indicator_width1  3
#property indicator_color2  Red
#property indicator_width2  3

#include <hanover --- function header (np).mqh>

extern int      LookbackBars        = 500;
extern string   RefreshPeriod       = "T";

double     ind_buffer1[];
double     ind_buffer2[];
int        ExtCountedBars=0;
datetime   prev_time;
int        RefreshEveryXMins;
string     IndiName;

//+------------------------------------------------------------------+
int init()  {
//+------------------------------------------------------------------+
  SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3,Green);
  SetIndexBuffer(0,ind_buffer1);
  SetIndexEmptyValue(0,0.0);
  SetIndexDrawBegin(0,0);
  ArrayInitialize(ind_buffer1,EMPTY_VALUE);
  
  SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,3,Red);
  SetIndexBuffer(1,ind_buffer2);
  SetIndexEmptyValue(1,0.0);
  SetIndexDrawBegin(1,0);
  ArrayInitialize(ind_buffer2,EMPTY_VALUE);

  IndiName = "Candle strength";
  IndicatorShortName(IndiName);

  RefreshEveryXMins = StrToTF(RefreshPeriod);

  del_obj();
  plot_obj();    

  return(0);
}

//+------------------------------------------------------------------+
int deinit()  {
//+------------------------------------------------------------------+
  del_obj();
  return(0);
}

//+------------------------------------------------------------------+
int start()  {
//+------------------------------------------------------------------+
  if (RefreshEveryXMins < 0)
    return(0);
  if (RefreshEveryXMins == 0) {
    del_obj();
    plot_obj();    
  }
  else {
    if(prev_time != iTime(Symbol(),RefreshEveryXMins,0))  {
      del_obj();
      plot_obj();
      prev_time = iTime(Symbol(),RefreshEveryXMins,0);
  } }      
  return(0);
}

//+------------------------------------------------------------------+
void del_obj()  {
//+------------------------------------------------------------------+
  int k=0;
  while (k<ObjectsTotal())   {
    string objname = ObjectName(k);
    if (StringSubstr(objname,0,StringLen(IndiName)) == IndiName)  
      ObjectDelete(objname);
    else
      k++;
  }    
  return(0);
}

//+------------------------------------------------------------------+
void plot_obj()   {
//+------------------------------------------------------------------+
  for (int i=0; i<=LookbackBars; i++) {
//    ind_buffer1[i] = EMPTY_VALUE;
//    ind_buffer2[i] = EMPTY_VALUE;
    if (High[i]==Low[i])
      double value = 0;
    else  
      value = 100*DivZero((Close[i]-Low[i]),(High[i]-Low[i]))-50;
    if (Close[i] > Open[i])   {
      ind_buffer1[i] = value;
      ind_buffer2[i] = 0;
    } else {
      ind_buffer2[i] = value;
      ind_buffer1[i] = 0;
  } } 
  return(0);
}

//+------------------------------------------------------------------+
#include <hanover --- extensible functions (np).mqh>

