//+------------------------------------------------------------------+
//|                                              SynergyBullBear.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, ShamsSoft"
#property link      "http://www.6thorigin.com"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Lime
#property indicator_width1 3
#property indicator_width2 3


double Bear[];
double Bull[];
double bear_bar[];
double bull_bar[];
int counted_bars = 0;

int init()
{
   IndicatorShortName("Synergy Bull & Bear ");
   SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID);
   SetIndexBuffer(0, Bear);   
   SetIndexLabel(0, "Synergy is Bear");
   SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID);
   SetIndexBuffer(1, Bull);   
   SetIndexLabel(1, "Synergy is Bull");
         
   SetIndexDrawBegin(0, 10);
   SetIndexDrawBegin(1, 10);
   
   ArrayInitialize(bear_bar, 0.0);
   ArrayInitialize(bull_bar, 0.0);
   
   return (0);
}

int deinit()
{
   return (0);
}

int start()
{
   double bar_open;
   double bar_high;
   double bar_low;
   double bar_close;
   
   if (Bars == 10) return (0);
   
   if(ArraySize(bear_bar) < Bars)
   {
     int count1 = ArrayResize(bear_bar, Bars);
     int count2 = ArrayResize(bull_bar, Bars);
   }

   counted_bars = IndicatorCounted();
   if (counted_bars < 0) return (-1);
   if (counted_bars > 0) counted_bars--;
   
   for (int i = Bars - counted_bars - 1; i >= 0; i--)
   {
      bar_close = NormalizeDouble((Open[i] + High[i] + Low[i] + Close[i]) / 4.0, Digits);
      bar_close = (bar_close + Close[i]) / 2.0;
      bar_open = (bear_bar[i + 1] + (bull_bar[i + 1])) / 2.0;      
      
      if (bar_open < bar_close)
      {         
         Bear[i] = 0;
         Bull[i] = 1;
      } 
      else
      {         
         Bear[i] = 1;
         Bull[i] = 0;
      }
      bear_bar[i] = bar_open;
      bull_bar[i] = bar_close;
   }
   return (0);
}