Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Подключи хранилище исходного кода MQL5 Storage. Это бесплатно!
webouter
4
webouter 2016.07.18 22:35 

Есть индикатор типа EMA, нужно слегка переделать код, чтобы полученые значения усреднялись с предыдущими...

Вот код

//+------------------------------------------------------------------+
//|                                         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);
  }
//+---

 То есть находится бычий бар, просчитывается первое значение, а все последующие будут усреднятся по сравнению с предыдущим Buf_0[i] = (значение предыдущего бара + значение нынешнего бара)/2 мне не нужен период как в ема и тип усреднения тоже не нужен. Простое усреднение чисел по указанному уравнению. Я новичек в mql и даже незнаю с чего начать, прошу помощи знатоков!!!

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