//+-------------------------------------------------------------------------+
//|       2012                                               Pin_Bar_v1.mq4 |
//+-------------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1  Red
#property indicator_width1  1

extern double   Pin_High     = 10;  // верхняя тень, в процентах от общей длины свечи (не более)
extern double   Pin_body     = 30;  // длина тела свечи, в процентах от общей длины  (не более)
extern double   Pin_Low      = 60;  // нижняя тень, в процентах от общей длины свечи (не менее)
extern double   Pin_HL       = 150; // общая длина свечи, в пунктах (не менее)

extern int    Count_bars   = 500;    // глубина истории

extern  int   Gap_arrow    = 50;    // отрыв символа от бара

extern bool   Alert_ON     = 0;
extern string Alert_PinBar = "Сигнал PinBar";


extern bool     Sound_ON     = 1;
extern string   Sound_PinBar = "alert.wav";

//-----------------------------------------------------------------------------------

datetime oldTime;

double Pin_bars[];
double pin_high, pin_low, pin_body, pin_HL;
//-------------------------------------------------------------------------------------------------------------
int init()
   {
    IndicatorBuffers(1);
    SetIndexBuffer (0,Pin_bars);
    SetIndexStyle(0,DRAW_ARROW);
    SetIndexArrow(0, 170); 
    return(0);
   }
//-------------------------------------------------------------------------------------------------------------
int deinit() {return(0);}
//-------------------------------------------------------------------------------------------------------------

int start()
 {
   int i, limit, counted_bars=IndicatorCounted();

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   if (limit>Count_bars && Count_bars>0) limit=Count_bars;

   for(i=limit;i>=0;i--)

  {
   if (Time[i] != oldTime)
     {
       oldTime = Time[i];
       Pin_bars[i+1]   = EMPTY_VALUE;    
    
    pin_HL   = NormalizeDouble(High[i+1]-Low[i+1], Digits);  
    pin_HL   = pin_HL*MathPow(10,Digits); 
    
    if (Open[i+1]<= Close[i+1]) {pin_high   = NormalizeDouble(High[i+1]-Close[i+1], Digits);} 
                          else  {pin_high   = NormalizeDouble(High[i+1]-Open [i+1], Digits);}
       pin_high   = pin_high*MathPow(10,Digits);
       pin_high   = pin_high*100/pin_HL;

    if (Open[i+1]<= Close[i+1]) {pin_low   = NormalizeDouble(Open[i+1]- Low[i+1], Digits);} 
                          else  {pin_low   = NormalizeDouble(Close[i+1]-Low[i+1], Digits);}
       pin_low   = pin_low*MathPow(10,Digits);
       pin_low   = pin_low*100/pin_HL;    
   
    if (Open[i+1]<= Close[i+1]) {pin_body   = NormalizeDouble(Close[i+1]- Open[i+1], Digits);} 
                          else  {pin_body   = NormalizeDouble(Open[i+1]- Close[i+1], Digits);}
       pin_body   = pin_body*MathPow(10,Digits);
       pin_body   = pin_body*100/pin_HL;     
   
    if (pin_high <= Pin_High && pin_body <= Pin_body && pin_low >= Pin_Low && pin_HL >= Pin_HL) 
      {
        Pin_bars[i+1] = High[i+1] + Gap_arrow*Point;
        if (Alert_ON && i == 0) Alert(Symbol(), "==>", Alert_PinBar);
        if (Sound_ON && i == 0) PlaySound(Sound_PinBar);  
      }
    }
  }
   return(0);
}
//-------------------------------------------------------------------------------------------------------------

