//+------------------------------------------------------------------+
//|                                                  ichi_kbreak.mq4 |
//|                                              decnartne@yahoo.com |
//|                                              decnartne@yahoo.com |
//+------------------------------------------------------------------+
#property copyright "decnartne@yahoo.com"
#property link      "decnartne@yahoo.com"

#property indicator_chart_window
#property indicator_buffers  0

// index into color/code arrays
#define TREND_UNKNOWN    0
#define TREND_BULL       1
#define TREND_BEAR       2

// arrow defs
#define ARROW_BULL_CODE  233
#define ARROW_BEAR_CODE  234
#define ARROW_BULL_COLOR Green
#define ARROW_BEAR_COLOR Red
#define ARROW_WIDTH      2

//---- input parameters
extern int tenkan             = 9;
extern int kijun              = 26;
extern int senkou             = 52;
extern color arrow_bull_color = ARROW_BULL_COLOR;
extern color arrow_bear_color = ARROW_BEAR_COLOR;

color arrow_colors[3];
int   arrow_codes[3] = { 0, ARROW_BULL_CODE, ARROW_BEAR_CODE };
int   num_arrows;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   arrow_colors[TREND_BULL] = arrow_bull_color;
   arrow_colors[TREND_BEAR] = arrow_bear_color;
   num_arrows=0;
   
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
   ObjectsDeleteAll( 0, OBJ_ARROW );
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int    counted_bars = IndicatorCounted();
   int    ii;
   double low_span, high_span;
   double spans[2], chinkou;
   int    kb_trend = TREND_UNKNOWN;
   string obj_name;
   color  arrow_color;
   int    arrow_code;
     
   ii = Bars - 1;
   if ( counted_bars > 1 )
      ii = Bars - counted_bars - 1;
   
   while ( ii >= 0 )
   {      
      //  determine trend       
      chinkou   = iIchimoku( NULL, 0, tenkan, kijun, senkou, MODE_CHINKOUSPAN, ii+kijun );
      spans[0]  = iIchimoku( NULL, 0, tenkan, kijun, senkou, MODE_SENKOUSPANA, ii );
      spans[1]  = iIchimoku( NULL, 0, tenkan, kijun, senkou, MODE_SENKOUSPANB, ii ); 
        
      low_span  = spans[ArrayMinimum( spans )];
      high_span = spans[ArrayMaximum( spans )];
       
      kb_trend  = TREND_UNKNOWN; //init
      
      if ( Open[ii] <= high_span && Close[ii] > high_span && chinkou > High[ii+kijun] )
         kb_trend = TREND_BULL;
         
      if ( Open[ii] >= low_span && Close[ii] < low_span && chinkou < Low[ii+kijun] )
         kb_trend = TREND_BEAR;
     
      //  display trend
      if ( kb_trend != TREND_UNKNOWN )
      {
         obj_name = StringConcatenate( "arrow", DoubleToStr( num_arrows, 0 ) );
         ObjectCreate( obj_name, OBJ_ARROW, 0, Time[ii], Low[ii] );
         ObjectSet( obj_name, OBJPROP_COLOR, arrow_colors[kb_trend] ); 
         ObjectSet( obj_name, OBJPROP_ARROWCODE, arrow_codes[kb_trend] );
         ObjectSet( obj_name, OBJPROP_STYLE, STYLE_SOLID ); 
         ObjectSet( obj_name, OBJPROP_WIDTH, ARROW_WIDTH );
         PlaySound("alert.wav");
         num_arrows++;
      }      
      
      ii--;
   }
   
   return(0);
}
//+------------------------------------------------------------------+