45 lines
No EOL
2.6 KiB
MQL5
45 lines
No EOL
2.6 KiB
MQL5
//
|
|
// ペアトレで使用する数学系の関数まとめファイル
|
|
//
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| 線形回帰 学習
|
|
//+------------------------------------------------------------------+
|
|
vector LinearRegression(const vector &x, const vector &y)
|
|
{
|
|
vector results = vector::Zeros(2);
|
|
|
|
//--- サイズが違うときは0を返す
|
|
int size = (int)x.Size();
|
|
if(size != y.Size()) {
|
|
return results;
|
|
}
|
|
|
|
double x_mean = x.Mean();
|
|
double y_mean = y.Mean();
|
|
double numerator = 0.0, denominator = 0.0;
|
|
|
|
//--- 最小二乗法
|
|
for (int i = 0; i < size; i++) {
|
|
numerator += (x[i] - x_mean) * (y[i] - y_mean);
|
|
denominator += (x[i] - x_mean) * (x[i] - x_mean);
|
|
}
|
|
results[0] = numerator / denominator;
|
|
results[1] = y_mean - results[0] * x_mean;
|
|
|
|
return results;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| 線形回帰 予測
|
|
//+------------------------------------------------------------------+
|
|
double LinearRegressionPredict(double x, const vector &results)
|
|
{
|
|
return x * results[0] + results[1];
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| 線形回帰 残差
|
|
//+------------------------------------------------------------------+
|
|
double LinearRegressionResidual(double x, double y, const vector &results)
|
|
{
|
|
return y - (x * results[0] + results[1]);
|
|
} |