戦略
Bybit PCA残差(Avellaneda-Leeのsスコア)回帰:時点別Bybit USDT無期限先物上位-20銘柄、日次リターンに3ファクターPCAを適用、60日間のリターンでロング z<-1.5/ショート z>+1.5の単独銘柄ベット、|z|<0.5または10日経過で決済(1-DAY本のバー、極端な値の銘柄がなければポジションなし)
結果: 中止
BybitPcaResidualSScoreReversionDaily
結果サマリー
この仮説では、Avellaneda-LeeのPCAのsスコア回帰アイデアをUS銘柄から、日足の時点別Bybit USDT無期限先物上位N銘柄へ移し、両極端をヘッジなしの単一銘柄ベットとして取引します。3回の反復を通じ、戦略はLayer 3のサンドボックス検証で300秒の実時間制限を超え、失敗し続けました。最終版では性能だけを変更し、流動性の高い無期限先物8銘柄(BTC、ETH、SOL、XRP、DOGE、ADA、LINK、LTC)に絞りました。シグナルは変更しませんでしたが、検証を通過できませんでした。バックテスト指標を出す前に実行を断念しました。
仮説
分類:(a)具体的なトレード案。元の手法では、ドル建て出来高上位N銘柄のUS株を対象に、3個の成分でPCAを当てはめ、各銘柄をファクターに回帰します。直近の残差を標準化してzスコアにし、z < -1.5の銘柄を|z|に応じて配分して買います。30日ごとにリバランスし、年率約7%、ドローダウン約40%を報告しています(未検証)。これをUSEQへ移植するのはNOTです。教訓L128では日足バーのUSEQを禁じており、20銘柄を月次でリバランスすると、10年間で約115回のリバランスとなり、デフレーションで常に取り除かれます。仕組みはBybit USDT線形無期限先物で第一原理から再構成しています(>=5%の目標に対する0.8%のコーパス比率;L160に基づく純粋な価格トリガー)。ユニバース(L151に基づく時点別):候補プールは、カタログの日次履歴が2021-12-31以前に始まるすべてのBybit USDT無期限先物(78契約)です。手動選定ではなく、データ利用可能性に基づくルールです。各日次終値時点での有効ユニバースは、その日までに少なくとも90本の日次バーがある銘柄のうち、直近30日間のドル建て出来高上位20銘柄です。チュートリアルではなく論文に従うファクターモデル:標準化した日次対数RETURNSの60日×20銘柄行列に対するPCA(3)です(チュートリアルは非定常な対数価格水準を使用)。各銘柄を3個のファクターリターンに対してOLS回帰し、残差をXとして累積します。z = (X_last - Xの平均) / 60日間の標準偏差で算出します。チュートリアルからの変更点:論文と同様に両極端を取引します。各ポジションはヘッジレッグのない単独銘柄ベットです(L137)。判定は毎日行い、機械的な30日リバランスではなくzスコアに基づく決済を使います(L166)。明示したポジションなしの状態:|z| >= 1.5の銘柄がなければポジションを持ちません(予想では日数の約30-40%)。
反復3は性能だけを改善する修正です。タイムアウトの原因はParquetDataCatalogがカタログツリーを銘柄ごとにglobする処理で、期間の長さにかかわらずレッグごとに一定のコストがかかります。類似する複数レッグ戦略のプロファイリングでは、ホスト負荷が約40のとき、レッグあたり約10秒以上でした。バーごとの戦略処理は小さく、期間に応じて増えません。レッグ数を13から8に減らし、2022以前のデータがあるBybitの流動性上位USDT無期限先物に絞ります。シグナル、決済、ポジションサイズは変更しません。仮説では78契約のプールから時点別上位-20銘柄を使いますが、このハーネスの300秒のサンドボックス上限には収まりません。ファクター3個に対する銘柄8個では横断面が薄くなり、残差はBTC/ETH市場ファクターにより強く依存します。アナリストが銘柄20個の横断面すべてを求める場合、制約となるのはコードではなくサンドボックスの予算です。max_positionsを6から4に変更し、8銘柄のユニバース内に枠を収めます(グロスは引き続き資産の<=1x)。
verification_loop:sandbox_timeout:検証失敗(Layer 3 — サンドボックス・バックテスト):スモークテストは約20000本のバーの期間(BTCUSDT.BYBIT-1-DAY-LAST-EXTERNALの2400日間)でタイムアウトし、実時間制限の300秒を超えました。これはほぼ常に、履歴の長さに応じて増えるバーごとの処理を意味します。たとえば、資金調達料や補助系列全体の再走査、あるいは各バーでcalculate_signal()/on_bar()内のリスト再作成とmin()/sorted()呼び出しなどです。__init__でタイムスタンプ配列ONCEを事前にソートしてbisectを使うか、タイムスタンプをキーに検索結果をキャッシュしてください。バーごとのコストをO(n)ではなくO(log n)にできます。
実装
Avellaneda-LeeのPCA残差sスコア回帰を、日次の時点別上位N銘柄(直近30日間のドル建て出来高による)に適用し、流動性の高いBybit USDT無期限先物8銘柄を対象にします。PCA(3)では、60日間の日次対数リターン相関行列を使用します。各銘柄のリターンを固有ポートフォリオのファクターリターンに対してOLS回帰し、残差を累積して60日間のzスコアを算出します。z<=-1.5でロング、z>=+1.5でショートし、ヘッジなしの単独銘柄ベットとして取引します(同時保有は最大4銘柄、各ポジションは資産の1/4、グロスは<=1x)。|z|<0.5になったとき、または10日経過後に決済します。極端な値の銘柄がなければポジションを持ちません。
検証結果
sandbox_timeout:検証失敗(Layer 3 — サンドボックス・バックテスト):スモークテストは約20000本のバーの期間(BTCUSDT.BYBIT-1-DAY-LAST-EXTERNALの2400日間)でタイムアウトし、実時間制限の300秒を超えました。これはほぼ常に、履歴の長さに応じて増えるバーごとの処理を意味します。たとえば、資金調達料や補助系列全体の再走査、あるいは各バーでcalculate_signal()/on_bar()内のリスト再作成とmin()/sorted()呼び出しなどです。__init__でタイムスタンプ配列ONCEを事前にソートしてbisectを使うか、タイムスタンプをキーに検索結果をキャッシュしてください。バーごとのコストをO(n)ではなくO(log n)にできます。
結果サマリー
複数レッグの横断戦略では、バーごとの計算量ではなく、レッグごとのカタログ読み込みによって300秒のサンドボックス上限を超えることがあります。初稿からレッグ数を少なくするか、設計がサンドボックスの時間予算内に収まることを確認してください。
検証ループで断念しました。Layer 3のサンドボックス・バックテストはタイムアウトし、約20000本のバーの期間(BTCUSDT.BYBIT本の1-DAYバーを含む2400日)で300秒の制限を超えました。カタログ読み込みを減らすため、反復3で対象銘柄を13レッグから8レッグに減らした後もタイムアウトしました。
Avellaneda-LeeのPCA残差回帰をBybit USDT無期限先物に適用します。60日間の日次リターンに3ファクターPCAを当てはめ、各銘柄の累積残差をzスコアに変換します。z<-1.5で単独銘柄をロング、z>+1.5でショートし、|z|<0.5または10日経過で決済します。
パフォーマンス数値はありません。バックテストレポートは空で、戦略は最適化、バックテストレビュー、アナリストレビュー、リスクレビューのいずれにも進みませんでした。
Stratmillはリサーチおよびペーパートレーディングのためのツールであり、投資助言やブローカーではありません。バックテストおよびペーパートレーディングの結果は仮定に基づくものです。トレーディングには損失のリスクが伴います。