← К каталогу
Исходный код · ID 2411

movingaverages.mqh

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Данный исходный код представляет собой библиотеку на языке MQL, содержащую функции для расчёта различных типов скользящих средних. Библиотека включает четыре основных варианта: простую, экспоненциальную, сглаженную и линейно-взвешенную скользящую среднюю.

Каждая функция принимает массив цен и период, возвращая вычисленное значение скользящей средней на указанной позиции. Дополнительные варианты с суффиксом «OnBuffer» предназначены для расчёта непосредственно в буферных массивах пользовательских индикаторов, включая корректную обработку направления массивов.

Код распространяется под авторским правом MetaQuotes Software Corp. (2009–2013) и предназначен для использования в торговых платформах, работающих с языком MQL.

Состав библиотеки

Классов: 0 · методов: 0 · конструкторов: 0 · деструкторов: 0 · отдельных функций: 4

Функции
Функция double SimpleMA(const int position,const int period,const double &price[])

Вычисляет простую скользящую среднюю на основе массива цен и заданного периода.

Функция double ExponentialMA(const int position,const int period,const double prev_value,const double &price[])

Вычисляет экспоненциальную скользящую среднюю с учётом предыдущего значения и заданного периода.

Функция double SmoothedMA(const int position,const int period,const double prev_value,const double &price[])

Вычисляет сглаженную скользящую среднюю с учётом предыдущего значения и заданного периода.

Функция double LinearWeightedMA(const int position,const int period,const double &price[])

Вычисляет линейно-взвешенную скользящую среднюю на основе массива цен и заданного периода.

Получить полный код

Поиск по коду файла

double SimpleMA(const int position,const int period,const double &price[])
  {

   double result=0.0;

   if(position>=period-1 && period>0)
     {

      for(int i=0;i<period;i++) result+=price[position-i];
      result/=period;
     }

   return(result);
  }

double ExponentialMA(const int position,const int period,const double prev_value,const double &price[])
  {

   double result=0.0;

   if(period>0)
     {
      double pr=2.0/(period+1.0);
      result=price[position]*pr+prev_value*(1-pr);
     }

   return(result);
  }

double SmoothedMA(const int position,const int period,const double prev_value,const double &price[])
  {

   double result=0.0;

   if(period>0)
     {
      if(position==period-1)
        {
         for(int i=0;i<period;i++) result+=price[position-i];
         result/=period;
        }
      if(position>=period)
         result=(prev_value*(period-1)+price[position])/period;
     }

   return(result);
  }

double LinearWeightedMA(const int position,const int period,const double &price[])
  {

   double result=0.0,sum=0.0;
   int    i,wsum=0;

   if(position>=period-1 && period>0)
     {
      for(i=period;i>0;i--)
        {
         wsum+=i;
         sum+=price[position-i+1]*(period-i+1);
        }
      result=sum/wsum;
     }

   return(result);
  }

int SimpleMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,
                     const int period,const double& price[],double& buffer[])
  {
   int i,limit;

   if(period<=1 || rates_total-begin<period) return(0);

   bool as_series_price=ArrayGetAsSeries(price);
   bool as_series_buffer=ArrayGetAsSeries(buffer);
   if(as_series_price)  ArraySetAsSeries(price,false);
   if(as_series_buffer) ArraySetAsSeries(buffer,false);

   if(prev_calculated==0) // first calculation
     {
      limit=period+begin;

      for(i=0;i<limit-1;i++) buffer[i]=0.0;

      double firstValue=0;
      for(i=begin;i<limit;i++)
         firstValue+=price[i];
      firstValue/=period;
      buffer[limit-1]=firstValue;
     }
   else limit=prev_calculated-1;

   for(i=limit;i<rates_total;i++)
      buffer[i]=buffer[i-1]+(price[i]-price[i-period])/period;

   if(as_series_price)  ArraySetAsSeries(price,true);
   if(as_series_buffer) ArraySetAsSeries(buffer,true);

    return(rates_total);
  }

int ExponentialMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,
                          const int period,const double& price[],double& buffer[])
  {
   int    i,limit;

   if(period<=1 || rates_total-begin<period) return(0);
   double dSmoothFactor=2.0/(1.0+period);

   bool as_series_price=ArrayGetAsSeries(price);
   bool as_series_buffer=ArrayGetAsSeries(buffer);
   if(as_series_price)  ArraySetAsSeries(price,false);
   if(a

Показано первые 50% кода (символов: 4354)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
435,40₽ ≈ $5.32