Получение статистики

Для получения описательной статистики матриц и векторов предназначены перечисленные ниже методы. Все они применимы к вектору или матрице целиком, а также к заданной оси матрицы (по горизонтали или по вертикали). При применении целиком к объекту эти функции возвращают скаляр (единственное число). При применении к матрице по какой-либо из осей возвращается вектор.

Общий вид прототипов:

T vector<T>::Method(const vector<T> &v)

T matrix<T>::Method(const matrix<T> &m)

vector<T> matrix<T>::Method(const matrix<T> &m, const int axis)

Перечень самих методов:

  • ArgMax, ArgMin — нахождение индексов максимального и минимального значений;
  • Max, Min — нахождение максимальное и минимальное значения;
  • Ptp — нахождение диапазона значений;
  • Sum, Prod — вычисление суммы или произведения элементов;
  • CumSum, CumProd — вычисление кумулятивной суммы или произведения элементов;
  • Median, Mean, Average — вычисление медианы, среднего арифметического или взвешенного среднего арифметического;
  • Std, Var — вычисление стандартного отклонения и дисперсии;
  • Percentile, Quantile — вычисление перцентилей и квантилей;
  • RegressionMetric — вычисление одной из предопределенных регрессионных метрик, как ошибки отклонения от линии регрессии на данных матрицы/вектора.

Пример вычисления стандартного отклонения и перцентилей для размаха баров (в пунктах) текущего символа и таймфрейма приведен в файле MatrixStdPercentile.mq5.

input int BarCount = 1000;
input int BarOffset = 0;
   
void OnStart()
{
   // получаем котировки текущего чарта
   matrix rates;
   rates.CopyRates(_Symbol_PeriodCOPY_RATES_OPEN | COPY_RATES_CLOSE,
      BarOffsetBarCount);
   // рассчитываем приращения цен на барах
   vector delta = MathRound((rates.Row(1) - rates.Row(0)) / _Point);
   // отладочная печать начальных баров
   rates.Resize(rates.Rows(), 10);
   Normalize(rates);
   Print(rates);
   // печать метрик приращений
   PRTF((int)delta.Std());
   PRTF((int)delta.Percentile(90));
   PRTF((int)delta.Percentile(10));
}

Фрагмент журнала:

(EURUSD,H1)        [[1.00832,1.00808,1.00901,1.00887,1.00728,1.00577,1.00485,1.00652,1.00538,1.00409]
(EURUSD,H1)         [1.00808,1.00901,1.00887,1.00728,1.00577,1.00485,1.00655,1.00537,1.00412,1.00372]]
(EURUSD,H1)        (int)delta.Std()=163 / ok
(EURUSD,H1)        (int)delta.Percentile(90)=170 / ok
(EURUSD,H1)        (int)delta.Percentile(10)=-161 / ok