MT4バックテストでのトラブル・対応事例
こんばんは。
AIの力を借りてバックテスト用Pythonスクリプト作成し、分析・トレード戦略の検証などをやっています。
今回システムトレード用のMT4を利用したバックテストを初めてやってみましたが、トラブりました。
今後の備忘録、および、これから始めてみようという方の参考になるよう記事として共有いたします。
なお、先日バックテスト関連の記事も出していますので、ぜひご覧ください。
背景
「高い勝率で『小利大損』を乗り切る」方針のFXトレード戦略を検討しています。
その一環としてバックテスト用のPythonスクリプトの作成(AIに依頼して)をしてきました。
ある程度の結果が出てきたのですが、実運用するための準備としてEA作成、MT4でのバックテストに着手しています。
MT4は、全く初めてで、調べながらやってみました。
その際に、いくつかトラブルに遭遇し、ネットで調べてもピンポイントで解決するような情報が見つからないものがありました。
同様のトラブルに困っている方の参考になればいいかなと思います。
前提
まず、前提・環境などについては以下のとおりです。
Windows 11 Pro HPノートPC
ゴールデンウェイ・ジャパン MT4(PCインストール版)を利用
https://fxtrade.co.jp/system/ヒストリカルデータはクリック証券のサイトより2013年~1分足データ
対象の通貨ペアは EURUSD
参考に、バックテストの実施のみであれば、デモアカウントの登録は不要で、インストールしたMT4もサーバー接続せずに利用可能です。
EA実装予定のトレードルールは高い勝率の利小を積み上げ、損大をカバーできるようなものを実装します。
そのため、ヒストリカルデータから最適な利確幅・損切幅、エントリー・エグジットのタイミングを調べておきます。
また、上記の戦略をもとにChatGPTでEAのスクリプトを作成しました。
MT4バックテストでのトラブル
FXTF版のMT4でのバックテスト実施までのトラブルは大きく分類すると以下の2種類でした。
私の遭遇した問題、それぞれの事象と対策をまとめました。
ヒストリカルデータのインポート・利用
【事象】10年超の大きなデータを取りこもうとすると、インポート画面にデータが表示されない
【対策1】
入力csvファイルのフォーマットをサンプルデータに合わせる。
日付と時刻は別項目、また、volume項目も入れる。
例: 2024.10.31,12:48,1.08715,1.08718,1.08705,1.08707,38【対策2】
事前にサンプルデータを確実にクリアしておく。
「File > データフォルダを開く」で表示されるフォルダの "history"フォルダより目的の通貨ペアの *.hstファイルを削除した上で、再起動しておく。
historyには接続先サーバーごとにフォルダがあり、そこに*.hstファイルが保存されます。
私の場合サーバーに接続していないので、この接続先フォルダは "default"になります。なお、正常に取りこれまた後、history内のデータのコピーをバックアップとして保持しておくと、復活させるのが容易です
【事象】10年超の大きなデータを取り込んだ後、チャート表示、または、バックテスト実施をすると取り込んだデータの直近2年分程度のデータのみなってしまう
【対策1】「ツール > オプション >」「チャート」タブのヒストリー内最大バー数、チャート最大バー数を最大に設定。999999999999
【対策2】
事前データクリアを実施する際にチャート表示もすべて削除しておく。チャート表示を残すと、付随するデータが残る模様。
バックテスト実施
【事象】バックテストで利用されるデータが取り込んだデータの一部のみ
【対策1】
ヒストリカルデータの取込み・利用でのトラブル対策を再確認・実施してみる。【対策2】
「ストラテジーテスター 」の「セッティング」タブの「期間を指定」を明示的に指定する。これでうまくいくこともありました。
【事象】バックテスト実施したが、結果がでない・取引がゼロ通常は、「操作履歴」にエラーメッセージなどが表示されるのでそのエラーコードを頼りに対策をとることになります。以下が参考になります。
https://mt4-traders.com/error-codes/error-list/
私が遭遇したエラーコードと対策は下のとおりです。【エラーコード130】ERR_INVALID_STOPS
私の場合には、損切幅(stop_loss)ではなく利確幅(take_profit)の問題でした。
take_profitが購入価格+30pipsでしたが、最低幅がストップレベルとして決まっています。(知りませんでしたww)
私の場合には、buy_orderで利確幅を指定するのではなく、価格差の判定により、決済取引を別注文として発注するようにEAの変更をしました。【エラーコード134】ERR_NOT_ENOUGH_MONEY
証拠金が足りないというエラーですが、テスター画面の「セッティング」タブのエキスパート設定で証拠金の指定ができるので金額を増やしました。
始めてMT4でのバックテストを実施してみましたが、見た目・操作感も古いアプリケーションで仕様が分かりにくいですね。
ただし、一度慣れてしまえば便利に使えるとは思います。
Pythonでのバックテストと比較していい点は、
処理速度が速い
処理結果のレポートがきれいにまとまって表示できる
一方Pythonでのバックテストはトレードルールの変更・テストがやりやすいので基本的には併用していこうと思います。
Python側でルールの検討・調整、その後MT4でバックテスト&最適化の実施という形で進めるのがいいかと思います。
最後に参考までに今回実施したバックテスト結果はこんな感じになりました。
最後に
この記事はお気に入りいただけましたでしょうか?
内容お役にたちましたらうれしく思います。
また、サポートなど応援いただけましたら幸いです。
記事の内容を有効に活用できたなど、記事を気に入っていただけたようでしたらサポートしていただけますと嬉しいです。 また、こんなことを知りたい、あんなことができないかなど記事にしたいことがございましたら、サポートの有無にかかわらずお知らせくださいませ。