获取统计数据

下面列出的方法旨在用于获取矩阵和向量的描述性统计。它们全部适用于向量或整个矩阵,也适用于给定矩阵轴(横轴或纵轴)。当完全应用到一个对象时,这些函数返回一个标量(奇异)。沿任何轴应用到矩阵时,返回一个向量。

原型的总体外观:

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()
{
   // 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));
}

日志:

(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