Скачать MetaTrader 5

Как добавить усреднение в индикатор

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
uniface
560
uniface  

Усреднить значения в индикаторе
Пытаюсь запилить индикатор по своей задумке, но я только изучаю mql и пока без помощи тяжеловато, должное понимание процесса еще не пришло... 

Есть код:

//+------------------------------------------------------------------+
//|                                         MarketGOD_Indicators.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             [url]https://www.mql5.com[/url] |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window          // Индикатор рисуется в основном окне
#property indicator_buffers 1             // Количество буферов
#property indicator_color1 Green          // Цвет первой линии
#property indicator_width1 2              // Толщина линии

double Buf_0[];                           // Объявление массивов(под буферы индикатора)
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()                              // Специальная функция OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0, Buf_0);              // Назначение массива буферу
   SetIndexStyle (0, DRAW_SECTION);       // Стиль линии
//---
   return(INIT_SUCCEEDED);                // Выход из спец. ф-ии init()
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//+------------------------------------------------------------------+
     int i, 
            limit = prev_calculated == 0  // Переменной limit, при условии что prev_calculated равно нулю
          ? rates_total-1                 // будет присвоено значение rates_total(количество баров в окне) минус 1
          : prev_calculated;              // иначе будет присвоено prev_calculated(количество не посчитанных баров

     for(i = 0; i < limit; i++)           // цикл 
     {
           if(open[i] < close[i])
           {
                Buf_0[i] = (high[i]+low[i]+open[i]+close[i])/4.0; /* тут должна быть ваша котировка получившаяся после ваших расчетов на этом баре*/
           }
           else if(open[i] > close[i])
           {
                Buf_0[i] = EMPTY_VALUE;   /* тут должна быть ваша котировка получившаяся после ваших расчетов на этом баре*/
           }
           else                           //если будет равно то управление перейдет в этот блок
           {
                Buf_0[i] = EMPTY_VALUE;   /* тут должна быть ваша котировка получившаяся после ваших расчетов на этом баре*/
           }
     } 
   return(rates_total);
  }
//+---

 Нужно усреднить получаемые значения для вывода на график (то есть по принципу EMA). Куда мне копануть, можно без вывода поля в настройках, чисто в коде прописать "усреднять на 2,3,4,5" по выбору то есть. Заранее благодарность за подсказку!

Yurij Izyumov
20449
Yurij Izyumov  
не совсем понял как можно усреднять между отрезками при open[i] < close[i]   и EMPTY_VALUE   - получится линия на самом полу графика
Yurij Izyumov
20449
Yurij Izyumov  

Сами смотрите, проясните точно что вы хотите сделать 

Файлы:
Alexander Bereznyak
23076
Alexander Bereznyak  
Yurij Izyumov:
не совсем понял как можно усреднять между отрезками при open[i] < close[i]   и EMPTY_VALUE   - получится линия на самом полу графика
нет, на потолке, в индикаторах  EMPTY_VALUE=2147483647
Yurij Izyumov
20449
Yurij Izyumov  
Alexander Bereznyak:
нет, на потолке, в индикаторах  EMPTY_VALUE=2147483647
не суть =)))) в любом случае не то что надо 
Alexey Volchanskiy
19554
Alexey Volchanskiy  
novichek:

Усреднить значения в индикаторе
Пытаюсь запилить индикатор по своей задумке, но я только изучаю mql и пока без помощи тяжеловато, должное понимание процесса еще не пришло... 

Есть код:

 Нужно усреднить получаемые значения для вывода на график (то есть по принципу EMA). Куда мне копануть, можно без вывода поля в настройках, чисто в коде прописать "усреднять на 2,3,4,5" по выбору то есть. Заранее благодарность за подсказку!

В файле MQL4\Include\MovingAverages.mqh есть отдельные алгоритмы, например, для EMA вот такой. Может, поможет )

//+------------------------------------------------------------------+
//| Exponential Moving Average                                       |
//+------------------------------------------------------------------+
double ExponentialMA(const int position,const int period,const double prev_value,const double &price[])
  {
//---
   double result=0.0;
//--- calculate value
   if(period>0)
     {
      double pr=2.0/(period+1.0);
      result=price[position]*pr+prev_value*(1-pr);
     }
//---
   return(result);
  }

 **

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий