Вопросец по индикатору - страница 2

 
Dmitry Fedoseev #:

Вот это строку - 

надо вытащить из цикла.

Может, и еще ошибки есть, но это первое что заметно.

Это стандартный код для размаха, медиана всё равно не верно вычисляется.

 
pips #:

Это стандартный код для размаха, медиана всё равно не верно вычисляется.

А выглядит как код стандартной девиации и у функции имя соответствующее.

 

Вот оптимизированный по скорости ВВ(бесцикловый расчет СКО) без библиотек.

#property copyright "Nikolai Semko"
#property link      "https://www.mql5.com/ru/users/nikolay7ko"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot Up
#property indicator_label1  "Up"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Down
#property indicator_label2  "Down"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- plot MA
#property indicator_label3  "MA"
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrRed
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1


input int ma_per = 100;
input double dev = 2.0;

//--- indicator buffers
double         UpBuffer[];
double         DownBuffer[];
double         MABuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,UpBuffer);
   SetIndexBuffer(1,DownBuffer);
   SetIndexBuffer(2,MABuffer);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   static double sum = 0;
   static double std = 0;
   static double last_close = 0;
   if(rates_total<=ma_per)
      return(0);
   double cl = close[0];

   if(rates_total-prev_calculated<2)
     {
      if(rates_total == prev_calculated)  // новый тик
        {
         sum+=cl-last_close;
         std+=cl*cl - last_close*last_close;
        }
      else // один новый бар
        {
         sum+=cl-close[ma_per];
         std+=cl*cl - close[ma_per]*close[ma_per];
        }
      MABuffer[0] = sum/ma_per;
      double d = dev*sqrt((std-2*sum*MABuffer[0]+MABuffer[0]*MABuffer[0]*ma_per)/ma_per);
      UpBuffer[0] = MABuffer[0]+d;
      DownBuffer[0] = MABuffer[0]-d;
      last_close = cl;
     }
   else // пересчитываем все
     {
      sum = 0;
      std = 0;
      ArrayInitialize(MABuffer,EMPTY_VALUE);
      ArrayInitialize(DownBuffer,EMPTY_VALUE);
      ArrayInitialize(UpBuffer,EMPTY_VALUE);
      for(int i = 0; i<ma_per; i++)
        {
         double cur = close[rates_total-1-i];
         sum +=cur;
         std +=cur*cur;
        }
      MABuffer[ma_per-1] = sum/ma_per;
      for(int i = rates_total-ma_per-1; i>=0; i--)
        {
         sum+=close[i]-close[i+ma_per];
         std+=close[i]*close[i] - close[i+ma_per]*close[i+ma_per];
         MABuffer[i] = sum/ma_per;
         double d = dev*sqrt((std-2*sum*MABuffer[i]+MABuffer[i]*MABuffer[i]*ma_per)/ma_per);
         UpBuffer[i] = MABuffer[i]+d;
         DownBuffer[i] = MABuffer[i]-d;
        }
      last_close = close[0];
     }
   return(rates_total);
  }
Файлы:
BB_fast.mq4  8 kb
 
Nikolai Semko #:

Вот оптимизированный по скорости ВВ(бесцикловый расчет СКО) без библиотек.

sum+=close[i]-close[i+ma_per];

Вот с этим можно и поиграть)) от души!

 
Nikolai Semko #:

Вот оптимизированный по скорости ВВ(бесцикловый расчет СКО) без библиотек.

Всё-таки этот момент в коде   double cl = close[0]; тоже не рабочий, значения реального индикатора и этого не совпадают.

 
pips #:

Всё-таки этот момент в коде   double cl = close[0]; тоже не рабочий, значения реального индикатора и этого не совпадают.

?
Выражайтесь яснее пожалуйста. 
Что там не рабочее, если индикатор полностью рабочий и совпадает до пикселя со стандартным ВВ?

 
Nikolai Semko #:

?
Выражайтесь яснее пожалуйста. 
Что там не рабочее, если индикатор полностью рабочий и совпадает до пикселя со стандартным ВВ?

Всё хорошо, человеческий фактор, не тот параметр настройки был. 

 
Nikolai Semko #:

Вот оптимизированный по скорости ВВ(бесцикловый расчет СКО) без библиотек.

Отличный пример индусского кода

 

Подскажите где взять индикатор Renko!

RenkoLiveChart работал на МТ4 4.0 build 1356

а на версии  МТ4 4.0 build 1359 перестал открываться.

(или подскажите как установить старую версию МТ4 1356)