本記事は、『バックテスト機能』の中で「別途記事にする予定」としていたもの。
MT4でバックテストをする場合、「ストラテジーテスター」と呼ばれる機能を使うのが一般的だ。
しかし、この機能を使い日経225先物のバックテストをするには、以下のような問題があるため、使っていない。
- 正確な損益計算ができない
- 遅い
1.正確な損益計算ができない
下図がストラテジーテスターの設定画面。
ストラテジーテスターを使用するためには、MT4に登録されている通貨ペアを使う必要がある。
従って、日経225先物データをMT4に取り込む際には、既存の通貨ペア名(シンボル)で取り込んでおく必要がある。
例えば、ドル円(USDJPY)チャートの中身を日経225先物とする、といった具合。
このことは、特に問題ではない。
ただ、通貨ペアには、そのプロパティ情報として取引条件が設定されている。
(上図の青枠)
取引条件のうち、以下の項目がネックとなる。
- スプレッド
- 小数桁
- 契約サイズ
- 証拠金通貨
- スワップ
このうち、証拠金通貨は「エキスパート設定」にてJPYに変更することができる。
他は変更が難しい。
ストラテジーテスターを使ってバックテストした結果が下図。
エントリー、イグジットのポイントをビジュアルに確認することはできるが、
損益計算が正しくないため、バックテストレポートは参考にならない。
当たり前の話だが、FXの取引条件と日経225先物の取引条件は違う。
FXの取引条件でバックテストすることを前提として設計されたストラテジーテスターを使うのは無理がある。
何らかの対策が必要となる。
2.遅い
ストラテジーテスターの設定項目の「モデル」において、バックテストの速度・精度を設定できるようになっている。
選択肢は、
- 全ティック(利用可能な最小時間枠を使いすべてのティックを生成する、最も正確な方法)
- コントロールポイント(ひとつ下の時間枠を使ったおおまかな方法。結果はあまり信頼性はない)
- 始値のみ(最も早い方法。バーの始めにしか動かないEA向け)
最も遅い方法である「全ティック」で実行すると、
- ビジュアルモードOFF:4分17秒
- ビジュアルモードON:63分13秒
最も早い方法である「始値のみ」でバックテストを実行すると、
- ビジュアルモードOFF:6秒
- ビジュアルモードON:7秒
テスト条件は、
- EA:MACD Sample(MT4のサンプルEA)
- 最適化OFF(ワンパスのみ)
- ローソク足:日経225先物ラージ30分足、約50000本、約1400日
(2012/1/4 09:00~2017/9/16 05:30) - ビジュアルモードの速度スライダーは最速設定
- 開発用PCでテスト
(PCスペックはこちら:『トレードシステムの開発環境、運用環境』)
ワンパスだけなら6~7秒でも我慢できる範囲であるが、
準最適解を求める場合は、何千回とループ処理することになり、
これではちょっと遅すぎる。
1つ目の問題点に対する対策として、
「一旦、ストラテジーテスターを走らせ、その結果を元に約定価格や損益を再計算させる自作プログラムを作成する」
といった方法が考えられる。
しかし、この方法だと更にレスポンスが悪くなる。
そこで、どうしたかと言うと、ストラテジーテスターとEAに相当するものを「インジケータ」として構築した。
つまり、移動平均線を計算し表示するような感覚でバックテストをするようにした。
ただし、移動平均線を計算・表示するよりは遥かに膨大なプログラムであるが。
ちなみに、上記と同じローソク足データで、自作のバックテストインジケータを実行すると、1秒程度。
(MACDを使ったロジック。「始値のみ」と同様にバーの始めに計算するモデル)
もちろん、損益は正しく計算される。
(そのようにプログラムを組んだ)
自作トレードツールのバックテスト機能を作成するまでは、
このバックテストインジケータを使ってMT4でバックテストを実施していた。