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

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

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

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

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

отклонения

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#property copyright   "Copyright 2016, Sergey Deev"
#property link        "http://fx-prog.ru"
#property description "StatVariance"
#property version   "1.0"
#property strict
#include <Math\Alglib\statistics.mqh>

#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> Вы можете оставить комментарий, или ссылку на Ваш сайт.

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

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