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

この投稿文は次の言語で読めます: 日本語

暫くブログを更新できていませんでしたが、ようやく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日。。。

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

 

レポートイメージ

私はAtlassian製品が好きなので、wikiはConfluenceを使用しています。

バックテストレポートもConfluence REST API 経由で自動アップロード、自動編集処理を作成しました。

Jira Service Deskと組み合わせることで、サービスデスクの機能を提供しつつ、この類のレポートも大きく費用をかけずに共有するルートを作ることができました。

※Helios β版のレポートとして本機能を実装しましたが、まだ同プログラムは機能改修の可能性もあり公には公開していません。ご了承ください。

サマリページ

単体バックテストレポート

大まかな指標とレポート画像を纏めてアップしました。 まずは概略レベルで使えそうかをここで判断し、
運用を検討する場合は実際にバックテスト、フォワードテストを実施する流れを想定しています。

該当のバックテスト実行パラメータもダウンロード出来るようにしたので、手元で条件を再現する手間も減りました。

パラメータ設定ミスをしたまま数日運用していたことに気づき泣けてきたことが何度かありましたが、そういった問題も解消できそうです。

Tableau

wiki上のレポートは、扱えるデータ量にも限界があるので表面的な範囲にとどめておき、バックテスト全体の傾向を見る部分はTableauに頼ります。

MT5内で閲覧できる最適化レポートは、その1パターンの内訳しか見られませんが、
銘柄別で最適化の全体傾向を比較したり、足の違いで成績がどう変わるか、初期証拠金の違いは成績にどのような違いが現れるか、等、
最適化レポートを集めて比較して見えてくる情報もあると思います。 ここはもう少しバックテスト結果が蓄積されたら、改めて評価したいと思います。

所感

  • 実際にバックテスト完全自動化を始め、今までやれていなかった広範囲のバックテストも実施できるようになった
    これは期待通り。
  • 全体的に、スワップが大きくマイナスになる通貨ペアと売買方向の成績が慢性的に悪い
    詳細分析しきれていないものの、USDJPYの売、EURUSDの買など、日々のスワップマイナスが積み上がるケースは予想よりも遥かに成績が上がりづらかった。
    スワップとスプレッドは、想像よりも大きく利益に影響すると思われる。銘柄だけでなく、売買方向の選定も重要。
    ※海外証券会社では、スワップ、スプレッドは不利な条件であることが多いが、一方でこれがあるからこそゼロカット制度が成り立っていると考えられるので、安全のための支出と考えるのが良い。
  • GBPUSD の成績が結構良かった
    スプレッドの狭さを根拠にチョイスしバックテストしてみたところ、良い結果が得られた。運用候補にしても良いかもしれない。
    フォワードテストもしつつ、継続して評価してみたいと思いました。
  • USDCHFの評価は困難
    スプレッドの狭さから検証し、良好な結果が得られたように見えたが、2015/01/15 のスイスフランショックで一瞬で2,000 pips 近く変動したことから
    そのタイミングだけで30,000,000円近く利益を出していただけだった。
    10年規模でバックテストをすると必ずスイスフランショックのタイミングのデータを見ることになり、これだけで全体の結果が大きく歪んでしまい、期間全体を通しての評価が難しい。
  • ハイスペックPCの排熱で部屋が暑い。。
    PC24時間稼働なので、エアコンも24時間稼働必須だが、夏場にPC障害が発生しないか心配。
    尚、月間の電気代は激しくは増加していないが、コロナ影響で生活スタイルが変わったこともあって前年比較等がしづらい。
  • 物理PCを買って正解
    このスペックのPCをAWS EC2等で建て長期でぶん回し続けたら圧倒的に高コストになる。電気代が高くないなら物理の方が良い。
  • 株式指標(ダウ、S&P500、日経225等)も試してみたい
    海外証券会社の場合、各種株式指標や、株式個別銘柄の扱いがあるケースも多く、これらに対して自動売買を適用することができます。
    バックテストの残件が片付いたら、この辺りの銘柄も試したいと思います。
    ビットコインなど暗号資産(BTCUSD等)も取り扱いがありますが、あれはテクニカルが効く感じがしない(やってみたら違う気づきがあるかもしれないが)ので、個人的に優先度は低いです。

 

MT5用EA Helios 6.0を公開しました!!!

EAは無料でご利用頂けます

上記EAは無料でご利用いただけます。 ご興味をお持ち頂けましたら、以下のページに概要と申込ページへのリンクがありますので、そちらからお問い合わせください。

MT5を使うなら、海外の証券会社がオススメ!

国内証券会社は追証リスクある上に、ほとんどの証券会社でMT5を利用することができません。

入金額以上のリスクを負わずに済むゼロカット制度が適用されるのは海外証券会社のみとなります。

XMHFM等、信頼できる海外証券会社を選択することで、

  • 低スプレッド環境でトレードが出来る
  • トレードの遅延が少なく品質が安定している
  • 入金ボーナスで、少額からトレード可能
  • 入出金トラブルがない

等、多くのメリットを享受できます。 MT5を使う際は、同時に海外証券会社での口座開設もご検討ください。

EA利用者限定の特典あり!

EAをリアル口座で活用頂いている方への特典として、独自開発したインジケーターを無料でご利用いただけます。

自動売買ツールを活用すればトレードそのものはプログラムが規則に従い継続的に行うことができますが、

どのEAを、いつ起動/停止するのかを判断するのは人間の役割となります。

相場環境の分析が必要になることもありますので、是非これらの無料インジケーターを使用して堅実な投資の実現にお役立てください。

 

新着記事をお見逃しなく!

新しいEAや無料インジケーターの情報は、随時ブログ記事として公開していきます。

新着記事を見逃さないためには、ブログの通知設定が便利です。

以下の画像のように通知設定の許可ボタンが表示されたら是非クリックしてください。

通知許可設定

 

 

スポンサーリンク

Twitterでフォローしよう

おすすめの記事