市販EAのフォワード結果をバックテスト上でほぼ完ぺきに再現する

2018年12月12日

鏡に映った人

市販EAのフォワード結果をバックテストで再現してみようと思います。

購入していなくても検証ができるのでとても便利だと思います。

個人的な目的の1つがバックテスト上で市販EAに条件を追加して検証することなので、この手法を確立しておく必要がありました。

フォワード結果の取得方法

ゴゴジャンでは各EAのフォワード結果を提供していて、簡単にダウンロードできるようになっているのでそれを利用します。(素晴らしい機能です。)

例えば上記の各商品ページに飛びます。「フォワードテスト」タブを選択して、「CSVダウンロード」をクリックすれば完了です。

フォワードテスト結果ダウンロード


ファイルを編集する

ダウンロードしたファイルには沢山の情報が入っていたと思いますが、再現するために必要な情報は「約定日時、ポジション、決済日時」の3つだけです。

3項目の生データは以下のような形式になっているかと思います。

2015-03-23 00:20:00,ロング,2015-03-23 04:00:00
2015-04-01 00:01:00,ショート,2015-04-01 04:00:00

このままではプログラム側で扱うときに色々と面倒なので少し修正します。ここで修正するかプログラム側で修正するかは好みによるのですが、今回はここで修正することにしました。

2015.03.23 00:20:00,long,2015.03.23 04:00:00
2015.04.01 00:01:00,short,2015.04.01 04:00:00

変更部分は以下になります。

  • 日付部分の「-」→「.」
  • 「ロング」→「long」
  • 「ショート」→「short」

これで取込み準備が完了しました。



MT5に取込み

MT4にもほぼ同じプログラムで取り込めるのですが、今回はMT5を選択しました。

少しだけ横道に逸れますが、MT5でファイルを取り込む場合にかなりの罠があり、数時間ほど時間を無駄にしてしまったので情報を共有します。。。

MT4にファイルを取り込む場合

リアル稼働・・・MQL4\Files配下のファイルを操作できます。

バックテスト・・・tester\files配下のファイルを操作できます。



MT5にファイルを取り込む場合

リアル稼働・・・MQL5\Files配下のファイルを操作できます。

リアル稼働ではMT4と同じですが、バックテスト時が異なります。

MQL5でのファイル配置先は2ヵ所のどちらかを選ぶことができ、以下プログラムを打つとファイルを配置するべき場所が分かります。

  1. TerminalInfoString(TERMINAL_DATA_PATH);
  2. TerminalInfoString(TERMINAL_COMMONDATA_PATH);

[1の結果]
C:\Users\abcdefg\AppData\Roaming\MetaQuotes\Tester\XXXXX\Agent-127.0.0.1-3000

[2の結果]
C:\Users\abcdefg\AppData\Roaming\MetaQuotes\Terminal\Common

1個目のフォルダは一時領域のようにも見えますし、怪しすぎるのですが2個目のフォルダは全てのMT5で同じ場所を見るそうで・・・仕方なく1個目を選択しました。

1個目にファイルを配置して実行すると、「ファイルが存在しない旨のエラー」が発生しました。もしかしたら私の環境だけかもしれませんが、実行と同時にファイルが削除されるのです・・・実行してからブレークポイントで停止させて、そのうえで配置すれば読み込まれるのですが、毎回そんな手間なことはしたくもありません。

色々と調査したのですが結局原因が分からず、2個目を選択することにしました。すると、またもやファイルが存在しない旨のエラーが発生します。イメージとしては自動で両方のフォルダを参照してくれると思っていたので、かなりはまりました。

結論は2個目の方のフォルダを使うにはオプションの指定が必要でした。

[エラーになるパターン]
handle_read=f.Open(input_filename,FILE_CSV|FILE_READ);

[正常にオープンできるパターン]

handle_read=f.Open(input_filename,FILE_CSV|FILE_READ|FILE_COMMON);

後ろにFILE_COMMONを付けることで問題なく取り込むことができました。



検証する

プログラムを簡単にするため、複数ポジションを持たないEAのみ検証できるようにします。「Open→Close」は簡単にできるのですが、「Open1、Open2、Open3→Close3→Close1→Close2」などになってしまうと判定がやや面倒だからです。



検証のやり方

1分足で検証を行います。ダウンロードしたフォワードテスト結果を確認すると分かるのですが、仮に対象のEAが5分足できっかり動くタイプであっても微妙な誤差で1分単位のずれが発生するからです。



1ポジ型EAで検証

1ポジ型EA(ゴゴジャン)
ゴゴジャン
1ポジ型EA(再現)
再現

若干グラフの表示具合で差異があるように見えますが、ほぼ完璧に再現できました。OpenとCloseの時間が分かっているので当然ではありますが。



複数通貨対応型EAで検証

ゴゴジャンフォワードが複数通貨で、再現は1通貨のみです。(手動で不要な通貨データを排除しました。)

複数通貨型EA(ゴゴジャン)
ゴゴジャン
複数通貨型EA(再現)
再現

複数通貨と1通貨の比較なので誤差は出ますが、形状は同じになりました。



複数ポジションEAで検証

複数ポジションは除外と言ったのですが、再現側のデータを手動で間引いて強制的にワンポジ型にしてみました。

複数ポジ型EA(ゴゴジャン)
ゴゴジャン
複数ポジ型EA(再現)
再現

複数ポジと1ポジの比較なので誤差はありますが、特徴はほぼ捉えられているかと思います。



最後に

市販EAをほぼ再現することができましたので、次はこのEAに条件を付けてどうなるかを検証していこうと思います。



今回の検証で再確認できましたが、バックテストは本当に何でもありの世界なので、フォワードの結果がとても大事ですね。

市販EAの解析に興味がある方は以下もご覧ください。