バックテストの高速化

早く結果が知りたい

バックテストやフォワードテストの待ち時間を減らすためには、
プログラム自体のチューニングや、遺伝的アルゴリズムによる検証回数の削減も必要ですが、

MT4の頃は、CPU 1コア分しか使用してくれず、
ハイスペックなPCを用意しても処理速度を上げることができませんでした。

複数のMT4 terminal.exe を別フォルダに複製し、同時実行することで
異なるEAや時間足、期間の検証を行う方式はありますが、
あくまで単位時間あたりの処理量を増やせても、対象EAのバックテストを早く終わらせることができません。

殊、データ分析においてはOODAループとか、アジャイル型フレームワークが最適と言われる通り
EA開発でも、1日に何度も改善を繰り返しながら最適解を見つけたいと思います。

でも実際は、処理が重いEAになると
「一週間バックテストして、来週末あらためて確認しよう」ということもあり、、
来週改めて見ることには「なんでこの仕様にしたんだっけ・・・?」から始まることも。。。

MQL5 Cloud Network

MT5では、テストを高速化するために MQL5 Cloud Network という機能を使います。
早速触ってみましたが、なかなかいい感じ!

  1. マルチコアが使える
  2. 他のPCにも処理を割り振れる
  3. クラウド上にある他人様のPCのCPUも借りることができる
  4. 他人にCPUを貸し出すこともできる

といった特徴があります。

今回は、1と2を実際に実施してみます。

1. マルチコアが使える

MT5のストラテジーテスタには、 「エージェント」というタブがあり、これを開きます。

Local という部分が、自分自身のPCが持つCPUコアです。

全CPU使うこともできますし、他の作業のために使うコア数を減らすこともできました。

他事をやりたいときも安心!

2. 他のPCにも処理を割り振れる

24時間稼働のワークステーション(8コア)があるので、それにも処理をさせます。
元々MT4用に買ったもののCPUコアは使いきれず無駄な買い物だったと思っていましたが、
今になって役に立つとは。(5年前の自分、偉い)

バックテストを、自分のPC以外に実行させるためには
専用のエージェント(MetaTrader 5 Strategy Tester) を該当PCにインストールしておきます。
(Windows PCでしか動作しないので注意。 どうしてもMacやLinux等で実行させたい場合は
仮想環境上にWindows環境作るとか、ですかね。未検証です)

  1. 同じく エージェントタブ
    →Local Network Farm 右クリック
    →追加

  2. 事前にMetaTrader 5 Strategy Tester をインストールしたPCのIPを指定するか、
    ネットワークをスキャンする。
    ※パスワードは、エージェント側で指定したものと同一の値を入力。

  3. 追加したいコア数を調整したい場合は、
    エージェント起動時に指定したポートの範囲で追加コア数を調整するか、
    一旦全コア分追加をした上でバックテスト実行時に指定コア数使うこともできます。

  4. 完了!
    エージェントタブ内に、ワークステーション側PCのCPU情報が表示されています。

  5. 「ローカルネットワークファームを使用する」にチェック も忘れずに。

コメント一覧
  1. taka より:

    そもそもMT4が主流でありMT4用のインジケーターやEAはMT5で使えないですよね。

    MT4でEAを多数運用していてバックテストの時間短縮を模索していたところことらのブログに到達しました。

    • aster より:

      takaさん、

      コメントありがとうございます。
      そうですね、MT4で構築したEA,インジケータは MT5では動作しません。

      MT4上でのバックテスト時短したい場合、
      MT4アプリケーションを複数起動し、同時にバックテストを実行させることで
      単位時間当たりの実行量を増やすくらいしか方法が無いと思います。

      それでもバックテストはコマンドラインから起動できるため
      ・実行したいバックテストのパターンを予め用意しておく
      ・バッチファイルにまとめ、一括実行する
      ・実行結果をサマリする手段を用意しておく

      ことで、人手を介さずに複数のバックテストを一括実行することは出来ます。

      私も以前、MT4のバックテスト時短策として上記を実施したことがあり、
      以下の記事に手順の一部を記載しております。
      http://54.168.109.147/?p=68

      実行結果は、最適化、単体実行共に
      html形式のレポートが出力されるため、
      そのhtmlファイルをpythonスクリプトでテキスト抽出し、
      データベース(AWS Redshift)へ投入、分析ツール(Tableau)経由でレポート参照
      ということを行っていました。

      • Por より:

        非常に参考になる記事を、ありがとうございます。

        以前は
        ・Windows上でコマンド操作、同時テスト取得
        ・レポートをデータベースへ
        ・分析ツールで参照
        とのことと拝見させていただきました。

        現在はどのような枠組みで環境づくりや自動化の実行をされているのでしょうか。

        • aster より:

          コメントありがとうございます。

          現在は以下の記事の方式で管理しております。
          https://deasign.works/?p=1274

          自分だけなら分析ツール(Tableau)でも良いのですが、
          今後利用者の方に向けてバックテスト結果を公開する場合はライセンスの問題もありますので
          Confluenceで照会可能にしております。

コメントを残す

関連キーワード
MT5, バックテストの関連記事
おすすめの記事