/*
+-------------------------------------------------------------------

SamuraiInd.mq4                                                       
Индикатор интерпретирует сигналы индикатора Ишимоку, выставляя    
оценку каждому бару.                                              
Если индикатор выше нуля - покупать.
Если ниже нуля - продавать.
Если равен нулю - оставаться вне рынка.                           
                                         
+-------------------------------------------------------------------
*/

#property indicator_separate_window // Вывод в отдельном окне
#property indicator_buffers 1       // Количество буферов
#property indicator_color1 Red      // Цвет линии индикатора

//--------------------------------------------------------------------

double Buffer[];              // Объявляем массив
extern int TenkanA = 9;       // Период расчета Тенкан A по умолчанию
extern int KijunA = 26;       // Период расчета Киджун A по умолчанию
extern int TenkanB = 9;       // Период расчета Тенкан B по умолчанию
extern int KijunB = 26;       // Период расчета Киджун B по умолчанию
extern int Chinkou = 26;      // Период расчета Чинкоу по умолчанию

extern int TENKANFLAT = 1;    // 1 - флэт Тенкан A учитывается как сигнал

// Вес сигналов Ишимоку в индикаторе
extern int a = 1;   // Динамика Тенкан A              
extern int b = 1;   // Пересечение Тенкан B/Киджун B
extern int c = 1;   // Пересечение цены и Киджун A
extern int d = 1;   // Пересечение цены и Чинкоу

//+------------------------------------------------------------------
int init()
  {
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);  // Стиль линии индикатора
   SetIndexBuffer(0,Buffer);                  // Присваиваем массив буферу
   return;
  }
//+------------------------------------------------------------------
int start()
  {
   int Counted_bars=IndicatorCounted();          
   int i=Bars-Counted_bars-1;                
   
     while(i>=0)                               
   {   
   // Растет ли Тенкан A?
   if(iIchimoku(NULL,0,TenkanA,KijunA,1,MODE_TENKANSEN,i)>    
   iIchimoku(NULL,0,TenkanA,KijunA,1,MODE_TENKANSEN,i+1))
      int A=a;
   if(iIchimoku(NULL,0,TenkanA,KijunA,1,MODE_TENKANSEN,i)<
   iIchimoku(NULL,0,TenkanA,KijunA,1,MODE_TENKANSEN,i+1))
      A=-a;
   if(iIchimoku(NULL,0,TenkanA,KijunA,1,MODE_TENKANSEN,i)==
   iIchimoku(NULL,0,TenkanA,KijunA,1,MODE_TENKANSEN,i+1)&& 
   TENKANFLAT == 1)
      A=0;      
   //--------------------------------------------------------
   // Тенкан B выше Киджун B?  
   if(iIchimoku(NULL,0,TenkanB,KijunB,1,MODE_TENKANSEN,i)>  
   iIchimoku(NULL,0,TenkanB,KijunB,1,MODE_KIJUNSEN,i))
      int B=b;
   if(iIchimoku(NULL,0,TenkanB,KijunB,1,MODE_TENKANSEN,i)<
   iIchimoku(NULL,0,TenkanB,KijunB,1,MODE_KIJUNSEN,i))
      B=-b;
   if(iIchimoku(NULL,0,TenkanB,KijunB,1,MODE_TENKANSEN,i)==
   iIchimoku(NULL,0,TenkanB,KijunB,1,MODE_KIJUNSEN,i))
      B=0;
  //--------------------------------------------------------
  // Цена выше Киджун A? 
  if(Close[i]>iIchimoku(NULL,0,TenkanA,KijunA,1,MODE_KIJUNSEN,i))
      int C=c;
   if(Close[i]<iIchimoku(NULL,0,TenkanA,KijunA,1,MODE_KIJUNSEN,i))
      C=-c;
   if(Close[i]==iIchimoku(NULL,0,TenkanA,KijunA,1,MODE_KIJUNSEN,i))
      C=0; 
   //-------------------------------------------------------
   // Чинкоу выше цены?
   if(iIchimoku(NULL,0,TenkanA,Chinkou,1,MODE_CHINKOUSPAN,i+Chinkou)
   >Close[i+Chinkou])
      int D=d;
   if(iIchimoku(NULL,0,TenkanA,Chinkou,1,MODE_CHINKOUSPAN,i+Chinkou)
   <Close[i+Chinkou])
      D=-d;
   if(iIchimoku(NULL,0,TenkanA,Chinkou,1,MODE_CHINKOUSPAN,i+Chinkou)
   ==Close[i+Chinkou])
      D=0;
   //----------------------------------------------------------
   Buffer[i]=A+B+C+D;   // Элемент массива получает итоговое значение
   i--;                 // Переходим к следующему бару
   }   
   return;
  }
//+------------------------------------------------------------------+