Navigation:Home > Content >

Zerolagstochs_editNK.mq4

Time: 2018-08-25 | Download file:Zerolagstochs_editNK.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      "[email protected]"
//---- отрисовка индикатора в отдельом окне
#property indicator_separate_window
//---- количество индикаторных буферов
#property indicator_buffers 2
//---- цвета индикатора
#property indicator_color1 Blue
#property indicator_color2 Red
//---- Объявление  индикаторных буферов
double FastTrendBuffer[];
double LowTrendBuffer[];
//---- Объявление целых констант
int StartBar;
//---- Объявление констант с плавающей точкой
double smoothConst, smoothing;
//+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 = 0.05 * iStochastic(symbol, timeframe,  8,  3, SLOWING, MA_MODE, NULL, LINE_MODE, bar);
   Stoch2 = 0.10 * iStochastic(symbol, timeframe, 21,  5, SLOWING, MA_MODE, NULL, LINE_MODE, bar);
   Stoch3 = 0.16 * iStochastic(symbol, timeframe, 34,  8, SLOWING, MA_MODE, NULL, LINE_MODE, bar);
   Stoch4 = 0.26 * iStochastic(symbol, timeframe, 55, 13, SLOWING, MA_MODE, NULL, LINE_MODE, bar);
   Stoch5 = 0.43 * iStochastic(symbol, timeframe, 89, 21, SLOWING, MA_MODE, NULL, LINE_MODE, bar); // StartBar = 89 + 21 + 1;!!! 
   //----
   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");
   //---- Инициализация констант
   smoothing = 15;
   StartBar = 89 + 21 + 1;
   smoothConst = (smoothing - 1.0) / smoothing;
   //---- установка номера бара, 
           //начиная с которого будет отрисовываться индикатор 
   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, MODE_SMA, MODE_MAIN, 3, MaxBar + 1);
     LowTrendBuffer[MaxBar + 1] = FastTrend / smoothing;
    } 
    
   //---+ ОСНОВНОЙ ЦИКЛ РАСЧЁТА ИНДИКАТОРА
   for (bar = limit; bar>= 0; bar--)
	 {
     FastTrend = ZerolagStochs(Symbol(), 0, MODE_SMA, MODE_MAIN, 3, bar);
     //----
     LowTrend = FastTrend / smoothing + LowTrendBuffer[bar + 1] * smoothConst;
     //----
     FastTrendBuffer[bar] = FastTrend;
	  LowTrendBuffer [bar] = LowTrend;   
	 }
	//---+
	return(0);
//---+
  }
//+X----------------------------------------------------------------X+

Recommend