Использование библиотеки 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);
  }

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

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

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

Вы можете оставить комментарий, или ссылку на Ваш сайт.

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

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