Obtener estadísticas

Los métodos enumerados a continuación están diseñados para obtener estadísticas descriptivas de matrices y vectores. Todas ellas se aplican a un vector o a una matriz en su conjunto, así como a un eje de matriz determinado (horizontal o verticalmente). Cuando se aplican por completo a un objeto, estas funciones devuelven un escalar (singular). Cuando se aplica a una matriz a lo largo de cualquiera de los ejes, se devuelve un vector.

Aspecto general de los prototipos:

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)

Lista de métodos:

  • ArgMax, ArgMin: devuelve índices de valores máximos y mínimos
  • Max, Min: devuelve los valores máximo y mínimo
  • Ptp: devuelve un rango de valores
  • Sum, Prod: calcula la suma o el producto de elementos
  • CumSum, CumProd: calcula la suma o el producto acumulados de elementos
  • Median, Mean, Average: calcula la mediana, la media aritmética o la media aritmética ponderada
  • Std, Var: calcula la desviación típica y la varianza
  • Percentile, Quantile: calcular percentiles y cuantiles
  • RegressionMetric: calcula una de las métricas de regresión predefinidas, como los errores de desviación de la línea de regresión sobre los datos matriciales/vectoriales

En el archivo MatrixStdPercentile.mq5 se ofrece un ejemplo de cálculo de la desviación estándar y los percentiles para el rango de barras (en puntos) del símbolo y el marco temporal actuales.

input int BarCount = 1000;
input int BarOffset = 0;
   
void OnStart()
{
   // getting current chart quotes
   matrix rates;
   rates.CopyRates(_Symbol_PeriodCOPY_RATES_OPEN | COPY_RATES_CLOSE
      BarOffsetBarCount);
   // calculating price increments on bars
   vector delta = MathRound((rates.Row(1) - rates.Row(0)) / _Point);
   // debug print of initial bars
   rates.Resize(rates.Rows(), 10);
   Normalize(rates);
   Print(rates);
   // printing increment metrics
   PRTF((int)delta.Std());
   PRTF((int)delta.Percentile(90));
   PRTF((int)delta.Percentile(10));
}

Registro:

(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