以下の記事では、MetaTrader内で深層強化学習モデルの訓練と予測を自動的に繰り返すエキスパートアドバイザー(EA)を作成し、その実行用ツールとバックテスト用ツールを配布しています。このEAは、最新情報を定期的に取得し、ディープラーニングを取り入れて自動でモデルの訓練を繰り返す機能を搭載しています。
このページでは、リンク先の記事で紹介されている深層強化学習型EAであるDQN-EA(Deep Q Network Expert Adviser)を稼働させるために必要な環境構築と、MetaTrader5(MT5)にDQN-EAをセットして実際に動かす方法について、初心者にもわかりやすい形で詳しく説明していきます。具体的には、FX専用VPSのセットアップ、MT5のインストール、Python環境の準備といった、DQN-EAを運用するために必要となる工程を一つ一つ丁寧に解説します。環境構築や操作方法に不安がある方は、ぜひこのページを参考にしてください。
VPSの必要性
「バーチャル・プライベート・サーバー(Virtual Private Server、VPS)」は、あたかも自分専用の仮想PCがあるかのように機能するサーバーです。これは、機械学習(特にディープラーニング)を用いたFX自動売買において重要な役割を果たします。高度な計算やデータ処理が求められるディープラーニングモデルを運用しつつFX自動売買を行うためには、ハイメモリで24時間365日安定した環境が必要だからです。
FX専用VPS「お名前.com デスクトップクラウド」の紹介
FX専用VPSとは、特にFX自動売買のために設計されたVPS(バーチャル・プライベート・サーバー)です。ここで紹介するFX専用VPSの【お名前.com デスクトップクラウド】は、デスクトップ利用に特化しており、サーバーの運用に不慣れな初心者でも簡単に使用できるように設計されています。
MT4やMT5の利用
「お名前.com」のFX専用VPSを使用すると、世界中で広く利用されているMetaTrader4(MT4)やMetaTrader5(MT5)といったFX取引プラットフォームを活用することができます。これらのプラットフォームは、高度なチャート機能やインジケーターを備えており、EA(Expert Advisor)として知られる自動売買プログラムの運用に最適です。これは、機械学習モデルを組み込んだ自動売買戦略を実行するのに特に重要です。
Pythonの利用
FX専用VPS「お名前.com デスクトップクラウド」は、デスクトップPCと同様に扱うことができます。これにはPythonのインストールと使用が含まれます。ユーザーは、通常のPCで行うように簡単にPythonをインストールし、FX自動売買システムの開発や管理に活用できます。この機能は、機械学習モデルを組み込んだ自動売買戦略のカスタマイズや最適化に特に有効です。
VPSの環境設定
VPSを契約して立ち上げた後、DQN-EAを実際に動かすためにはいくつかの環境設定を行うことが必要です。ここでは、「お名前.com デスクトップクラウド」のFX専用VPSを例に進めます。
まず、FX専用VPS上のブラウザで以下のURLにアクセスしてください。
MT5のインストール
FX専用VPSにMetaTrader5(MT5)をインストールする必要があります。MT5のインストールについて不明点があれば、以下の記事を参考にしてください。MT5のダウンロードからインストール、基本的な設定方法までを詳しく説明しています。
Python環境の準備
機械学習はPythonを利用して行うので、FX専用VPSにPythonもインストールする必要があります。さらに、必要なライブラリもインストールしておく必要があります。以下の流れに沿ってください。
- こちらのリンクから、Pythonをダウンロードして起動します。今回は、Python3.9のWindows(64bit)用である「python-3.9.13-amd64.exe」をダウンロードした前提で話を進めます。
- “Add Python 3.x to PATH” をチェックし、Install now をクリックしてインストールが完了するのを待ちます。
- スタートボタンをクリックし、「Windows システム ツール」 の 「コマンド プロンプト」を起動します。
- コマンドプロンプト上で「pip install –upgrade pip」と入力し、Enterキーを押下します。「Successfully installed pip-24.0」のような表示が出れば、pipの更新が完了です。
- さらにコマンドプロンプト上で「pip install MetaTrader5」と入力し、Enterキーを押下します。「Successfully installed MetaTrader5-5.0.45」のような表示が出れば、MetaTrader5ライブラリのインストールが完了です。
- 同様の流れで、以下についてもインストールします。
- pip install pandas
- pip install numpy
- pip install scikit-learn
- pip install torch torchvision torchaudio
以上でPython環境の準備は一通り完了です。
Python環境のテスト
Python環境の準備が正しく完了しているかを確認してみましょう。これは、DQN-EAでも使用している「バッチファイルからPythonスクリプトを実行する仕組み」が問題なく動作するかの確認も兼ねています。
FX専用VPSでは、ユーザー名が「C:\Users\MT4XXX-XX-XXXXX」のように「MT4〜」という形式で設定されていることが多いですが、これは各環境によって異なります。以降の説明では、パスを「C:\Users\[ユーザー名]」のように[ユーザー名]部分は置き換えて表現しますので、ユーザー名はご自身のものに置き換えてください。
テスト用Pythonスクリプトの作成
- 「C:\Users\[ユーザー名]」フォルダを開き、右クリックして「新規作成 > テキスト ドキュメント」を選択し、新しいテキストファイルを作成します。
- 作成したテキストファイルのファイル名を「test.py」に変更します。これにより、ファイルがPythonスクリプトとして認識されます。
- 「test.py」を右クリックして、「Edit with IDLE」を選択します。これによりPythonの統合開発環境であるIDLEが開きます。
- 以下のテスト用のPythonコードをIDLEにコピペします。コードをコピーした後、ファイルメニューから「保存」を選択し、IDLEを閉じます。
# 必要なライブラリをチェックするスクリプト import sys def try_import(library_name): try: __import__(library_name) print(f"ライブラリ '{library_name}' のインポートに成功しました。") except ImportError: print(f"エラー: ライブラリ '{library_name}' をインポートできませんでした。インストールが必要です。") # チェックするライブラリのリスト libraries = [ "pandas", "numpy", "os", "joblib", "torch", "torch.nn", "torch.optim", "torch.utils.data", "random", "sklearn.preprocessing" ] # 各ライブラリをチェック for lib in libraries: try_import(lib) # スクリプト終了 sys.exit(0)
テスト用バッチファイルの作成
- 「C:\Users\[ユーザー名]」フォルダで右クリックし、「新規作成 > テキスト ドキュメント」を選択して新しいテキストファイルを作成します。
- 作成したテキストファイルのファイル名を「test.bat」に変更します。これにより、ファイルがバッチファイルとして認識されます。
- 「test.bat」を右クリックして、「編集」を選択します。これによりテキストエディタが開きます。
- 以下のバッチファイルのコードをテキストエディタにコピペします。ここでの[ユーザー名]やPythonのバージョン(ここでは「Python39」)は、各自の環境に合わせて適切に置き換える必要があります。コードをコピーした後、ファイルメニューから「保存」を選択し、テキストエディタを閉じます。
@echo off
C:\Users\[ユーザー名]\AppData\Local\Programs\Python\Python39\python.exe C:\Users\[ユーザー名]\test.py
pause
テストの実施
作成した「test.bat」は、Pythonスクリプト「test.py」を実行するためのバッチファイルです。そしてこの「test.py」は、特定のPythonライブラリがシステムにインストールされているかを確認するためのスクリプトです。
「test.bat」をダブルクリックすると、「test.py」が実行され、コマンドプロンプトのウィンドウが開きます。以下のライブラリ(DQN-EAで実際に使用するもの)をチェックするプログラムです。
- pandas
- numpy
- os
- joblib
- torch
- torch.nn
- torch.optim
- torch.utils.data
- random
- sklearn.preprocessing
ご覧のように表示されれば、全てのライブラリのインポートに成功していることがわかります。
失敗した場合は「エラー: ライブラリ ‘ライブラリ名’ をインポートできませんでした。インストールが必要です。」というメッセージが表示されますので、該当のライブラリのインストールを確認してください。
DQN-EAの設置と稼働
さて、いよいよ実践です。DQN-EAに必要なファイルを設置して動かす工程に進みます。必要なファイルは以下の記事から用意してください。
DQN-EAを稼働するためには、以下の5つのファイルを設置することが必要です。
- DQN-EA.ex5(MT5用のEA)
- DQN-train.bat(DQN-train.pyを動かすためのバッチファイル)
- DQN-predict.bat(DQN-predict.pyを動かすためのバッチファイル)
- DQN-train.py(DQNモデルの訓練を行うためのPythonスクリプト)
- DQN-predict.py(DQNによる予測を行うためのPythonスクリプト)
「DQN-EA.ex5」の設置
MT5には「DQN-EA.ex5」をセッティングしますが、これは「MQL5 -> Expertsフォルダ」に保存する必要があります。
[ユーザー名]と[ターミナルID]の確認方法
MT5あるいはMetaEditorの「ファイル」->「データフォルダを開く」をクリックします。
すると、以下のMQL5のパスが確認できますが、そこに表示されているものが[ユーザー名]と[ターミナルID]です。
[ユーザー名]と[ターミナルID]を確認したら、上記の「MQL5 -> Expertsフォルダ」に「DQN-EA.ex5」を保存します。
バッチファイルとPythonスクリプトの設置
以下の4つのファイルは、全て「C:\Users\[ユーザー名]」フォルダの直下に置いてください。
- DQN-train.bat(DQN-train.pyを動かすためのバッチファイル)
- DQN-predict.bat(DQN-predict.pyを動かすためのバッチファイル)
- DQN-train.py(DQNモデルの訓練を行うためのPythonスクリプト)
- DQN-predict.py(DQNによる予測を行うためのPythonスクリプト)
バッチファイルの編集
「DQN-train.bat」を右クリックして、「編集」を選択します。これによりテキストエディタが開きます。そして、以下のコードの[ユーザー名](2箇所)をご自身のものに置き換えます。「DQN-predict.bat」についても同様に[ユーザー名](2箇所)を変更します。
DQN-train.bat
DQN-predict.bat
Pythonスクリプトの編集
「DQN-train.py」を右クリックして、「Edit with IDLE」を選択します。これによりPythonの統合開発環境であるIDLEが開きます。そして、以下の[ユーザー名]と[ターミナルID]をご自身のものに置き換えます。「DQN-predict.py」についても同様に、以下の[ユーザー名]と[ターミナルID]を変更します。
DQN-train.py
DQN-predict.py
DQN-EAのパラメータ設定から起動まで
今回は、XMのデモ口座でGOLDの取引を行う想定で進めます。
チャートにEAをセット
まず、エキスパートアドバイザ内の「DQN-EA.ex5」を、GOLDのチャートにドラッグ&ドロップします。
“仕様”タブ
すると、以下のような画面が立ち上がりますので、「仕様」タブで「DLLの使用を許可する」にチェックを入れます。
“共有”タブ
また、共有タブで「アルゴリズム取引を許可」にチェックが入っているかを確認します。
“インプット”タブ
あとはインプットの設定ですが、ここの”ユーザー名”についてもご自身の環境の[ユーザー名]を入力してください。
その他の設定は、デモ口座で試してみる程度であればひとまずデフォルトのままで問題ないです。
EAを稼働(自動売買を開始)
MT5のチャートの上の方にある「アルゴリズム取引」というボタンをクリックすると、稼働開始します。以下のように、「アルゴリズム取引」のボタンのところが緑色の▷になっていることを確認してください。
稼働停止中(自動売買オフ)
稼働中(自動売買オン)
DQN-EAの動作確認(DQNモデルの訓練)
このDQN-EAは、起動時(EAセット時)にDQNモデルの訓練を行う仕組みになっています。したがって、EAをセットしてDLLの使用やアルゴリズム取引を許可していて、ユーザー名を正しく入力している状態であれば、まず以下のようにコマンドプロンプトが立ち上がって、DQNモデルの訓練が行われます。
もし起動しない場合は、改めてEAをセットし直してみてください。
問題なく訓練が行われていると、「C:\Users\[ユーザー名]」フォルダの直下に「DQN-training_data.csv」、「DQN_model.pth」、「DQN-scaler.pkl」というファイルが作成されているはずです。
DQN-EAの動作確認(DQNモデルによる予測)
EAの稼働を開始したら、スプレッドが指定した許容スプレッドを超えていない限り、1分間隔でDQNモデルによる予測を行います。訓練時と同様にコマンドプロンプトが立ち上がりますが、処理が速すぎてすぐ閉じてしまうので内容はよくわからないかもしれません。
結果は、「C:\Users\[ユーザー名]」フォルダの直下に「DQN-prediction_results.txt」というファイルが作成されますので、そこで確認します。
モデルによる予測結果(DQN-prediction_results.txt)
DQNモデルでは、各可能な行動(この場合は0, 1, 2)に対してQ値(その行動を取った場合の期待される報酬の合計値)を出力します。ここではその中で最も高いQ値を示した行動の期待報酬を数値として表しています。例えば一番下の結果であれば、行動’1’のQ値が16.8961で最大ということです。つまり、order_flg=1がMT5に連携されて、buyエントリーフラグが立つという形です。
バックテスト用DQN-EAの設置と稼働
さて、今度はバックテストです。バックテスト用のDQN-EA_backtestに必要なファイルを設置して動かす工程についても解説します。必要なファイルは以下の記事から用意してください。
DQN-EA_backtestを稼働するためには、以下の7つのファイルを設置することが必要です。
- DQN-EA_backtest.ex5(MT5用のEA)
- DQN-delete_files.bat(DQN-delete_files.pyを動かすためのバッチファイル)
- DQN-backtest.bat(DQN-backtest.pyを動かすためのバッチファイル)
- DQN-profit_summary.bat(DQN-profit_summary.pyを動かすためのバッチファイル)
- DQN-delete_files.py(ファイルを削除するためのPythonスクリプト)
- DQN-backtest.py(バックテストを行うためのPythonスクリプト)
- DQN-profit_summary.py(損益を集計するためのPythonスクリプト)
EAのセット、バッチファイルとPythonスクリプトの[ユーザー名]と[ターミナルID]の変更はほぼ同様ですので、同様に対応してみてください。なお、バックテストについては以下の記事で紹介しているものと同等の仕組みを採用しています。あわせてご覧ください。
DQN-EA_backtestのパラメータ設定から起動まで
こちらも、XMのデモ口座でGOLDの取引を行う想定で進めます。
チャートにEAをセット
まず、エキスパートアドバイザ内の「DQN-EA_backtest.ex5」を、GOLDのチャートにドラッグ&ドロップします。
“仕様”タブ
すると、以下のような画面が立ち上がりますので、「仕様」タブで「DLLの使用を許可する」にチェックを入れます。
“共有”タブ
また、共有タブで「アルゴリズム取引を許可」にチェックが入っているかを確認します。
“インプット”タブ
あとはインプットの設定ですが、ここの”ユーザー名”についてもご自身の環境の[ユーザー名]を入力してください。
開始日と終了日の設定を変えることによって、バックテスト期間を設定できます。デフォルトは2024年2月の1ヶ月間です。
バックテスト結果
バックテストを開始すると、以下のようなコマンドプロンプトが複数回、何度も立ち上がって消えたりします。DQNモデルの訓練と予測を繰り返している処理ですので正常です。
最終的に全ての処理が完了すると、以下のようなファイルが出力されているはずです。
その中で、以下の2つのファイルが最終結果です。
DQN-profit_summary.txt
Buy Win: 8134
Sell Win: 4910
Buy Lose: 6482
Sell Lose: 4312
Draw: 3522
Total Win: 13044
Total Lose: 10794
Total Records: 27360
Buy Win Rate: 55.65%
Sell Win Rate: 53.24%
Win Rate: 54.72%
Entry Rate: 87.13%
Buy Gross Profit (Win): 28547.81
Sell Gross Profit (Win): 22330.43
Buy Gross Profit (Lose): -21443.39
Sell Gross Profit (Lose): -13518.09
Draw Gross Profit: 3.60
Total Gross Profit: 15920.36
Buy Net Profit (Win): 26921.01 (Spread: 1626.80)
Sell Net Profit (Win): 21348.43 (Spread: 982.00)
Buy Net Profit (Lose): -22739.79 (Spread: 1296.40)
Sell Net Profit (Lose): -14380.49 (Spread: 862.40)
Draw Net Profit: 0.00 (Spread: 3.60)
Total Net Profit: 11149.16 (Spread: 4771.20)
DQN-net_profit.png
バックテスト結果の再現性について
DQN (Deep Q Network) モデルによる予測結果は、同じインプットデータであっても試行を繰り返すと異なる結果が出ることがあります。これは深層学習の分野では一般的な現象ですが、いくつかの理由があります。
1. 初期重みのランダム性
ニューラルネットワークをトレーニングする際、初期の重みは通常ランダムに設定されます。これにより、同じデータセットでモデルを複数回トレーニングすると、異なる学習経路をたどり、結果的に異なる予測結果が得られることがあります。
2. ミニバッチの選択
DQNモデルを含む多くのディープラーニングモデルでは、トレーニング中にミニバッチと呼ばれるデータの小さなサブセットを使用します。これらのミニバッチはランダムに選択されるため、トレーニングプロセスにランダム性が導入されます。
3. エクスプロレーションのランダム性
DQNでは、行動選択のためにε-greedyアルゴリズムなどのエクスプロレーションメカニズムがしばしば用いられます。これにより、一定の確率でランダムな行動が選択され、これが結果の変動性に寄与します。
4. ストキャスティックな最適化アルゴリズム
SGD(確率的勾配降下法)やその変種は、トレーニング中のパラメータ更新においてランダム性を導入します。これは学習プロセスの各ステップで全データセットではなく、ランダムに選ばれたミニバッチを使用するためです。
バックテスト結果比較
ここでは同じロジック・同じインプットデータでバックテストを複数回行った結果を簡単にご紹介します。
上で見た結果を’DQN1’とし、その後は全く同じ前提で7回バックテストを繰り返し、’DQN2~8’としました。その結果比較は以下の通りです。
主要数値
損益グラフ
この結果がどの程度安定するのかというのも、モデルの性能を評価する際の指標になり得ます。いろいろな工夫を加えてバックテストを試してみてください。
まとめ
以上、DQN-EA(Deep Q Network Expert Adviser)をダウンロードした方々に向けて、VPSのセットアップからMT5のインストール、Pythonの設定、そして DQN-EAを実際に稼働させるための方法、バックテスト用のDQN-EA_backtestのセッティング方法までをご紹介しました。
改めて、DQN-EAのロジックやコード詳細については以下の記事をご参照ください。