Pair Trade Screener

ペアトレーディング機会の特定と分析のための統計的裁定ツールです。セクター内の共和分関係にある株式ペアを検出し、スプレッドの挙動を分析、Zスコアを計算し、マーケットニュートラル戦略のエントリー/エグジット推奨を提供します。ペアトレーディング機会、統計的裁定スクリーニング、平均回帰戦略、またはマーケットニュートラルポートフォリオ構築を求められた際に使用します。相関分析、共和分検定、スプレッドバックテストをサポートします。

FMP必須

スキルパッケージをダウンロード (.skill) GitHubでソースを見る

目次

1. 概要

このスキルは、ペアトレーディングを通じて統計的裁定の機会を特定・分析します。ペアトレーディングは、相関のある2つの証券の相対的な価格変動から利益を得るマーケットニュートラル戦略であり、市場全体の方向に関係なく機能します。相関分析と共和分検定を含む厳密な統計手法を使用して、堅牢なトレーディングペアを見つけます。

コアメソドロジー:

  • 高い相関と類似したセクター/業種エクスポージャーを持つ銘柄ペアを特定
  • 共和分(長期的な統計的関係)を検定
  • スプレッドZスコアを計算して平均回帰の機会を特定
  • 統計的閾値に基づくエントリー/エグジットシグナルを生成
  • マーケットニュートラルエクスポージャーのポジションサイジングを提供

主要な利点:

  • マーケットニュートラル: 上昇、下降、横ばいのいずれの市場でも利益を得る
  • リスク管理: 広範な市場変動へのエクスポージャーが限定的
  • 統計的根拠: データ駆動型、裁量的ではない
  • 分散化: 従来のロングオンリー戦略と無相関

2. 使用タイミング

以下の場合にこのスキルを使用します:

  • 「ペアトレーディングの機会」を求められた場合
  • 「マーケットニュートラル戦略」が必要な場合
  • 「統計的裁定スクリーニング」を要求された場合
  • 「どの銘柄が連動して動くか」を聞かれた場合
  • セクターエクスポージャーのヘッジが必要な場合
  • 平均回帰トレードアイデアを求められた場合
  • 相対バリュートレーディングについて質問された場合

リクエスト例:

  • “テクノロジーセクターでペアトレーディングの機会を見つけて”
  • “共和分関係にある銘柄は?”
  • “統計的裁定の機会をスクリーニングして”
  • “平均回帰ペアを見つけて”
  • “今の良いマーケットニュートラルトレードは?”

3. 前提条件

  • FMP APIキー必須(FMP_API_KEY 環境変数)
  • 統計的裁定分析
  • Python 3.9+ 推奨

4. クイックスタート

# 特定セクターでペアをスクリーニング
python3 pair-trade-screener/scripts/find_pairs.py --sector Technology

# 特定のペアを分析
python3 pair-trade-screener/scripts/analyze_spread.py AAPL MSFT

# カスタム共和分パラメータ
python3 pair-trade-screener/scripts/find_pairs.py \
  --sector Financials \
  --min-correlation 0.7 \
  --lookback-days 365

5. ワークフロー

ステップ1: ペアユニバースの定義

目的: ペア関係を分析するための銘柄プールを確立。

オプションA: セクターベースのスクリーニング(推奨)

分析する特定セクターを選択:

  • Technology, Financials, Healthcare, Consumer Discretionary, Industrials, Energy, Materials, Consumer Staples, Utilities, Real Estate, Communication Services

オプションB: カスタム銘柄リスト

ユーザーが分析する特定ティッカーを提供:

例: ["AAPL", "MSFT", "GOOGL", "META", "NVDA"]

オプションC: 業種特化

セクター内の特定業種に絞り込み:

  • 例: Technology内の “Software”
  • 例: Financials内の “Regional Banks”

フィルタリング基準:

  • 最低時価総額: $2B(ミッドキャップ以上)
  • 最低平均出来高: 100万株/日(流動性要件)
  • アクティブな取引: 上場廃止や非活動銘柄は除外
  • 同一取引所が望ましい: クロス取引所の複雑さを回避

ステップ2: ヒストリカル価格データの取得

目的: 相関と共和分分析のための価格履歴を取得。

データ要件:

  • 期間: 2年(最低252取引日)
  • 頻度: 日次終値
  • 調整: 分割・配当調整済み
  • クリーンデータ: ギャップや欠損値なし

FMP APIエンドポイント:

GET /v3/historical-price-full/{symbol}?apikey=YOUR_API_KEY

データ検証:

  • 全シンボルで一貫した日付範囲を確認
  • 10%超の欠損データがある銘柄を除外
  • 軽微なギャップはフォワードフィル方式で補完
  • データ品質の問題をログに記録

スクリプト実行:

python scripts/fetch_price_data.py --sector Technology --lookback 730

ステップ3: 相関とベータの計算

目的: 強い線形関係を持つ候補ペアを特定。

相関分析:

ユニバース内の各銘柄ペア(i, j)について:

  1. ピアソン相関係数(ρ)を計算
  2. ローリング相関(90日ウィンドウ)で安定性を確認
  3. ρ >= 0.70 のペアをフィルタリング(強い正の相関)

相関の解釈:

  • ρ >= 0.90: 非常に強い相関(最良の候補)
  • ρ 0.70-0.90: 強い相関(良い候補)
  • ρ 0.50-0.70: 中程度の相関(限界的)
  • ρ < 0.50: 弱い相関(除外)

ベータ計算:

各候補ペア(銘柄A、銘柄B)について:

Beta = Covariance(A, B) / Variance(B)

ベータはヘッジ比率を示す:

  • Beta = 1.0: 同額のドル金額
  • Beta = 1.5: Aの$1.00に対してBは$1.50
  • Beta = 0.8: Aの$1.00に対してBは$0.80

ステップ4: 共和分検定

目的: 長期均衡関係を統計的に検証。

共和分が重要な理由:

  • 相関は短期的な共変動を測定
  • 共和分は長期均衡関係を証明
  • 共和分ペアは予測可能に平均回帰
  • 非共和分ペアは永続的に乖離する可能性

拡張ディッキー-フラー(ADF)検定:

各相関ペアについて:

  1. スプレッドを計算: Spread = Price_A - (Beta × Price_B)
  2. スプレッド系列にADF検定を実行
  3. p値を確認: p < 0.05 は共和分を示す(単位根の帰無仮説を棄却)
  4. 強度ランキング用のADF統計量を抽出

共和分の解釈:

  • p値 < 0.01: 非常に強い共和分
  • p値 0.01-0.05: 中程度の共和分
  • p値 > 0.05: 共和分なし(除外)

半減期の計算:

平均回帰速度の推定:

Half-Life = -log(2) / log(mean_reversion_coefficient)
  • 半減期 < 30日: 速い平均回帰(短期トレーディングに適合)
  • 半減期 30-60日: 中程度の速度(標準)
  • 半減期 > 60日: 遅い平均回帰(長期保有期間)

ステップ5: スプレッド分析とZスコア計算

目的: 均衡からの現在のスプレッド乖離を定量化。

スプレッド計算:

2つの一般的な方法:

方法1: 価格差(加法的)

Spread = Price_A - (Beta × Price_B)

適している場合: 類似した価格水準の銘柄

方法2: 価格比率(乗法的)

Spread = Price_A / Price_B

適している場合: 異なる価格水準の銘柄、解釈が容易

Zスコア計算:

スプレッドが平均から何標準偏差離れているかを測定:

Z-Score = (Current_Spread - Mean_Spread) / Std_Dev_Spread

Zスコアの解釈:

  • Z > +2.0: 銘柄AがBに対して割高(Aをショート、Bをロング)
  • Z > +1.5: やや割高(エントリーを注視)
  • Z -1.5〜+1.5: 通常範囲(トレードなし)
  • Z < -1.5: やや割安(エントリーを注視)
  • Z < -2.0: 銘柄AがBに対して割安(Aをロング、Bをショート)

ステップ6: エントリー/エグジット推奨の生成

目的: 明確なルール付きのアクショナブルなトレーディングシグナルを提供。

エントリー条件:

保守的アプローチ(Z >= ±2.0):

ロングシグナル:
- Zスコア < -2.0(スプレッドが平均から2標準偏差以上下方)
- スプレッドが平均回帰性(共和分 p < 0.05)
- 半減期 < 60日
→ アクション: 銘柄Aを買い、銘柄Bをショート(ヘッジ比率 = ベータ)

ショートシグナル:
- Zスコア > +2.0(スプレッドが平均から2標準偏差以上上方)
→ アクション: 銘柄Aをショート、銘柄Bを買い

エグジット条件:

  • プライマリーエグジット: Zスコアが0を横切った時(平均回帰)
  • セカンダリーエグジット: Zスコアが±1.0で50%利確、0で残り50%
  • ストップロス: Zスコアが±3.0を超えた場合(極端な乖離)
  • 時間ベースエグジット: 90日後に平均回帰がなければ退出

ステップ7: ポジションサイジングとリスク管理

目的: マーケットニュートラルエクスポージャーのドル金額を決定。

マーケットニュートラルサイジング:

ペア(銘柄A、銘柄B)でベータ = β の場合:

ポートフォリオサイズ = $10,000をこのペアに配分する場合:
- 銘柄Aを$5,000ロング
- 銘柄Bを$5,000 × β ショート

例 (β = 1.2):
- 銘柄Aを$5,000ロング
- 銘柄Bを$6,000ショート
→ マーケットニュートラル、ベータ = 0

ポジションサイジングの考慮事項:

  • ペアあたりの総配分: ポートフォリオの10-20%
  • 最大ペア数: 分散のために5-8のアクティブペア
  • ペア間の相関: 高相関のペア同士を避ける

リスク指標:

  • ペアあたり最大損失: 総ポートフォリオの2-3%
  • ストップロストリガー: Zスコア > ±3.0 またはスプレッドで-5%の損失
  • ポートフォリオレベルリスク: 全ペアリスクの合計 ≤ 10%

ステップ8: ペア分析レポートの生成

目的: 結果と推奨を含む構造化されたMarkdownレポートを作成。

レポートセクション:

  1. エグゼクティブサマリー - 分析ペア総数、共和分ペア数、上位5機会
  2. 共和分ペアテーブル - ペア名、相関係数、共和分p値、Zスコア、シグナル、半減期
  3. 詳細分析(上位10ペア) - 統計指標、エントリー/エグジット推奨、ポジションサイジング
  4. スプレッドチャート(テキストベース) - ヒストリカルZスコアプロット(ASCIIアート)
  5. リスク警告 - 相関劣化ペア、構造的ブレーク、低流動性

ファイル命名規則:

pair_trade_analysis_[SECTOR]_[YYYY-MM-DD].md

6. リソース

リファレンス:

  • skills/pair-trade-screener/references/cointegration_guide.md
  • skills/pair-trade-screener/references/methodology.md

スクリプト:

  • skills/pair-trade-screener/scripts/analyze_spread.py
  • skills/pair-trade-screener/scripts/find_pairs.py