Navigation:Home > Content >

StochasticDiNapoli.mq4

Time: 2016-03-08 | Download file:StochasticDiNapoli.mq4

//+------------------------------------------------------------------+
//|                                           StochasticDiNapoli.mq4 |
//|                                      Copyright © 2010, LenIFCHIK |
//|Индикатор написан в соответствии с описанием, приведённым в книге |
//|Джо ДиНаполи "Торговля с использованием уровней ДиНаполи".        |
//|Исходный код содержит уровни перекупленности и перепроданности,   |
//|но с целью применения индикатора для техники ДиНаполи, данные     |
//|уровни отключены (отмечены как комментарии знаком "//"). Включение|
//|осуществляется путём удаления из начала соответствующих строк     |
//|символа "//".                                                     |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, LenIFCHIK"

#property indicator_separate_window       //в отдельном окне
#property indicator_minimum 0             //закрёплённый минимум
#property indicator_maximum 100           //закреплённый максимум

#property indicator_buffers 2             //число буферов индикатора
#property indicator_color1 RoyalBlue      //цвет линии %K
#property indicator_color2 FireBrick      //цвет линии %D
//---- входные параметры
extern int FastK=8;                       //период линии %K
extern int SlowK=3;                       //период "медленной" %K
extern int SlowD=3;                       //преиод "медленной" %D
extern string Levels_display_mode="0 - off, 1 - on";
extern int Levels_ON_OFF=0;               //режим отображения уровней перекупленности/перепроданности
extern int OBLevel=80;                    //уровень перекуплнности (по умолчанию не отображается)
extern int OSLevel=20;                    //уровень перепроданности (по умолчанию не отображается) 
//---- буферы индикатора
double StoBuffer[];                       //буфер стохастической линии
double SigBuffer[];                       //буфер сигнальной линии
//+------------------------------------------------------------------+
//| Инициализация. Функция Init                                      |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- отрисовка индикатора
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1); //отрисовка стохастической линии
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1); //отрисовка сигнальной линии
//---- разметка буферов   
   SetIndexBuffer(0,StoBuffer);
   SetIndexBuffer(1,SigBuffer);
//---- имя окна данных и окна индикатора
   short_name="Stochastic DiNapoli("+FastK+","+SlowK+","+SlowD+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,"Stoch");
   SetIndexLabel(1,"Signal");
//---- начало отрисовки
   SetIndexDrawBegin(0,FastK);
   SetIndexDrawBegin(1,FastK);
//---- определение уровней    
   switch(Levels_ON_OFF)                     //режим отображения уровней перекупленности/перепроданности
     {
     case 0 :                                //ОТОБРАЖАЮТСЯ
       SetLevelValue(1,EMPTY_VALUE);         //уровень перекупленности 
       SetLevelValue(2,EMPTY_VALUE);         //уровень перепроданности  
       break;
     case 1 :                                //ОТОБРАЖАЮТСЯ
       SetLevelValue(1,OBLevel);             //уровень перекупленности 
       SetLevelValue(2,OSLevel);             //уровень перепроданности 
//---- стиль отображения уровней
       SetLevelStyle(STYLE_DOT,1,Silver);      
       break;
     default :
       Levels_ON_OFF=0;                      //по умолчанию НЕ ОТОБРАЖАЮТСЯ
     }
//---- конец инициализации
   return(0);
  }
//+------------------------------------------------------------------+
//| Stochastic по DiNapoli                                           |
//+------------------------------------------------------------------+
int start()
  {
   int i,counted_bars=IndicatorCounted();
   double high,low;
//----
   if(Bars<=FastK) return(0);
//---- 
   if(counted_bars<1)
      for(i=1;i<=FastK;i++) 
      {StoBuffer[Bars-i]=0.0;SigBuffer[Bars-i]=0.0;}
//----
   i=Bars-FastK-1;
   if(counted_bars>=FastK) i=Bars-counted_bars-1;
   while(i>=0)
   {
       low=Low[Lowest(NULL,0,MODE_LOW,FastK,i)];                        //минимум 
       high=High[Highest(NULL,0,MODE_HIGH,FastK,i)];                    //максимум     
       double Fast=(Close[i]-low)/(high-low)*100;                       //расчёт первичной быстрой линии %К
       StoBuffer[i]=StoBuffer[i+1]+(Fast-StoBuffer[i+1])/SlowK;         //расчёт стохастической линии
       SigBuffer[i]=SigBuffer[i+1]+(StoBuffer[i]-SigBuffer[i+1])/SlowD; //расчёт сигнальной линии
   i--;
   }
   return(0);
  }
//+------------------------------------------------------------------+

Recommend