本システムを作る前は、MT4(MetaTrader4)を使ってバックテストをしていた。
MT4でバックテストをするためには、事前に、エキスパートアドバイザー(EA)と呼ばれる売買ロジックのプログラムを準備しておく必要がある。
例えば、5期間と25期間の移動平均線がゴールデンクロス(GC)すれば買い、デッドクロス(DC)すれば売り、といったものだ。
5期間、25期間といったパラメータやGCやDCといった買いの条件、売りの条件をプログラムしておく必要がある。
そして、EAと適用する時間軸(5分足、日足等)を指定して「ストラテジーテスター」と呼ばれる機能を走らせれば、バックテスト結果が得られる。
バックテスト結果は、勝率、損益はもちろんのこと、プロフィットファクター、最大ドローダウン、連勝数、連敗数等の評価項目が得られる。
また、パラメータの組み合わせ(先ほどの例では5と25)に対する準最適解を計算する機能もある。
ストラテジーテスターはなかなか便利な機能だが、日経225先物のバックテストをするには問題があり、この機能を使わなかった。
(どういう問題があるか等は別途記事にする予定 → こちら)
そこで、どうしたかと言うと、ストラテジーテスターとEAに相当するものを「インジケータ」として構築した。
つまり、移動平均線を計算し表示するような感覚でバックテストをするようにした。
ただし、移動平均線を計算・表示するよりは遥かに膨大なプログラムであるが。
下図がMT4でのバックテスト実行例(バックテストインジケータを表示させた例)
MT4のチャート上にインジケータを表示させる要領で、このバックテストプログラムを実行させる。
本システムのプロトタイプ完成後もしばらくMT4でバックテストをしていたが、システムのブラシュアップの過程でバックテストプログラムをMT4から移植した。
MT4で採用しているプログラミング言語「MQL4」はC言語に近い。また、本システムで採用している言語「C#」もC言語に近い。
C言語に近いもの同士簡単に移植できるだとうと思ったが、なかなかどうして、苦労した。
(C#初心者に毛が生えた程度だったためだ。今でもそうだが・・・)
MT4上でバックテストプログラムを書いたことにより、バックテストの自由度が上がったが、本システムに移植することにより、更に自由度が上がった。
本システムのバックテスト機能は、以下の機能を有している。
- 単一のパラメータの組み合わせでのテスト(詳細なレポートが出力される)
各評価項目はもちろんのこと、全トレードログ、月次損益、週次損益も出力される。 - パラメータの組み合わせ線形探索テスト(組み合わせ数が少ないときにこの機能を使う)
各パラメータの組み合わせにおける各評価項目が出力される
全ての組み合わせをテストするので最適解が得られる - パラメータの組み合わせ準最適解の計算(組み合わせ数が膨大なときにこの機能を使う)
準最適解の導出過程で計算したパラメータの組み合わせにおける各評価項目が出力される
現実的な計算時間で、準最適解が得られる - 複数期間設定
バックテスト対象期間を複数設定することができる。
例えば、過去5年間の成績が良く、かつ、直近6か月間の成績も良いパラメータがどれか確認することができる。
下図が本システムでのバックテスト実行例。(単一のパラメータの組み合わせでのテスト。なお、上記MT4でのバックテスト例とは別期間、別ロジック)
チャート画面のバックテストボタンをクリックすれば、バックテスト処理が走り、結果が表示される。
バックテスト結果は、画面表示の他にもcsvファイル出力される。
なお、バックテスト処理が事前にプログラミングされている必要がある。