//+------------------------------------------------------------------+
//|                                       Copyright © 2010,  sinner- |
//+------------------------------------------------------------------+
#property copyright "sinner"
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_width1 2
#property indicator_width2 2

//---- buffers
double hi[];
double lo[];
int    limit, i, counted_bars;
extern int DistanceFromCandle   = 10;

int BasePips(int input)
{
   int result = input;
   int resDig = Digits;
   
   if (resDig == 3 || resDig == 5) result *= 10;
   
   return (result);
}
  
int init()
{

  IndicatorBuffers(2);
 
//---- drawing settings
   SetIndexArrow(0, 119);
   SetIndexArrow(1, 119);
   
   SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,2,Red);
   SetIndexDrawBegin(0,0);
   SetIndexBuffer(0, hi);
   SetIndexLabel(0,"Sell Signal");
    

   SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,2,Blue);
   SetIndexDrawBegin(1,0);
   SetIndexBuffer(1, lo);
   SetIndexLabel(1,"Buy Signal");
  
   return(0);
}

int start()
{
   //i = Bars;
   counted_bars = IndicatorCounted();
   if(counted_bars < 0) 
       return(-1);
//----
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars - counted_bars;

   for(i = limit - 1; i >= 0; i--)
   {
      
      double sa = iIchimoku(NULL,0,9,26,52,MODE_SENKOUSPANA,i);
      double sb = iIchimoku(NULL,0,9,26,52,MODE_SENKOUSPANB,i);
      double ts = iIchimoku(NULL,0,9,26,52,MODE_TENKANSEN,i);
      double ts2 = iIchimoku(NULL,0,9,26,52,MODE_TENKANSEN,i+1);
      double ks = iIchimoku(NULL,0,9,26,52,MODE_KIJUNSEN,i);
      double ks2 = iIchimoku(NULL,0,9,26,52,MODE_KIJUNSEN,i+1);
      
      
      if (Close[i] < Close[i+26])
      {
         if(  (Open[i] > sb && Close[i] < sb) || (Close[i+1] > sb && Close[i] < sb) || (ts < ks && ts2 >= ks2 && High[i] < sa && High[i] < sb) || (Close[i] < ks && Open[i] > ks && ts > ks && High[i] < sa && High[i] < sb) ){
            hi[i] = High[i] + BasePips(DistanceFromCandle) * Point;
         }
         else { hi[i] = 0; }
      }
      else
      {
         hi[i] = 0;
      }      
        
      if (Close[i] > Close[i+26])
      {
         if( (Open[i] < sb && Close[i] > sb) || (Close[i+1] < sb && Close[i] > sb) || (ts > ks && ts2 <= ks2 && Low[i] > sa && Low[i] > sb) || (Close[i] > ks && Open[i] < ks && ts < ks && Low[i] > sa && Low[i] > sb) ) {
            lo[i] = Low[i] - BasePips(DistanceFromCandle) * Point;
         }
         else { lo[i] = 0; }
         
      }
      else
      {
         lo[i] = 0;
      }
           
   }   
   return(0);
}
//+------------------------------------------------------------------+