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)について:
- ピアソン相関係数(ρ)を計算
- ローリング相関(90日ウィンドウ)で安定性を確認
- ρ >= 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)検定:
各相関ペアについて:
- スプレッドを計算:
Spread = Price_A - (Beta × Price_B) - スプレッド系列にADF検定を実行
- p値を確認: p < 0.05 は共和分を示す(単位根の帰無仮説を棄却)
- 強度ランキング用の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レポートを作成。
レポートセクション:
- エグゼクティブサマリー - 分析ペア総数、共和分ペア数、上位5機会
- 共和分ペアテーブル - ペア名、相関係数、共和分p値、Zスコア、シグナル、半減期
- 詳細分析(上位10ペア) - 統計指標、エントリー/エグジット推奨、ポジションサイジング
- スプレッドチャート(テキストベース) - ヒストリカルZスコアプロット(ASCIIアート)
- リスク警告 - 相関劣化ペア、構造的ブレーク、低流動性
ファイル命名規則:
pair_trade_analysis_[SECTOR]_[YYYY-MM-DD].md
6. リソース
リファレンス:
skills/pair-trade-screener/references/cointegration_guide.mdskills/pair-trade-screener/references/methodology.md
スクリプト:
skills/pair-trade-screener/scripts/analyze_spread.pyskills/pair-trade-screener/scripts/find_pairs.py