戦略コードを1行も変えていないのに、オプションのバックテスト結果が変わることがあります。ベンダーが不正な気配値を訂正したり、遅れて届いた取引を追加したり、契約メタデータを更新したり、クロスマーケットのフィルターを変更したりするためです。同じ期間を再実行しても、約定、ポジション、場合によってはSharpeまで変わることがあります。必ずしも戦略のバグとは限りません。戦略の検証に使った証拠が変わったということです。
オプションのバックテストを再現可能にするには、市場データをバージョン管理された入力として扱います。使用したスナップショットを記録し、各判断の根拠となった生データを保存し、更新後の結果を信頼する前に、契約とタイムスタンプの単位で差分を比較します。
コードを変えていないのに、オプションのバックテスト結果が変わるのはなぜ?
オプションの記録は訂正の影響を受けやすい傾向があります。契約が実際に取引可能に見えるかどうかは、bid、ask、数量、原資産価格、満期日、権利行使価格、乗数や受渡内容といった複数の項目が連動して決まるためです。気配値が訂正されると、見かけ上の取引機会がクロスマーケットに変わることがあります。メタデータの修正によって、ポジションの乗数の意味が変わる場合もあります。
askが$2.00を下回ったときにコールを買う戦略を考えてみましょう。最初のデータ読み込みでは、10:14の気配値はaskが$1.95、bidが$1.90、数量が5です。後日、遅れて届いた取引所メッセージとの照合を経て、ベンダーがaskを$2.05に修正します。この1件の観測値によってシグナルが反転します。その契約がその日の唯一の取引だった場合、小さなデータ訂正がその日のリターンを大きく左右することがあります。
気配値のフィルタリングも重要です。ベンダーは古い気配値を除外したり、クロスマーケットを取り除いたり、タイムスタンプの正規化方法を変えたりすることがあります。こうした方針には合理性があるかもしれませんが、データセットを特定する要素の一部です。「1月から3月までのSPYオプション」だけでは、再現可能な過去データを指定したことにはなりません。
オプションデータの版とは?
データの版とは、特定のリサーチ実行時に利用できた過去の観測値の正確なバージョンです。ベンダー名とデータセット名、取得時刻、期間、スキーマのバージョン、クリーニングやフィルタリングのルールを保存します。ベンダーがスナップショットIDや改訂タイムスタンプを提供している場合は、それらも保存します。
シミュレーション上の判断ごとに、どの契約を検討したのか、どの気配値を選んだのか、その気配値がいつ公開または受信されたのか、どのルールで対象として適格と判定されたのかを確認できるだけの履歴を残します。生データも加工後のデータも重要です。元のタイムスタンプがないクリーンアップ済みNBBOでは、気配値が古かったのか、シミュレーション上の判断後に届いたのかが分からなくなることがあります。
| 保存する記録 | 重要な理由 | 例 |
|---|---|---|
| ソーススナップショット | 実行に使った過去データを特定できる | ベンダーの改訂IDと取得タイムスタンプ |
| 気配値の出所情報 | 選択された市場の根拠を説明できる | 取引所、イベント時刻、受信時刻、bid/askと数量 |
| 契約条件 | オプションが何を表すかを定義する | 権利行使価格、満期日、乗数、受渡内容 |
| クリーニング方針 | どの観測値を除外したかを示す | 古さのしきい値とクロス気配値の扱い |
ベンダーの改訂で結果が変わったか、どう確認すればいい?
同じ戦略と設定で両方のスナップショットを実行します。まず、日付ごとに適格な観測値と契約の数を比較します。次に判断と約定を比較し、どのシグナルが現れたか、消えたか、どの気配値が変わったか、新しい記録によってモデル上の執行価格が変わったかを確認します。
総リターンだけで判断してはいけません。取引回数、エントリー価格とエグジット価格、棄却されたシグナル、片方の版にしか存在しない取引が損益に占める割合の変化を追跡します。個々の取引が入れ替わっていても、Sharpeがほぼ同じままのことがあります。見出しの統計値だけでは、その下の過去データが変わったことは分かりません。
有効な監査を行うには、戦略、手数料、執行の前提を固定します。複数の要素を同時に変えると、差がベンダーの訂正によるものか、自分たちの実験によるものか分からなくなります。
常に最新のオプション過去データを使うべき?
ベンダーによる現時点で最善の再構成データを使うことが目的なら、最新の過去データを使います。過去の結果を再現したり、当時のリサーチシステムが把握していた情報を理解したりする必要がある場合は、古いスナップショットを残します。これらは別の問いに答えるものです。
時点データに基づくリサーチでは、訂正後の記録のほうが現在は正確でも、当時の戦略が利用できたとは限りません。可能な限り公開時刻と受信時刻を保存し、それができない場合は制約を明記します。現在の情報を使った再構成が、そのまま当時の情報セットになるわけではありません。
オプションのバックテスト結果が変わったとき、まず問うべきなのは「どの観測値が変わったのか」です。「どの実行結果が正しいのか」は、それに答えられてから考えます。
バックテストごとに何を保存すべき?
結果と一緒に簡潔なマニフェストを保存します。データプロバイダーとスナップショット、取得時刻、スキーマとクリーニングのバージョン、契約メタデータの出所、戦略のコミット、執行の前提、実行設定を記録します。各取引から、その根拠となった気配値の記録までたどれるリンクも残します。
この小さな記録があれば、正体の分からない再実行結果も、確認可能な差分に変わります。オプションの過去データは今後も訂正されます。リサーチのプロセスでは、訂正のたびに何が変わったかを確認できるようにし、実験を書き換えることなく、より良いアーカイブを証拠の改善につなげましょう。
← 記事一覧


