65 lines
3.9 KiB
MQL5
65 lines
3.9 KiB
MQL5
//
|
|
// 動作確認などで使用するスクリプトファイル
|
|
//
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void OnStart()
|
|
{
|
|
const string sym_name[] = {"EURUSD", "GBPUSD"};
|
|
const int arr_size = ArraySize(sym_name);
|
|
vector x, y;
|
|
vector resuls;
|
|
|
|
x.CopyRates(sym_name[0], PERIOD_D1, COPY_RATES_CLOSE, 1, 5);
|
|
y.CopyRates(sym_name[1], PERIOD_D1, COPY_RATES_CLOSE, 1, 5);
|
|
|
|
resuls = LinearRegression(x, y);
|
|
|
|
Print("線形回帰モデル: y = ", resuls[0], "x + ", resuls[1]);
|
|
}
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| 線形回帰 学習
|
|
//+------------------------------------------------------------------+
|
|
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]);
|
|
}
|
|
//+------------------------------------------------------------------+
|