2026年11月7日 · マイクロストラクチャー

バックテストは正しい価格を誤った市場から読み取っていた

バックテストは正しい価格を誤った市場から読み取っていた

UTC 10:14、単純なブレイクアウト戦略が、価格が20-minute高値を上抜けた後に暗号資産の無期限先物を買いました。バックテストでは$64,210で約定したことになっていました。その価格はデータに記録され、シグナルのタイムスタンプも正しく、シミュレーション上の注文は次のバーで到着していました。私たちは、問題のない結果だと判断しかけました。

そこで、金融商品IDを照合しました。シグナルの元になったのはBTCUSDT無期限先物でした。約定価格の参照元はBTCUSDインバース契約でした。どちらも$64,210近辺で取引され、流動性もありました。それでも、価格、ティックサイズ、板の厚み、手数料体系が異なる別々のオーダーブックです。バックテストは、どのトレーダーもアクセスできない市場をつなぎ合わせていました。

戦略自体はありふれたものでした。ローリング高値を終値で上抜けたらエントリーし、ローリング安値を終値で下抜けたら決済し、各ポジションのリスクを一定のドル額に設定します。問題が見つかったのは、「BTCはいくらだったのか」よりも正確な問いを立てたときでした。私たちは、「その時点で、この注文はこの契約でいくら分買えたのか」と尋ねました。

戦略を動かす前から、チャートは複数市場の合成だった

私たちのリサーチ用フィードでは、取引所を簡単に比較できました。シンボルを標準化し、統合価格系列を表示していました。市場を眺めるには便利でしたが、執行価格の参照元としては不適切でした。合成価格には複数の取引所で最も有利な価格が表示されることがありますが、戦略が注文を送れる取引所は1つだけです。

ブレイクアウト時、統合バーの高値は$64,205でした。選択した契約の直近約定価格は、すでに$64,218まで動いていました。一方、キャッシュされたインバース契約の気配値には、まだ$64,210の売り気配が表示されていました。シミュレーターは一方の系列からブレイクアウトを検出し、別の系列から有利な売り気配を採用しました。それぞれの価格は実在しました。しかし、組み合わせると架空の価格になります。

入力バックテストで使用したもの注文に必要だったもの
ブレイクアウト高値BTCの統合価格選択した契約の価格履歴
エントリー参照価格キャッシュされたインバース契約の売り気配取引対象の金融商品の最新の売り気配
約定数量要求したポジションサイズ各価格水準で利用可能な数量

市場データテーブルの1行は完全に見えても、各フィールドが異なる市場を表していることがあります。シンボルの別名は、2つの金融商品が同じ板を共有している証拠にはなりません。契約ID、取引所、建値通貨、タイムスタンプは、シグナル生成から執行まで一緒に扱う必要があります。

注文をオーダーブックに対してリプレイした

選択した無期限先物固有の最良売り気配と、意思決定時点で利用可能だったオーダーブックの更新を使って、エントリーを再計算しました。気配値は新鮮でしたが、最良気配の価格には0.18 BTCしかありませんでした。シミュレーション上の注文は0.50 BTCでした。残りの0.32 BTCは、さらに高い売り気配まで買い上がることになります。

$64,218注文到着時の最良売り気配
0.18 BTCその売り気配での利用可能数量
$64,231数量加重のリプレイ価格

調整後のエントリー価格は、手数料を含める前の表示約定価格よりBTCあたり$21高くなりました。単一の取引なら小さな差です。しかし、テスト全体では、戦略の総利益の大半を生んだのは、数回の素早いブレイクアウトでした。エントリーを正しいオーダーブックに対してリプレイすると、総損益は31%減少し、taker手数料とインパクトを加えると、さらに低下しました。

また、最良気配がシグナルの意思決定時刻より後に届いていたケースを2件見つけました。最も近いタイムスタンプで結合するバックテストでは、気づかないうちに未来の更新を選ぶことがあります。現在は後方結合を行い、注文送信時点までに気配値が観測されていることを必須とし、その経過時間も記録しています。最後に利用できる気配値が古すぎる場合、シミュレーターは注文を約定不能とするか、明示した古いデータのルールを適用します。

取引可能な価格に必要な条件

バーの終値はシグナルの計算には役立ちます。しかし、特定の注文がその価格で約定できたことの証明にはなりません。そのためには、価格が正確な金融商品と取引所に対応し、注文到着時に利用可能で、要求数量を満たすだけの反対売買の数量が必要です。データからこれらの問いに答えられない場合、誠実な出力はレンジか未約定であり、正確な価格を作り出すことではありません。

市場全体の状況を把握するため、統合系列は残し、執行の処理経路からは外しました。シグナルは選択した契約固有の価格履歴を参照し、注文はその契約のオーダーブックに対してリプレイします。約定を計算した後に手数料と数量を反映しています。配線は少し増えましたが、損益曲線はずっと見栄えのしないものになりました。

あのブレイクアウトは実際に起きました。ただ、バックテストは戦略が選んだ市場よりも有利な市場を与えていたのです。

暗号資産先物、オーダーブック、市場データ、バックテスト、執行
← 記事一覧