<a href="https://www.instaforex.com/ru/">ИнстаФорекс портал</a>

Использование библиотеки Alglib в MQL5. Индикатор дисперсии.

Среднеквадратичное отклонение

Математика — царица наук. И почему бы нам с вами, господа, не применить ее на благо трейдинга? Тем более что много уже сделано до нас — библиотека Alglib, которая включена по-умолчанию в базовый пакет MT5 или может быть загружена самостоятельно для MT4.

Простейшее применение математики к трейдингу — расчета статистических характеристик элементов массива. Первым моментом статистической характеристики является среднее значение. Здесь мы ничего придумывать не будем, т.к. ее график реализуется стандартным индикатором — Moving Everage. В данной статье мы построим график среднеквадратичного отклонения — второй момент статистической характеристики.

отклонения

Формула среднеквадратичного отклонения

Расчет реализуется методом SampleMoments класса CBaseStat из библиотеки Alglib. Собственно — это, пожалуй, самое простое, что можно было привести в качестве примера использования указанной библиотеки, по этому просто приведем код простого индикатора.

#property copyright   "Copyright 2016, Sergey Deev"
#property link        "http://fx-prog.ru"
#property description "StatVariance"
#property version   "1.0"
#property strict
#include 

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_width1  2
#property indicator_color1 clrSilver
#property indicator_type1 DRAW_HISTOGRAM
#property indicator_label1 "Variance"

input int period                 = 10;
input int CountBars              = 1000;

double buffer[];

int OnInit(void) {
   SetIndexBuffer(0,buffer);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,CountBars);
   ArraySetAsSeries(buffer,true);
   return(INIT_SUCCEEDED);
}

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[]) {

   if(rates_total<=0) { Alert("No rates_total"); return(0); }
   
   if(IsStopped()) { Alert("Stopped"); return(0); }

   if (prev_calculated == 0) ArrayInitialize(buffer,0);

   int limit = rates_total-prev_calculated;
   if (limit > (CountBars-period)) limit = CountBars-period;
   
   ArraySetAsSeries(close,true);

   CBaseStat stat;
   double mean,variance,skewness,kurtosis;

   for (int i=0; i < limit; i++) {
    double arr[];
    ArraySetAsSeries(arr,true);
    ArrayCopy(arr,close,0,i,period);
    if (stat.SampleMoments(arr,period,mean,variance,skewness,kurtosis)) {
     variance /= _Point;
     buffer[i] = variance;
    }
   }

   return(rates_total);
  }

И результат размещения на графике. Индикатор показывает среднеквадратичное отклонение цены закрытия на установленное значение предыдущих баров. Может использоваться как индикатор флета или силы движения.

Индикатор среднеквадратичного отклонения

Индикатор среднеквадратичного отклонения

<a href="https://www.instaforex.com/ru/">Форекс портал</a> Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий

Вы должны быть авторизованы, чтобы разместить комментарий.