//+------------------------------------------------------------------+
//|                                          iSWOL(SuperWaveOneLine) |
//|рисует стохастик заданного старшего периода
//+------------------------------------------------------------------+
#define NAME_EXPERT "SWOL"
#define VER " V2"                                     
#define RELIZE "GS_2011_08_04"                        
#define AUTOR "valenok2003@mail.ru"
#define URL "http://bluedream.ucoz.ru"

extern int 
   TF_Indicator = 0;
extern bool
   SHOW_SIGNAL_LINE = true,
   Alert_ON = false;
//-----------
string 
   Name_Window,
   ex_Name = NAME_EXPERT;
string Txt_TF_Indicator;
int Style_Main_Line = DRAW_LINE;
int Style_Signal_Line = STYLE_DOT;
//+------------------------------------------------------------------+
#property copyright "Sergey Gulyaev. Maykop."
#property link      "valenok2003@mail.ru    ICQ 365919666"

#property indicator_separate_window

#property indicator_buffers 2
#property indicator_level1 80
#property indicator_level2 20
#property indicator_levelcolor Gray

#property indicator_minimum 0
#property indicator_maximum 100

int 
   St_D=5,D,
   St_K=3,K,
   St_S=3,S,
   z;
//---- buffers
double Buff_0[],Buff_1[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
//--------------------------------------------------------------------
   if(TF_Indicator == 0) TF_Indicator = Period();
   if(TF_Indicator < Period())
   {  TF_Indicator = Period();
      //if(Alert_ON)Alert("TF младше текущего не допустим!"); 
   }
//--------------------------------------------------------------------
   z = MathRound(TF_Indicator/Period());
   D = St_D*z;
   K = St_K*z;
   S = St_S*z;
//------------ создаём имя окна -------------------------------------- 
//---- name for indicator window
   Name_Window = ex_Name+"("+txt_TF(TF_Indicator)+")";
   IndicatorShortName(Name_Window);
//--------------------------------------------------------------------
//--------------------------------------------------------------------
   SetIndexBuffer(0,Buff_0); 
   SetIndexBuffer(1,Buff_1); 
   switch(TF_Indicator)
   {  case PERIOD_M1:
         SetIndexStyle (0,Style_Main_Line,  0,0,Red);           
         SetIndexLabel (0,"St_M1");
         SetIndexStyle (1,0,Style_Signal_Line,0,Tomato);        
         SetIndexLabel (1,"");
      break;
      case PERIOD_M5:
         SetIndexStyle (0,Style_Main_Line,  0,0,DarkOrange);    
         SetIndexLabel (0,"St_M5");
         SetIndexStyle (1,0,Style_Signal_Line,0,SandyBrown);    
         SetIndexLabel (1,"");
      break;
      case PERIOD_M15:
         SetIndexStyle (0,Style_Main_Line,0,0,Yellow);          
         SetIndexLabel (0,"St_M15");
         SetIndexStyle (1,0,Style_Signal_Line,0,Khaki);         
         SetIndexLabel (1,"");
      break;
      case PERIOD_M30:
         SetIndexStyle (0,Style_Main_Line,0,0,LimeGreen);       
         SetIndexLabel (0,"St_M30");
         SetIndexStyle (1,0,Style_Signal_Line,0,PaleGreen);     
         SetIndexLabel (1,"");
      break;
      case PERIOD_H1:
         SetIndexStyle (0,Style_Main_Line,0,0,SkyBlue);         
         SetIndexLabel (0,"St_H1");
         SetIndexStyle (1,0,Style_Signal_Line,0,PowderBlue);    
         SetIndexLabel (1,"");
      break;
      case PERIOD_H4:
         SetIndexStyle (0,Style_Main_Line,0,0,Blue);            
         SetIndexLabel (0,"St_H4"); 
         SetIndexStyle (1,0,Style_Signal_Line,0,CornflowerBlue);
         SetIndexLabel (1,"");
      break;
      case PERIOD_D1:
         SetIndexStyle (0,Style_Main_Line,0,0,Violet);          
         SetIndexLabel (0,"St_D1");
         SetIndexStyle (1,0,Style_Signal_Line,0,Pink);          
         SetIndexLabel (1,"");
      break;
      case PERIOD_W1:
         SetIndexStyle (0,Style_Main_Line,0,0,BlueViolet);      
         SetIndexLabel (0,"St_W1");
         SetIndexStyle (1,0,Style_Signal_Line,0,MediumOrchid);  
         SetIndexLabel (1,"");
      break;
      case PERIOD_MN1:
         SetIndexStyle (0,Style_Main_Line,0,0,Red);             
         SetIndexLabel (0,"St_MN1");
         SetIndexStyle (1,0,Style_Signal_Line,0,Tomato);        
         SetIndexLabel (1,"");
      break;
      default: break;
   }
      if(!SHOW_SIGNAL_LINE)SetIndexStyle (1,DRAW_NONE);
//----
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{  int 
      i,                           // Индекс бара
      Counted_bars;                // Количество просчитанных баров 
//--------------------------------------------------------------------
//--------------------------------------------------------------------
   Counted_bars= IndicatorCounted();   // Количество просчитанных баров 
   i=Bars-Counted_bars-1;              // Индекс первого непосчитанного
   while(i>=0)                         // Цикл по непосчитанным барам
   {  Buff_0[i] = iStochastic(NULL,Period(),D,K,S,MODE_SMA,0,MODE_MAIN,i);
      Buff_1[i] = iStochastic(NULL,Period(),D,K,S,MODE_SMA,0,MODE_SIGNAL,i);
      i--;
   }
   static bool
      FLAG_UP = true,
      FLAG_DN = true;
   if(Alert_ON)   {
      if(FLAG_UP && Buff_0[0] > Buff_1[0])   {
         Alert("DN->UP :" + txt_TF(TF_Indicator)+" "+Symbol()+" "+ex_Name);
         FLAG_UP = false;
         FLAG_DN = true;
      }
      if(FLAG_DN && Buff_0[0] < Buff_1[0])   {
         Alert("UP->DN :" + txt_TF(TF_Indicator)+" "+Symbol()+" "+ex_Name);
         FLAG_UP = true;
         FLAG_DN = false;
      }
   }
//----
   return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|   valenok2003@mail.ru                                14.06.2011
//+------------------------------------------------------------------+
//| txt_TF() переводит ТФ в текстовый формат              
//+------------------------------------------------------------------+
string txt_TF( int _TF)
{  string _Function = "txt_TF():";
   string _Txt_TF;
   switch(_TF)
   {
     case PERIOD_M1:  _Txt_TF = "M1";  break;
     case PERIOD_M5:  _Txt_TF = "M5";  break;
     case PERIOD_M15: _Txt_TF = "M15"; break;
     case PERIOD_M30: _Txt_TF = "M30"; break;
     case PERIOD_H1:  _Txt_TF = "H1";  break;
     case PERIOD_H4:  _Txt_TF = "H4";  break;
     case PERIOD_D1:  _Txt_TF = "D1";  break;
     case PERIOD_W1:  _Txt_TF = "W1";  break;
     case PERIOD_MN1: _Txt_TF = "MN1"; break;
     default: Alert("Неверно установлен ТФ " + _TF); break;
   }
   return(_Txt_TF);
}
//+------------------------------------------------------------------+
//+-------
  

