(12) 【MT5】 バックテストのヒストリー品質を上げる

投稿者: | 2017年9月17日

9,537 views

この記事は最終更新から 2534日 が経過しています。

(1) やりたいこと

前回の 「(11) 【MT5】 バックテストでヒストリー品質が低い理由」 では、ヒストリー品質 9%の原因を調べてみた。その結果 「高品質なデータをインポート」 する必要があることがわかった。

とりあえず今回は 「(2) 過去データの収集」 で某ブローカーのサイトからいただいたMT4用データ(2005年~2017年 USDJPY M1データ)をインポートして使ってみることにする。

(2) データを一部修正

MetaTrader5のヒストリカルデータは、MetaTrader4のものとちょっと違うようだ。

上述のMetaTrader4用ダウンロードデータは、各足について以下の情報が格納されている。
1) 日時
2) Open
3) High
4) Low
5) Close
6) Tick volume

MetaTrader5では、さらに以下の二つの情報を連結する必要がある。
7) 数量
8) スプレッド

スプレッド値はブローカー依存だが、今回はUSDJPYでは平時にちょっと不利目な 5としてみる。
ちょっと厳しいぐらいでよいだろう。

スパイク発生時などのスプレッド値の変動までは再現できない。
いつかはブローカー提供の本物データが必要になるなぁ。

上述のダウンロードデータ(CSVファイル)は 4,614,921行(461万行)もある。
これをテキストエディタで編集していたら大変だ。

Linuxマシンの電源を入れて以下のコマンドでちょちょっと全行末に 7) と 8) を追加する。
設定値は以下の通り。
7) 0固定
8) 5固定

nkf -Lu --overwrite USDJPY.csv
sed -i -e "s/$/,0,5/g" USDJPY.csv

10年前に購入したかなり古めの Xeon 3330ワークステーションでも30秒ほどで変更ができた。

これでインポートさせるデータの出来上がりだ。

(3) MetaTrader5にヒストリーデータをインポート

インポート手順はこちらのサイト様の情報を参考にさせていただいた。
FX PLUSメタトレーダー5 ご利用ガイド

以下、自分の備忘録として要点だけ記録しておく。

※MetaTrader5内の日本語が機械翻訳らしく怪しいので、Language設定を英語に切り替えた。

1) Symbols画面を開き、通貨ペアを選択し、[Create Custom Symbol] を押下する。

2) Symbol名を変更して [OK] を押下する。
※名前を変えないと USDJPY のデータが上書きされてしまう。

3) 上記2)で作成した Symbolを選択し、[Import Bars] を押下する。

4) 先に作成した CSVデータをインポートし、[OK] を押下する。

5) Specificationタブを選択する。上記2)で作成した Symbolを選択し、[Show Symbol] を押下する。

6) 最後に [OK] を押下する。

ここまでの操作により、バックテスト時にこのインポートしたデータが選択できるようになった!

(4) いざバックテスト実行

データ量が増えたため、ヒストリー品質 9% の時と比べてテスト時間がとっても長く感じる。

してその結果は?

めでたしめでたし!
ヒストリー品質 98% に向上しました! 残り2%はとりあえず気にしない。

(5) バックテスト結果を比較

今回(ヒストリー品質 98%)の結果は以下の通り。

前回(ヒストリー品質 9%)「(9) 【MQL5】 サンプルプログラム(EA)をクラス化」 の結果は以下の通り。

同じロジックでも入力データが変われば結果も変わることを確認。

実際のトレード時は前者に近い値動きになる。
すなわち、ヒストリー品質の高い環境下でテストする必要がある。

ちょっとバックテストが楽しくなったかも。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)