//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#property copyright ""

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_width1 1
#property indicator_width2 1
#property indicator_level1 25
#property indicator_level2 75


extern int Periode = 2;
//    0 = SMA
//    1 - EMA
//    2 - SMMA
//    3 - LWMA
extern int MAMode=1;

int PeriodRSI  = 0;
int PeriodStoch= 0;
int PeriodSK   = 0;
int PeriodSD   = 0;

double SK[];
double SD[];
double StoRSI[];
double RSI[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
{
   switch(Periode)
   {
      case 1: 
         PeriodRSI  = 8;
         PeriodStoch= 5;
         PeriodSK   = 3;
         PeriodSD   = 3;
         break;
      case 2: 
         PeriodRSI  = 13;
         PeriodStoch= 8;
         PeriodSK   = 5;
         PeriodSD   = 5;
         break;
      case 3: 
         PeriodRSI  = 21;
         PeriodStoch= 13;
         PeriodSK   = 8;
         PeriodSD   = 8;
         break;
      case 4: 
         PeriodRSI  = 34;
         PeriodStoch= 21;
         PeriodSK   = 13;
         PeriodSD   = 13;
         break;
      default: Alert("Auswahl nicht zulässig - 1 ...4");
   }
   
   if (Period() == 1440){
      PeriodRSI  = 8;
      PeriodStoch= 5;
      PeriodSK   = 3;
      PeriodSD   = 3;
   }
   
   IndicatorBuffers(4);
      SetIndexBuffer(0,SK);
      SetIndexBuffer(1,SD);
      SetIndexBuffer(2,StoRSI);
      SetIndexBuffer(3,RSI);
   IndicatorShortName("DTosc ("+PeriodRSI+","+PeriodStoch+","+PeriodSK+","+PeriodSD+")");
return(0);
}
int deinit() { return(0); }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
{
   int i,limit;
   int counted_bars = IndicatorCounted();

   if(counted_bars < 0) return(-1);
   if(counted_bars > 0) counted_bars--;
   limit = MathMin(Bars-counted_bars,Bars-1);

   //
   //
    
   for(i=limit; i>=0; i--)
   {
      RSI[i] = iRSI(NULL,0,PeriodRSI,PRICE_CLOSE,i);
      double LLV = RSI[ArrayMinimum(RSI,PeriodStoch,i)];
      double HHV = RSI[ArrayMaximum(RSI,PeriodStoch,i)];
      if ((HHV-LLV)!=0)
            StoRSI[i] = 100.0*((RSI[i] - LLV)/(HHV - LLV));
      else  StoRSI[i] = 0;
   }
   for(i=limit; i>=0; i--) SK[i] = iMAOnArray(StoRSI,0,PeriodSK,0,MAMode,i);
   for(i=limit; i>=0; i--) SD[i] = iMAOnArray(    SK,0,PeriodSD,0,MAMode,i);

   return(0);
}