1. MovingAverage.mq4への学習処理追加
最初にEAを新規生成してください。MovingAverage.mq4を修正していきますが、オリジナルソースコードはそのままの状態で保持しておきましょう。
次のようにMovingAverageTrainingというEAを新規作成してください。


EAを作成したらMovingAverage.mq4をメティエディタで開いてソースコード全文をコピーし、同じくMovingAverageTraining.mq4をメティエディタで開き、ペーストしてください。
買いだけのトレードにし、ロット数を固定にする
元のトレードでは買いと売りの両方を行っていますが、ここでは学習を単純にするために、売りは行うわず、買いのみで学習を進めます。
次のようにCheckForOpen()に記載されている売りの部分のアルゴリズムをコメントアウトして売りは行わないようにしてください。
もう一点元のソースコードを変更します。元のトレードではロット数がトレード毎に変更されます。学習結果をシンプルに評価できるようにロット数は毎回固定としましょう。
ロット数は LotOptimized() に記載されていますが常に0.1が返るように変更します。
それではいよいよソースコードにディープラーニングの学習ステップを埋め込んでいきます。一般にディープラーニングは次の順番で学習を行います。
- 学習モデルのセット
- 入力データのセット
- 教師データのセット
- 学習の実施
- テストの実施
まずは、1-4の処理について以下のように関数名を定義して、各関数をソースコードに追加していきます。
学習モデルのセット | make_train_model |
---|---|
入力データのセット | make_input_data |
教師ラベルのセット | make_label_data |
学習の実施 | do_train |
それぞれの関数の内部の処理の実装方法についてはこの後のチュートリアルで解説していきます。
学習モデルのセット(make_train_model)
学習モデルを作成します。これはOnInit()関数内で行います。
入力データのセット(make_input_data)
学習のための入力データをセットします。これは注文を行う時に実施します。CheckForOpen()関数内にデータセットを行う関数を配置してください。
教師データのセット(make_label_data)
教師ラベルデータをセットします。ここでは利益が出たのか、それとも損失がでたのかの2値をラベルとして生成し学習を行うモデルとします。
次のようにCheckForClose()に教師ラベルをセットする関数を配置しておいてください。引数には損益を渡すようにします。
学習の実施(do_train)
ここまでセットした学習モデル、学習データ、教師ラベルに基づいて学習を実施します。学習の実施は、全てのトレードが終了した後に実施させる必要があるので、OnDeinit()関数内で行います。
学習ステップの埋め込み箇所は以上になります。以後は各ステップに追加した関数の内部実装方法を説明します。最初は学習モデルの作成について説明します。
ライブラリファイルの配置
IzelのAPIを使った実装を行う前にライブラリファイルを配置しておきましょう。
MT4のフォルダ以下にMQL4というフォルダがあるのでそこに以下のファイルを配置してください。
MQL4¥Include | Izel.mqh |
---|---|
MQL4¥Libraries | Izel.ex4 |


MovingAverage.mq4の先頭で配置したIzelライブラリファイルをインクルードします。