###はじめに
CAMPFIREでエンジニアをしている堤です。
今回アドベントカレンダー(クリスマスへのカウントダウンイベント)用の記事の投稿です。
自分がプログラミングに興味を持ったきっかけは、20代半ばの頃に「FXトレードを自動化できないだろうか?」と考えたことでした。
それから独学でプログラミング(MQL4)を学習し、個人でFX自動売買ソフト(通称EA)の開発をしてきました。
今回は自作したFX自動売買ソフト(MT4用のEA)の一つを題材に、プログラミングを少し使って検証作業を自動化する方法をご紹介します!
[補足]
・随所にある【用語説明】は、ぱぱっと書いたのでざっくりした内容になっています。
・FX・MT4について基礎知識があれば十分理解できる内容になっていますので、興味を持った方は是非少し勉強してみてください。
用語説明
・【MT4】:メタトレーダー4の略語。FXで最も使われている売買プラットフォーム
・【EA】:エキスパートアドバイザー(Expert Advisor)の略語。MT4専用の自動売買ソフト(MQL4という言語)
※ 今回の主旨ではないので、ロジックの詳細は割愛します。
用語説明
・【含み損】:未確定の損失
(例:1ドル=100円で1ドル買い、1ドル=90円に下がった時は含み損といい、1ドル=110円に上がった時は含み益という)
・破綻しなかった7つの口座の収益:7口座×20万万円×年利30% = +42万円
・破綻した1つの口座の損失:1口座×20万円×-100% = -20万円
8つの口座のトータル損益:42万円-20万円= +22万円(22万/160万=年利13.75%)
###検証対象の通貨ペア
28通貨ペア
[補足]
・FX業者のFXDD、XMで取り扱っている通貨ペアにそれぞれ〇を記入
・80%:時間帯などにより変動するスプレッドの内、80%がこの数値以下であるということ
・総数など:計測した波の件数と平均値幅、最大値幅、標準偏差、3σ(確か1時間足)
・仕掛け幅:それぞれの数値から設定したナンピンの仕掛け幅
###検証期間
2015年7月~2020年8月の約5年間(バックテスト期間を月別に設定し、62ヵ月)
用語説明
###検証環境
XM社のMT4
用語説明
###検証足データ(過去の値動きデータ)
Quant Data ManagerのTickデータを使用
[参考]
https://strategyquant.com/quantdatamanager/
用語説明
##Step 1.検証の実行
####(1) EA用のパラメーター設定ファイル(setファイル)を月別×通貨ペア別で作成する
※設定方法については「EA パラメーター setファイル」などで検索
[setファイルの内容の例]
[設置場所]
~\AppData\Roaming\MetaQuotes\Terminal\該当フォルダのpath\tester\任意のフォルダ名
[補足]
別通貨ペアのファイルを作るなど、txtファイルの内容を少し変えたものを大量に複製する際にはTExchangeという無料ツールが便利です。
####(2) batでbatを連続実行し、MT4のバックテストを自動化する
先の(1)で作成したファイルは合計28通貨×62ヵ月×仕掛け幅3パターン×注文方法2パターン(成行注文・指値注文)で10,416個になります。
1個のファイルのバックテストを実行するのに、今回のEAはだいたい5~10分かかりました。
これを手動でやるとなると、5~10分おきにPCを確認し、パラメーター設定ファイルを変更し、テスト期間と通貨ペアを変更した上でテストを実行するという作業を10,416回繰り返す必要があり、現実的ではありません。
そこで(1)で作成したEA用のパラメーター設定ファイル(setファイル)を、通貨ペアごとにbat化し、それをbatで自動で連続実行させます。
用語説明
[batファイルの内容の一例]
AUDJPY.bat(AUDJPYの2015年7月~2020年8月の月別テスト用)※画像はクリックで拡大可能
[batファイルを実行するためのbatファイルの内容の一例]
※4台のMT4で同時に実行していたため、1/4の7通貨ペア以外はコメントアウトしています
[補足]
・時間短縮のためには、複数台のMT4をインストールして同時に実行したり、VPSやリモートデスクトップを契約するのもあり
用語説明
##Step 2.出力した検証データのファイルを整形
[バックテスト後の結果レポート]
こういったファイルが実施した月数×通貨ペア数分だけ出力されます。
[htmファイルの一例]
次にこのファイルの中の各種数値を抽出し、集計します。(総損益、取引通貨量(Lot)、最大ドローダウン、必要証拠金など)
最大ドローダウン(最大含み損)などはhtmファイルの数だけ、ファイルを開いて手動コピペしていると、ファイルの数だけ実行する必要があります。(つまり1万回以上)
それは現実的ではないので、今回はsakuraエディタでgrep検索して抽出しました。(Visual Studio CodeやSublime Textだと抽出しづらかったため)
用語説明
※余談ですが、Quant Data Managerで生成したTickデータでバックテストをすると、モデリング品質(テスト品質)がn/aとなります。
[整形したデータをExcelのピボットテーブルで一覧化] ※画像はクリックで拡大可能
通貨ペア別×月別の「損益」と「必要証拠金額」などをピボットテーブルで一覧化し、任意の通貨ペアの組み合わせでの損益、最大含み損、必要証拠金額などを検証します。
用語説明
##Step 3.算出された利回りと破綻率でシュミレーションする
[任意の通貨ペアの組み合わせでの想定破綻率と想定月利]
[補足]
・上部の「割合」は各通貨ペアの月別の最大含み損の金額(途中から確率となっているが、意味は同じ)
・左側の表の「over MAXDD」は指定した通貨ペアで運用した際の月別の最大含み損額の割合
(30万円が8.1%というのは、62ヵ月中の8.1%の割合で指定した6通貨ペアの合計最大含み損が30万円を超えたということ)
・月利、年間破綻率は資金70万円で指定した6通貨ペアを運用した際の数値
・右側の表は100人が半年間運用した際の結果のシュミレーション(以下のグラフは、6人が1年間運用したシュミレーション)
[設定した勝率と破綻率での損益シュミレーション] ※画像はクリックで拡大可能
[補足]
70万円を8口座に分割し1口座当たりの資金は8.75万円として、約1年(12.5ヵ月)運用した際のシュミレーション×6ケース
・平均利益:1口座辺りの資金8.75万円×月利4.46%として3,903円
・平均損失:1口座が破綻した時の損失である-8.75万円
・勝率:破綻回避率(100%-破綻率3.2%とし96.8%)
※試行回数100回:100回/8口座/12ヵ月 → 1.04年…約1年のシュミレーション
[「=RAND()」で出したランダムな数値と設定勝率を元に上記グラフを描写] ※画像はクリックで拡大可能
##終わりに
検証過程においてプログラミングを使う要素はほんの少しですが、それによって短縮できる時間は非常に大きいです。
仮に今回の題材として取り上げたEAの検証を手動で1日8時間やっていたとしたら、何日かかっていたでしょうか?
なんと約217日(10,416カ月分×(最短5分+ 確認及び設定変更5分))もかかる計算になります。
それが少しのプログラミングの知識を使うだけで、最短で9日程(10,416カ月分×最短5分/1件÷4台のMT4)で終わらせることができます。
PCのスペックが高かったり、VPSを使えば更に短縮できます。
有料・無料に関わらず、失いたくない資金を託すのであれば、必ず事前に十分な検証をされることをオススメします。その際に、この記事が少しでも役に立てれば幸いです。
最後まで読んでくださってありがとうございました!