pairs_trading/math_for_pairs_trading.mqh
super.admin 7aec422ada convert
2025-05-30 16:15:29 +02:00

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]);
}