最近、MT5のストラテジーテスターを使い始めたんですが、MT4のそれとは違う部分もいくつかありました。
そこで、違いの中で特に気になったものについて情報として残しておこうと思います。
(ほかにも気になったものが出てきたら追記していきます)
スプレッド
MT4
ストラテジーテスター上で設定した値になります。
固定値でしかテストできないので平均的な値、狭めの値、広めの値という感じで複数回テストする必要がありました。
MT5
ヒストリカルデータに含まれる値になります。
実際に配信された値、あるいはそれに近い値でテストできます。
これでスプレッドの値を変えながら何回もテストする必要がなくなりました。
また、”スプレッドが広がっているときは売買しない”といったようなスプレッド値を売買条件に含むアルゴリズムもテストできるようになりました。
取引時間
MT4
業者の取引時間外でも注文できてしまいます。
(下の図の例だと月曜日は”01:05 – 23:55”の間だけ取引できるはずですが、「1:00」にも注文が可能です)
MT5
業者の取引時間外は注文できません。
注文すると”market closed”というエラーになります。
上の図のように”呼値”(MT5では”相場情報”)と”取引”の時間が異なる場合に発生する可能性があります。
それに取引時間が異なる業者のヒストリカルデータをインポートした場合にも発生すると思います。
あとは、現在の取引時間をもとに判断していると思うので、過去に取引時間が変更されている場合も発生するかもしれません。
はじめはバックテストの結果にも影響がありそうだと思っていたんですが、僕がテストしたEAは注文判定が15分間隔だったので、あまり影響がありませんでした。
ただ、エラー自体は何回か発生していたので、まったく影響がないわけではないと思います。
注文判定をティックごとや、1分間隔とかの短い周期で行うものだと、ある程度の影響があるのではないでしょうか。(そのようなEAを持っていないので試せてはいません)
最適化
MT4
最適化処理を並列で実行することはできません。
たとえば、あるパラメータについて「10~20」の値を「1」きざみで処理する場合、「10」の処理が終わったら「11」を、「11」の処理が終わったら「12」を…という具合に順番に実行します。
MT5
最適化処理を並列で実行することができます。
基本的には実行する PC の論理コア数だけ並列実行できます。
たとえば、論理コアが8個ある PC で、あるパラメータについて「10~20」の値を「1」きざみで処理する場合、「10~17」までの処理が同時に実行されます。
実行時間が大きく短縮できそうだったので、ためしに比較してみました。
使用した EA とパラメータ、ヒストリカルデータは同じです。( EA は MT4 から MT5 へ移植したものです)
パス数 | MT4 | MT5 |
---|---|---|
1 | 16秒 | 42秒 |
10 | 99秒 (6.2倍) | 99秒 (2.4倍) |
20 | 182秒 (11.4倍) | 508秒 (12.1倍) |
40 | 364秒 (22.8倍) | 912秒 (21.7倍) |
あれ? なんか期待してた結果と違います。
パス数が「10」のときは比率的に短縮できてますが…。
調査したところ、パス数が「20」と「40」のときに伸びていないのは、どうやらメモリが足りないことが原因のようです。
ためしにメモリを使い切らないように使用するコア数を制限したところ、それぞれ「181秒(4.3倍)」と「354秒(8.4倍)」と大きく改善しました。
これなら効率は上がっていると言ってもいいと思います。(1パス実行あたりの処理時間が大幅に増えているので、処理時間的には変わっていませんが…)
最大のパフォーマンスを引き出すためには、タスクマネージャーを見ながら最適化に使用するコア数を調整する必要があるかもしれません。
ちなみに使用するコア数の変更は、以下の手順でできます。
- ストラテジーテスターの「エージェント」タブを選択します。
- 設定を変更したいコアの上で右クリック、表示されたメニューから「有効化」または「無効化」を選択します。
複数銘柄の一括テスト
MT4
ある EA で複数の銘柄をバックテストしたい(たとえば、ほかに上手くいきそうな銘柄がないか探すような)場合、それぞれの銘柄をひとつずつ順番にテストする必要があります。
MT5
ある EA で複数の銘柄をバックテストしたい場合、一括でテストすることができます。
- ストラテジーテスターの「設定」タブを選択します。
- 「銘柄」で「すべての[気配値表示]銘柄」を選択します。
- メニューから「表示」→「銘柄」を選択して銘柄ダイアログを開きます。
- 「仕様」タブでテストしたい銘柄を選択します。
- 「銘柄を表示する」ボタンを押します。
(左側のツリー上の項目を選択した状態で「銘柄を表示する」ボタンを押すと、その項目に含まれる銘柄が一括で切り替わります) - 逆にテストしたくない場合には「銘柄を非表示にする」ボタンを押します。
- 「スタート」ボタンを押してバックテストを開始します。
複数台の PC を使った分散処理
MT4
MT4 を起動した PC のみを使ってテストします。
MT5
MT5 を起動した PC だけでなく、ネットワーク上に存在する PC もテストに使用することができます。
そのため、余っている PC があれば効率的にテストすることが可能です。
この機能を使うためには、MT5 を起動してストラテジーテスターを実行する PC(以降、メイン PC )と、メイン PC から使われる側の PC(以降、サブ PC )のそれぞれで設定が必要になります。
まずは、サブ PC 側の設定を行います。
- MT5 のメニューから「ツール」→「ストラテジーテスターエージェントマネージャー」を選択してエージェントマネージャーを起動します。
- 「サービス」タブを選択します。
- 「エージェント」のドロップダウンリストから追加したいエージェントの数を選択します。
(エージェントごとにひとつのテストを処理するため、エージェントが複数あればサブ PC 側でも並列実行されます) - 「追加」ボタンを押します。
- IP アドレスをメモしておきます。
つぎにメイン PC 側の設定を行います。
- ストラテジーテスターの「エージェント」タブを選択します。
- 「Local Network Farm」の上で右クリックして、表示されたメニューの中から「追加」を選択します。
- 「ネットワークをスキャン」にチェックを入れ、「始点」と「終点」に先ほどメモしておいたサブ PC の IP アドレスを入力して「次へ」ボタンを押します。
- 追加したいエージェントが表示されているのを確認したら「完了」ボタンを押します。
- 「Local Network Farm」の上で右クリックして、表示されたメニューの中から「ローカルネットワークファームを使用する」を選択します。
以上で「最適化 」や「複数銘柄の一括テスト 」を実行する際、サブ PC にもテストが割り振られます。