//+------------------------------------------------------------------+
//|                                                ShadowCandles.mq4 |
//|                            Copyright © 2009, ПавелИванович (api) |
//|                                              p231970@hotmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, ПавелИванович (api)"
#property link      "p231970@hotmail.com"

#property indicator_chart_window
//---- input parameters
extern string    strSource = "";
extern int       iPeriod=240;
extern int       iNumCandles=100;
extern color     BullCandle=LightSkyBlue;
extern color     BearCandle=SandyBrown;
extern color     BullShadow=Blue;
extern color     BearShadow=Orange;

double data[][6];

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
   for(int i=0;i<iNumCandles;i++)
   {
      ObjectDelete("ShadowCandle"+i);
      ObjectDelete("ShadowCandleShadow"+i);
   }
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   if(iPeriod<=Period()) return(0);
   int res;
   if(StringLen(strSource)==0)
   {
      res = ArrayCopyRates(data,NULL,iPeriod);
   }else
   {
      res = ArrayCopyRates(data,strSource,iPeriod);
   }
   if(res>0)
   {
      for(int i=0;i<iNumCandles;i++)
      {
         if(i>0) data[i][5] = data[i-1][0]-60*Period();
         else data[0][5]= data[0][0]+60*(iPeriod-Period());
         DrawCandle(i);
      }
   }
}

void DrawCandle(int bar)
{
   string name1 = "ShadowCandleShadow"+bar;
   string name2 = "ShadowCandle"+bar;
   if(!ObjectCreate(name1,OBJ_RECTANGLE,0,data[bar][0],data[bar][2],data[bar][5],data[bar][3]))
   {
      ObjectSet(name1,OBJPROP_TIME1,data[bar][0]);
      ObjectSet(name1,OBJPROP_TIME2,data[bar][5]);
      ObjectSet(name1,OBJPROP_PRICE1,data[bar][2]);
      ObjectSet(name1,OBJPROP_PRICE2,data[bar][3]);
   }
   ObjectSet(name1,OBJPROP_BACK,false);
   if(!ObjectCreate(name2,OBJ_RECTANGLE,0,data[bar][0],data[bar][1],data[bar][5],data[bar][4]))
   {
      ObjectSet(name2,OBJPROP_TIME1,data[bar][0]);
      ObjectSet(name2,OBJPROP_TIME2,data[bar][5]);
      ObjectSet(name2,OBJPROP_PRICE1,data[bar][1]);
      ObjectSet(name2,OBJPROP_PRICE2,data[bar][4]);
   }
   ObjectSet(name2,OBJPROP_BACK,true);
   if(data[bar][1]<data[bar][4])
   {
      ObjectSet(name1,OBJPROP_COLOR, BullShadow);
      ObjectSet(name2,OBJPROP_COLOR, BullCandle);
   }else
   {
      ObjectSet(name1,OBJPROP_COLOR, BearShadow);
      ObjectSet(name2,OBJPROP_COLOR, BearCandle);
   }
}
//+------------------------------------------------------------------+