Navigation:Home > Content >

ZerolagStochs_.mq4

Time: 2017-07-16 | Download file:ZerolagStochs_.mq4

// Редактирование и исправления 22.09.2008 Николай Косицин
//+X================================================================X+
//|                                               ZerolagStochs_.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+X================================================================X+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "perky_z@yahoo.com"
//---- отрисовка индикатора в отдельом окне
#property indicator_separate_window
//---- количество индикаторных буферов
#property indicator_buffers 2
//---- цвета индикатора
#property indicator_color1 Blue
#property indicator_color2 Red
//----+ +----------------------------+
//---- ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА  |
//----+ +----------------------------+
extern int    Slowing = 3;
extern int    MA_Method = MODE_SMA;
extern int    smoothing = 15;
//----
extern double Factor1 = 0.05;
extern int    Kperiod1 = 8;
extern int    Dperiod1 = 3;
//----
extern double Factor2 = 0.10;
extern int    Kperiod2 = 21;
extern int    Dperiod2 = 5;
//----
extern double Factor3 = 0.16;
extern int    Kperiod3 = 34;
extern int    Dperiod3 = 8;
//----
extern double Factor4 = 0.26;
extern int    Kperiod4 = 55;
extern int    Dperiod4 = 13;
//----
extern double Factor5 = 0.43;
extern int    Kperiod5 = 89;
extern int    Dperiod5 = 21;
//---- Объявление  индикаторных буферов
double FastTrendBuffer[];
double LowTrendBuffer[];
//---- Объявление целых констант
int StartBar;
//---- Объявление констант с плавающей точкой
double smoothConst;
//+X================================================================X+   
//| ZerolagStochs() function                                         |
//+X================================================================X+ 
double ZerolagStochs(string symbol, int timeframe, int MA_MODE, int LINE_MODE, int SLOWING, int bar) 
 { 
//----+
   double Stoch1, Stoch2, Stoch3, Stoch4, Stoch5;
   //----
   Stoch1 = Factor1 * iStochastic(symbol, timeframe, Kperiod1, Dperiod1, SLOWING, MA_MODE, NULL, LINE_MODE, bar);
   Stoch2 = Factor2 * iStochastic(symbol, timeframe, Kperiod2, Dperiod2, SLOWING, MA_MODE, NULL, LINE_MODE, bar);
   Stoch3 = Factor3 * iStochastic(symbol, timeframe, Kperiod3, Dperiod3, SLOWING, MA_MODE, NULL, LINE_MODE, bar);
   Stoch4 = Factor4 * iStochastic(symbol, timeframe, Kperiod4, Dperiod4, SLOWING, MA_MODE, NULL, LINE_MODE, bar);
   Stoch5 = Factor5 * iStochastic(symbol, timeframe, Kperiod5, Dperiod5, SLOWING, MA_MODE, NULL, LINE_MODE, bar);
   //----
   return(Stoch1 + Stoch2 + Stoch3 + Stoch4 + Stoch5);
//----+ 
 }
//+X================================================================X+
//| ZerolagStochs indicator initialization function                  |
//+X================================================================X+
int init()
  {
//---+
   //---- 2 индикаторных буфера использованы для счёта  
   SetIndexBuffer(0, FastTrendBuffer);
   SetIndexBuffer(1, LowTrendBuffer );
   //---- определение стиля исполнения графика
   SetIndexStyle(0, DRAW_LINE);
   SetIndexStyle(1, DRAW_LINE);
   //---- Установка формата точности отображения индикатора
   IndicatorDigits(Digits);
   //---- Имя индикатора в субъокне
   IndicatorShortName("Zero Lag Stocs_");
   //---- Лэйбы для индикаторных линий
   SetIndexLabel(0, "FastTrendLine");
   SetIndexLabel(1, "LowTrendLine");
   //---- Инициализация констант
   smoothConst = (smoothing - 1.0) / smoothing;
   //---- 
   int PeriodBuffer[5]; 
   //---- Расчёт стартового бара
   PeriodBuffer[0] = Kperiod1 + Dperiod1; 
   PeriodBuffer[1] = Kperiod2 + Dperiod2; 
   PeriodBuffer[2] = Kperiod3 + Dperiod3; 
   PeriodBuffer[3] = Kperiod4 + Dperiod4; 
   PeriodBuffer[4] = Kperiod5 + Dperiod5;
   //----
   StartBar = ArrayMaximum(PeriodBuffer, WHOLE_ARRAY, 0) + 1;
   //---- установка номера бара, 
           //начиная с которого будет отрисовываться индикатор 
   SetIndexDrawBegin(0, StartBar - 1);
   SetIndexDrawBegin(1, StartBar);
   //---- Завершение инициализации
   return(0);
//---+
  }
//+X================================================================X+
//| ZerolagStochs indicator start function                           |
//+X================================================================X+
int start()
  {
//---+
   //---- проверка количества баров на достаточность для расчёта
   if (Bars < StartBar)
                 return(0);
   //---- Объявление статических переменных              
   static bool TrueStart;
   //---- Объявление переменных с плавающей точкой
   double FastTrend, LowTrend;
   double Stoch1, Stoch2, Stoch3, Stoch4, Stoch5;
   //----+ Объявление целых переменных и получение уже посчитанных баров
   int limit, MaxBar, bar, counted_bars = IndicatorCounted();
   //---- проверка на возможные ошибки
   if (counted_bars < 0)
                return(-1);
   //---- последний посчитанный бар должен быть пересчитан 
   if (counted_bars > 0)
               counted_bars--;
   //---- определение номера самого старого бара, 
               //начиная с которого будет произедён пересчёт всех баров
   MaxBar = Bars - 1 - StartBar;
   //---- определение номера самого старого бара, 
          //начиная с которого будет произедён пересчёт только новых баров
   limit = (Bars - 1 - counted_bars);
   
   //---- инициализация нуля
   if (limit >= MaxBar || !TrueStart)
    {
     limit = MaxBar;
     TrueStart = true;
     //----
     for (bar = Bars - 1; bar > MaxBar; bar--)
      { 
       FastTrendBuffer[bar] = 0.0;
       LowTrendBuffer [bar] = 0.0;
      }
      
     FastTrend = ZerolagStochs(Symbol(), 0, MA_Method, MODE_MAIN, Slowing, MaxBar + 1);
     LowTrendBuffer[MaxBar + 1] = FastTrend / smoothing;
    } 
    
   //---+ ОСНОВНОЙ ЦИКЛ РАСЧЁТА ИНДИКАТОРА
   for (bar = limit; bar>= 0; bar--)
	 {
     FastTrend = ZerolagStochs(Symbol(), 0, MA_Method, MODE_MAIN, Slowing, bar);
     //----
     LowTrend = FastTrend / smoothing + LowTrendBuffer[bar + 1] * smoothConst;
     //----
     FastTrendBuffer[bar] = FastTrend;
	  LowTrendBuffer [bar] = LowTrend;   
	 }
	//---+
	return(0);
//---+
  }
//+X----------------------------------------------------------------X+

Recommend