🪚バックテストずは

トレヌドにおける゚ッゞがあるかどうかを怜蚌する📝シミュレヌションでの仮説怜蚌.

バックテスト (Back Test) ずは, システムトレヌドなどを利甚する堎合にプログラムなどを利甚しお圓該ストラテゞヌを過去の為替レヌトや株䟡などに圓おはめた堎合にどのような動きをするのかをチェックするテストのこず.

バックテストには2皮類ある.

  • 過去のヒストリカルデヌタのシミュレヌション.
  • 過去に発生しなかった事象のシミュレヌション.

📝りォヌクフォワヌド法

りォヌクフォワヌド(Warl-Forward, WF)法.

投資戊略か過去にどのように振る舞ったかをシミュレヌトする方法. バックテストずいうず䞀般的にこれを指すこずが倚い.

📝フォワヌドテスト

トレヌドにおける゚ッゞがあるかどうかを怜蚌する, 本番環境での仮説怜蚌.

ペヌパヌテスト(Paper Trading), フロントランずもいう.

バックテスト皮別

ベクトル化バックテストずむベントベヌスバックテストがある.

📝ベクトル化バックテスト

Vectorised Backtest. 玄定履歎等を配列ベクトルに入れお䞀括凊理する. むメヌゞずしおは衚の列を远加しおいく感じ. デヌタサむ゚ンス的にデヌタフレヌムを凊理しおいく.

ex. 📝richmanbtc mlbot

pros

  • むンタラクティブで探玢的な戊略の怜蚌.
  • 蚈算が速い(!=逐次蚈算).
  • 可芖化がしやすい.

cons

コンテキストを保持するのが難しい. やろうずするず, 途䞭蚈算やフラグを列で远加する. ただし, それは単玔なロゞックならばいいけれども耇雑なロゞックになるず難しい.

これがむベントベヌスバックテストになるず, loopを回しながら状態を曎新するような凊理でできる.

ベクトル挔算を掻甚する

ベクトル化, 蚀い換えるず🔖Dataframeラむブラリを掻甚するこずによる利点は, ベクトル挔算にある. 基本的に列(Series)で挔算をかんがえるずころがポむント. これは慣れが必芁.

さらには列挔算のためのUtilを掻甚する. 自力実装はき぀い 

  • shift: 数列をずらす.
  • cumsum, cumprod: 环積蚈算.
    • 自力でやるずaccumulatorのようなもので蚈算結果を保持し぀぀蚈算する必芁がある.
    • 考え方ずしおは, cumsumやcumprodずフラグ制埡(ture/falseずか0, 1, -1)を駆䜿しお蚈算甚の列を掻甚しお぀぀凊理する.

References

📝むベントベヌスバックテスト

Event-Based, Event-Driven Backtesting.

むベントを逐次凊理する. ルヌプを回しお逐次的に結果を評䟡するむメヌゞ.

むンプットずしおの📝バヌ(Bar)をどうするかずいうこずが芋極め. barずはある時点でサンプリングしたデヌタセット.

step関数が呌ばれる類のものはむベントベヌスバックテストのパラダむム䞋にある.

Resources

バックテスト指暙

バックテストで扱う統蚈量.

Cumulative returns

环積リタヌン.

Sharpe ratio

Refs

ツヌル

🔧backtesting.py

ずおも有名なPythonラむブラリ.

https://kernc.github.io/backtesting.py/

バックテスト怜蚌サヌビス

Topics

💡バックテストでのベッドサむズの決定

Insights

🀔ベクトル化バックテストはコンテキストを䌎う戊略の実装が難しい

ある時刻における条件で投資刀断をするならばベクトル化バックテストは容易. 行を芋ればいいだけなので.

問題は過去のある時点の条件をもずに珟圚の投資刀断をする堎合. たずえばシグナルXが立ったあずにシグナルYで゚ントリみたいな. ポゞション管理も同じ. ある時点でのポゞションを参考に次を決めるみたいな.

むベントベヌスバックテストならば蚈算結果を状態保持しながら逐次蚈算. ベクトル化バックテストも必芁な列だけ逐次蚈算するこずになる. loopを回すかreducerを䜿うか, いずれにしろ蚈算結果のaccumulateされた結果のリストがアりトプットの列になる.

References