597 / 736BT

Backtesting

戦略のバックテスト

Backtesting は過去のデータで取引ルールを試す方法です。誤りやコストを見つける助けになりますが、過去の利益だけで今後も機能するとは証明できません。

Backtesting は、事前に定めた取引ルールを過去のデータに適用し、選んだ約定方法とコストのモデルの下で、どのような結果になったかをシミュレーションすることです。

ピーターは、上昇した日の後にさらに上がることがあると気づきます。勘で買う代わりにルールを書き、昔の価格に適用します。これが Backtesting、つまり過去を使ったアイデアの検証です。結果が示すのは選んだモデルの動きであり、ピーターが実際に得た利益ではありません。Bailey et al. は、見栄えのよい過去の結果と信頼できる戦略の検証を区別する必要性を説明しています。 [1]

ピーターが使えるのは取引前に入手できた情報だけです。当日の終値を使うルールなら、その終値を根拠に同じ日の朝に買うことはできません。QuantConnect はこれを Look-ahead Bias と呼びます。未来の情報が過去の判断に入り込む誤りです。公表データでは対象期間だけでなく公表時刻が重要で、後日の修正も当時は未知です。そのため本文の例では、確定した過去の終値を使い、次の期間の始値で約定を仮定します。 [2]

現在まで残った市場や企業だけを選ぶと、別の偏りが生じます。QuantConnect はこれを Survivorship Bias と呼び、現在の指数構成銘柄を過去に適用する例で説明しています。Bitcoin のデータでも、取引所、障害、価格の集計方法が重要です。あるサービスの価格が別の場所で取引可能だったとは限りません。誤記は修正できますが、変更は追跡できるようにします。不都合な暴落を消すと、検証している問い自体が変わります。 [2]

プログラムは、注文がいつ、いくらで、どれだけ約定するかを決める必要があります。そのための約定モデルを QuantConnect が説明しています。チャートが価格に触れただけでは、注文全量がそこで成立したとはいえません。実際の注文は一部だけ約定することがありますが、このプラットフォームの既成バックテストモデルは全量約定を仮定します。価格の古さと、取引相手を見つけられる流動性も確認が必要です。 [3]

Slippage は期待した約定価格と実際の価格との差で、有利にも不利にも働きます。QuantConnect はそのモデル化を説明しています。手数料に加え、該当する場合は資金調達や戦略のほかのコストも計上します。価格に織り込まれたコストを再び引いてはいけません。Slippage がゼロというのは仮定であり、現実の市場についての確認結果ではありません。約定条件を悪くし、コストを増やして試すと、結論が耐えられるかを確かめられます。 [4]

成功を測るのと同じデータでルールを調整すると、答えを知った試験を受けることになります。ピーターはまず、古いデータを開発用、後のデータを検証用と決めます。scikit-learn の TimeSeriesSplit はこの時間順序を保つ助けになります。ただし、前処理での情報漏れ、目的期間の重なり、繰り返しの調整を自動的に防ぐものではありません。検証結果を見てルールを変えた時点で、そのデータも開発に使っています。 [5]

数多くの設定を試せば、偶然よく見えるものが出てくるかもしれません。勝者だけを示すと、探索回数が隠れます。Bailey et al. は、特定の過去の癖に戦略を合わせすぎる Backtest Overfitting を研究しています。最良の曲線だけでなく、試したパラメータ、期間、市場を記録してください。著者らはこの問題の確率を推定する独自の手順を提案しています。単純なデータ分割では代替できず、本文の例もその推定を行いません。 [1]

誠実な報告では、データ、ルールの版、個別取引、コスト、損失期間を追跡できます。比較対象の戦略にも比較可能な前提が必要です。米国 NFA は、仮想的な成績には後知恵の利点があり、実際にお金を失う経験が欠けるとも指摘しています。その広告規則には特定の会員という適用範囲があります。バックテストはアイデアを棄却したり、詳しく調べたりする助けです。計算が正しくても、別の市場や実際の取引で機能する証明にはなりません。 [6]

例例 · BT

手計算で確かめられるルール

独自に作った架空の例で、同じ長さの期間 A、B、C、D を考えます。開始時の現金は 1000 USD で、未決済のポジション、債務、入出金はありません。A より前のふたつの終値は [100, 100] USD/BTC です。A から D の始値は [101, 103, 102, 105] USD/BTC、終値は [102, 101, 104, 103] USD/BTC です。直近の確定した終値がその前の終値を上回ったときだけ、期間の開始時に 1 BTC を買い、同じ期間の終了時に全量を売るルールとします。したがってシグナルは [0, 1, 0, 1] で、1 は取引、0 は取引なしを意味します。すべてこの価格で全量約定し、スプレッドも Slippage もなく、唯一のコストは購入と売却それぞれの手数料 0.1 USD と仮定します。B では 103 USD で買い、101 USD で売ります。D では 105 USD で買い、103 USD で売ります。各期間のコスト控除前の結果は [0, -2, 0, -2] USD です。実行した四件の売買の手数料は合計 0.4 USD なので、純結果は [0, -2.2, 0, -2.2] USD です。控除前の合計は -4 USD、純結果は -4.4 USD、最終現金は 995.6 USD になります。グラフは各期間の純寄与を表し、口座残高や利益の確率ではありません。この例は情報の順序と会計を確認するためのもので、実市場のデータを使わず、最適化も予測も行いません。

理解を深めるには、この項目とあわせて次もお読みください Trading Plan, Trading Journal, Slippage, Overfitting, Walk-forward Analysis. 次の項目からも参照されています Technical analysis, OHLCV, Timeframe, Candlestick chart.

01バックテストが黒字なら、その戦略で稼げますか?

選んだ過去のデータと特定の前提で利益が出たことしか示していません。情報の入手時点、約定、コスト、それまでに試した設定の数を確認してください。独立した過去データでの検証でも、将来の成績は保証できません。

02手数料を最後にまとめて引くだけではいけませんか?

モデルに合致し、途中のコストが利用可能資金や判断に影響しない場合に限られます。通常は該当する取引にコストを計上します。約定と手数料は、漏れも二重計上もなく記録する必要があります。

DOC · 001Bailey et al. — The Probability of Backtest Overfitting一次資料 DOC · 002QuantConnect — Research Guide文書 DOC · 003QuantConnect — Trade Fills: Key Concepts文書 DOC · 004QuantConnect — Slippage: Key Concepts文書 DOC · 005scikit-learn — TimeSeriesSplit文書 DOC · 006NFA — Use of Promotional Material Containing Hypothetical Performance Results文書
改訂日: 一次資料を優先 · 投資助言ではありません