バックテスト最適化~単体バックテスト自動実行~自動レポート

暫くブログを更新できていませんでしたが、ようやくHelios の改修作業を一巡終えて、動作検証に入りました。

・基本動作の検証
・パフォーマンスの良いパラメータセットの探索

をバックテストを実行しながら確認、調査していきます。 が、この工程にかなりの体力と時間がかかるので、今回は自動化を実施してみました。
対応事項の整理も兼ねて記事にしておこうと思います。

スポンサーリンク

自動化の必要性

バックテスト最適化の自動実行、単体バックテスト自動実行くらいはすぐにできるのですが、

各パーツ部分ののみの自動実行だけだと、最適化後の結果を目視確認しながら、個別に単体バックテストを行う工程で手作業が入りますし、
単体バックテストまで自動化したとしても、大量の実行結果から良好な実行結果を抽出したり、該当パラメータセットをすぐ取り出して活用する事ができません。

やはり end to end で自動化して初めてバックテストの実行量を一気に増やせる状態になるため、今回は全行程の自動化を目指しました。

自動化のメリット

従来比100倍の量のバックテストを実行できるようになったら、何か違う気づきが得られるのではないでしょうか?

元々、実行条件として通貨ペアや足の決定は、人間の頭で選定していますが、多くの場合は過去の経験則や自分の実施したいトレードイメージを元に

「恐らくこの値付近の条件を検証すればうまくいくだろう」

という風に導くことが多いのですが、 これは
バックテストを実行するにも膨大な時間がかかるので、ある程度有益な結果が得られそうな範囲を事前に絞り込んでからテストを開始しないと、いつまで経っても良い結論にたどり着かないということはよくあるため、
この人間の判断(感覚というか、ドメイン知識というか)は必要なものだと思います。

しかし、こういった判断は経験の偏りから見るべき範囲が限定化されてしまうことも多くあり、良い条件を見落とす原因になったりもしますので、
自動化の力を借りながら広範囲のデータを収集し、全体の結果を可視化できるような仕組みを持つことで、人間が見落とすような部分の気づきを得ることが出来るようになります。

尚、自動化のためには大量のバックテストを捌くためのコンピューティングリソースが必要になりますが、昨今、個人レベルでもハイスペックPC を手に入れ自宅で稼働させることは決して難しくなくなっているので、十分対応可能な内容だと思っています。

スポンサーリンク

自動化イメージ

こんな感じにしました。

MT5でバックテスト最適化、単体テストは行いますが、それの自動化に必要な実行条件、パラメータファイルはpython 側で生成し、かつMT5プロセスを起動し読み込ませます。
最適化結果の中から良好なスコアとそのパラメータをピックアップし、単体バックテスト用のパラメータセットファイルを生成。それに基づき単体バックテストを自動で実行させます。
単体バックテストの実行結果はhtmlで出力されるので、 htmlファイルをスクレーピングし各種指標等を取得、整理しDBへ蓄積します。
尚、この際、htmlファイルと同時に実行結果内容が画像ファイルでも出力されるので、これを閲覧用のwikiに、実行結果の指標データと併せてアップします。

ちなみに、最適化の実行条件とは、

  • 銘柄(USDJPY, EURUSD, ...)
  • 期間(from ~ to日付)
  • 足(M1, M2, M3, ...)
  • 証券会社(XM, HF, ...)
  • 証拠金(◯◯円, 〇〇$)
  • 売買区分(買、売)
  • 最適化条件(最大利益係数、最大期待利得、....)

等であって、パラメータセットではありません。
※パラメータはパラメータで組み合わせが数十億件のオーダーになりますので、遺伝的アルゴリズムによって実行件数を抑制します。

仮に最適化実行条件の変数とその件数が

銘柄 3 x 期間 1 x 足 4 x 証券会社 2 x 証拠金 3 x 売買区分 2 x 最適化条件 4

だったとすると、576パターンの最適化実行条件が出来上がります。

一見少なそうではありますが、この1パターンの最適化毎に
遺伝的アルゴリズムであっても10,000~20,000件のバックテストが実行されるため
平均15,000件としても x 576 = 8,640,000回のバックテストが必要です。。

たった銘柄3件(例えばUSDJPY, EURUSD, GBPUSD)こなすだけで、この量です。

手作業でやろうと思うと、誰か一人雇って延々と張り付いてもらって
バックテストが終わる度に次のパラメータセットを画面に入力して実行して、レポート出力して集計して..... といった、気の遠くなるような量と時間作業が必要です。

そう思えば、自動化の力は偉大ですね。

ちなみに、現在検証しているEAだと、 最適化1パターンが完了するのに2~4時間位かかっています。
64core 128GBのPCがフル稼働しても、やっぱりこのくらいはかかりました。 最適化が終わった後に単体バックテストとレポーティングにも若干時間がかかるので、
1日当たりでこなせる最適化本数は5~6本くらいかな。

576 / 5 = 115日。。。

これでも気が遠くなりそうなので、もう少し実行条件は絞りつつ、いくつかフォワードテストも開始できればと考えています。

スポンサーリンク
おすすめの記事