//+------------------------------------------------------------------+
//|                                                 HHLLBarColor.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      ""

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_color3 Green
#property indicator_color4 Red
#property indicator_color5 White
#property indicator_color6 White
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 3
#property indicator_width6 3
//#property indicator_color4 CLR_NONE
//#property indicator_color5 CLR_NONE
//#property indicator_color6 CLR_NONE
//---- input parameters
extern color     HH_Color=Green;
extern color     LL_Color=Red;
extern color     Other_Color=White;
//---- buffers
double HHBar[];
double HHWick[];
double LLBar[];
double LLWick[];
double OtherBar[];
double OtherWick[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM,0,1,HH_Color);
   SetIndexBuffer(0,HHBar);
   SetIndexStyle(1,DRAW_HISTOGRAM,0,1,LL_Color);
   SetIndexBuffer(1,LLBar);
   SetIndexStyle(2,DRAW_HISTOGRAM,0,1,HH_Color);
   SetIndexBuffer(2,HHWick);
    SetIndexStyle(3,DRAW_HISTOGRAM,0,1,HH_Color);
   SetIndexBuffer(3,LLWick);
    SetIndexStyle(4,DRAW_HISTOGRAM,0,1,LL_Color);
   SetIndexBuffer(4,OtherBar);
    SetIndexStyle(5,DRAW_HISTOGRAM,0,1,Other_Color);
   SetIndexBuffer(5,OtherWick);
   SetIndexDrawBegin(0,5);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   for(int i =Bars-1;i>=1;i--)
      {
      if(High[i] > High[i+1] && Low[i]>Low[i+1]){
         if(Open[i] < Close[i]){
            HHBar[i]=High[i];
            HHWick[i] = Low[i];
            LLBar[i] = HHWick[i];
            LLWick[i] = LLBar[i];
            }
         else {
          HHBar[i]=High[i];
          HHWick[i] = Low[i];
          LLBar[i] = HHWick[i];
          LLWick[i] = LLBar[i];
            }
      }
     if(High[i] < High[i+1] && Low[i]<Low[i+1])
         {
         if(Open[i] < Close[i])
            {
            LLBar[i]=Low[i];
            LLWick[i] = High[i];
            HHBar[i] = LLWick[i];
            HHWick[i] = LLWick[i];
            }
           else
            {
           LLBar[i]=High[i];
           LLWick[i] = Low[i];
           HHBar[i] = LLWick[i];
           HHWick[i] = LLWick[i];
            }
          }
         if((High[i] > High[i+1] && Low[i]<Low[i+1]) || (High[i]<High[i+1] && Low[i]>Low[i+1])|| (Low[i] == Low[i+1]) || (High[i] == High[i+1])){
         if(Open[i] < Close[i])
            {
            OtherBar[i] = High[i];
            OtherWick[i] = Low[i];
            HHBar[i]=OtherWick[i];
            HHWick[i]=OtherWick[i];
            }
         else
            {
            OtherBar[i] = Low[i];
            OtherWick[i] = High[i];
            HHBar[i]=OtherWick[i];
            HHWick[i]=OtherWick[i];
            }
         }
      }
//----
   return(0);
  }
//+------------------------------------------------------------------+