mcpField
P
pair-trade-screener

pair-trade-screener

github.com/mphinanceデータ・データベース3288 回インストール5 日前に更新
リポジトリ

pair-trade-screener について

pair-trade-screenerは、統計的裁定取引やマーケットニュートラル戦略を検討する株式トレーダー向けの分析スキルです。相関、共和分検定、スプレッドのzスコアを組み合わせ、ペアと売買シグナルを評価します。

主な機能

  1. 01セクターまたは指定銘柄からペアを選定
  2. 02相関とヘッジ用ベータの計算
  3. 03ADFによる共和分検定
  4. 04スプレッドのzスコアと半減期の計算
  5. 05売買シグナルとポジション案の提示
  6. 06ペア分析レポートの作成

活用シーン

  1. 01テクノロジーなどのセクターでペア取引を探索
  2. 022銘柄の平均回帰性を検証
  3. 03ペアのエントリー・決済・リスクを評価
  4. 04マーケットニュートラルな相対価値戦略の構築

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mphinance/alpha-skills --skill pair-trade-screener

インストール後、Claude Code で/pair-trade-screenerを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

README.md
references/
cointegration_guide.md
methodology.md
scripts/
analyze_spread.py
find_pairs.py

詳細

ペアトレードスクリーナー

概要

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

主な手法:

  • 相関が高く、セクターや業種へのエクスポージャーが似ている株式ペアを特定する
  • 共和分(長期的な統計的関係)を検定する
  • スプレッドのZスコアを計算し、平均回帰の機会を特定する
  • 統計的なしきい値に基づいてエントリー/エグジットシグナルを生成する
  • マーケットニュートラルなエクスポージャーに向けたポジションサイズを提示する

主な利点:

  • マーケットニュートラル:上昇相場、下落相場、横ばい相場のいずれでも利益を狙えます
  • リスク管理:市場全体の動きへのエクスポージャーを限定できます
  • 統計的な根拠:裁量ではなく、データに基づきます
  • 分散効果:従来のロングオンリー戦略とは相関しません

このスキルを使用する場面

次のような場合にこのスキルを使用してください:

  • ユーザーが「ペアトレーディングの機会」を求めている
  • ユーザーが「マーケットニュートラル戦略」を求めている
  • ユーザーが「統計的裁定のスクリーニング」を依頼している
  • ユーザーが「値動きが連動する株式はどれか」と尋ねている
  • ユーザーがセクターエクスポージャーのヘッジを望んでいる
  • ユーザーが平均回帰を狙う取引アイデアを求めている
  • ユーザーが相対価値取引について尋ねている

ユーザーからの依頼例:

  • 「テクノロジーセクターでペアトレーディングの機会を見つけて」
  • 「共和分関係にある株式はどれですか?」
  • 「統計的裁定の機会をスクリーニングして」
  • 「平均回帰するペアを見つけて」
  • 「現在、有望なマーケットニュートラル取引は何ですか?」

分析ワークフロー

ステップ 1:ペアの対象範囲を定義する

目的: ペアの関係を分析する対象となる株式群を決定します。

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

スクリーニング対象のセクターを選択します:

  • テクノロジー
  • 金融
  • ヘルスケア
  • 一般消費財
  • 資本財
  • エネルギー
  • 素材
  • 生活必需品
  • 公益事業
  • 不動産
  • コミュニケーション・サービス

オプション B:カスタム株式リスト

ユーザーが分析対象のティッカーを指定します:

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

オプション C:業種別

セクター内の特定の業種に対象を絞ります:

  • 例:テクノロジーセクター内の「ソフトウェア」
  • 例:金融セクター内の「地方銀行」

フィルタリング条件:

  • 最低時価総額:20億ドル(中型株以上)
  • 最低平均出来高:1日あたり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)

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

  • ベータ = 1.0:同額を投資
  • ベータ = 1.5:A に $1.00 投資するごとに、B に $1.50 投資
  • ベータ = 0.8:A に $1.00 投資するごとに、B に $0.80 投資

相関の安定性確認:

  • 複数の期間(6 か月、1 年、2 年)にわたる相関を計算します
  • 相関が安定している(悪化していない)ことを確認します
  • 直近の相関が過去の相関を 0.15 超下回るペアにフラグを付けます
ステップ 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 日:平均回帰が遅い(保有期間が長くなります)

Python の実装:

from statsmodels.tsa.stattools import adfuller

# Calculate spread
spread = price_a - (beta * price_b)

# ADF test
result = adfuller(spread)
adf_stat = result[0]
p_value = result[1]

# Interpret
is_cointegrated = p_value < 0.05
ステップ 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:B に対して株式 A が割高(A をショート、B をロング)
  • Z > +1.5:やや割高(エントリーを検討)
  • Z -1.5 から +1.5:通常の範囲(取引なし)
  • Z < -1.5:やや割安(エントリーを検討)
  • Z < -2.0:B に対して株式 A が割安(A をロング、B をショート)

過去のスプレッド分析:

  • 90 日間のローリングウィンドウで平均と標準偏差を計算します
  • 過去の Z スコア分布をプロットします
  • 過去の Z スコアの最大乖離を特定します
  • 構造変化(スプレッドのレジーム変化)を確認します
ステップ 6:エントリー/決済の推奨を生成

目的: 明確なルールに基づく実行可能な取引シグナルを提示します。

エントリー条件:

保守的なアプローチ(Z ≥ ±2.0):

LONG Signal:
- Z-score < -2.0 (spread 2+ std devs below mean)
- Spread is mean-reverting (cointegration p < 0.05)
- Half-life < 60 days
→ Action: Buy Stock A, Short Stock B (hedge ratio = beta)

SHORT Signal:
- Z-score > +2.0 (spread 2+ std devs above mean)
- Spread is mean-reverting (cointegration p < 0.05)
- Half-life < 60 days
→ Action: Short Stock A, Buy Stock B (hedge ratio = beta)

積極的なアプローチ(Z ≥ ±1.5):

  • 閾値を下げて取引頻度を高めます
  • 勝率は上がりますが、1 取引あたりの平均利益は小さくなります
  • より厳格なリスク管理が必要です

決済条件:

主な決済条件:平均回帰(Z = 0)

Exit when spread returns to mean (z-score crosses 0)
→ Close both legs simultaneously

副次的な決済条件:利益の一部確定

Exit 50% when z-score reaches ±1.0
Exit remaining 50% at z-score = 0

損切り:

Exit if z-score extends beyond ±3.0 (extreme divergence)
Risk: Possible structural break in relationship

保有期間に基づく決済:

Exit after 90 days if no mean-reversion
Prevents holding broken pairs indefinitely
ステップ 7:ポジションサイジングとリスク管理

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

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

ベータ = β のペア(株式 A、株式 B)の場合:

ドルエクスポージャーを均等にする:

If portfolio size = $10,000 allocated to this pair:
- Long $5,000 of Stock A
- Short $5,000 × β of Stock B

Example (β = 1.2):
- Long $5,000 Stock A
- Short $6,000 Stock B
→ Market neutral, beta = 0

ポジションサイジングに関する考慮事項:

  • ペアごとの総配分:ポートフォリオの 10~20%
  • ペアの最大数:分散投資のため、アクティブなペアを 5~8 組
  • ペア間の相関:相関の高いペアは避けます

リスク指標:

  • ペアごとの最大損失:ポートフォリオ全体の 2~3%
  • 損切りのトリガー:Z スコア > ±3.0、またはスプレッドの損失が -5%
  • ポートフォリオ全体のリスク:すべてのペアのリスクの合計 ≤ 10%
ステップ 8:ペア分析レポートを生成する

目的: 分析結果と推奨事項をまとめた、構造化された Markdown レポートを作成します。

レポートのセクション:

  1. エグゼクティブサマリー

    • 分析したペアの合計数
    • 見つかった共和分ペアの数
    • 統計的な強さに基づいて順位付けした、有望な機会の上位 5 件
  2. 共和分ペアの表

    • ペア名(株式 A / 株式 B)
    • 相関係数
    • 共和分の p 値
    • 現在の Z スコア
    • 取引シグナル(ロング/ショート/なし)
    • 半減期
  3. 詳細分析(上位 10 ペア)

    • ペアの説明
    • 統計指標
    • 現在のスプレッドポジション
    • エントリー/エグジットの推奨事項
    • ポジションサイジング
    • リスク評価
  4. スプレッドチャート(テキスト形式)

    • 過去の Z スコアプロット(ASCII アート)
    • エントリー/エグジットの水準を表示
    • 現在のポジションを示すインジケーター
  5. リスクに関する警告

    • 相関が悪化しているペア
    • 検出された構造変化
    • 流動性の低さに関する警告

ファイル命名規則:

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

例:pair_trade_analysis_Technology_2025-11-08.md

品質基準

統計的な厳密性

有効なペアの最低要件:

  • ✓ 2 年間にわたり相関 ≥ 0.70
  • ✓ 共和分の p 値 < 0.05(ADF 検定)
  • ✓ スプレッドの定常性が確認されている
  • ✓ 半減期 < 90 日
  • ✓ 直近 6 か月間に構造変化がない

危険信号(ペアを除外):

  • 直近 6 か月間に相関が >0.20 低下している
  • 共和分の p 値 > 0.05
  • 半減期が時間の経過とともに長くなっている(平均回帰が弱まっている)
  • 重大な企業イベント(合併、スピンオフ、倒産リスク)
  • 流動性への懸念(平均取引量が 1 日あたり 50 万株未満)
実務上の考慮事項

取引コスト:

  • 片方のポジションにつき、往復コストは 0.1%と想定します
  • ペアごとの総コスト = 0.4%(エントリー + エグジット、両方のポジション)
  • 最小 Z スコアのしきい値は、取引コストを上回る必要があります

空売り:

  • 株式が空売り可能か(借株困難ではないか)確認します
  • 空売りにかかるコスト(借株料)を考慮します
  • ショートスクイーズのリスクを監視します

執行:

  • レッグリスクを避けるため、両方のポジションを同時にエントリー/エグジットします
  • スリッページを抑えるため、指値注文を使用します
  • エントリー前に空売り用の株式を事前に確保します

利用可能なスクリプト

scripts/find_pairs.py

目的: セクターまたは指定リスト内の共和分ペアをスクリーニングします。

使い方:

# Sector-based screening
python scripts/find_pairs.py --sector Technology --min-correlation 0.70

# Custom stock list
python scripts/find_pairs.py --symbols AAPL,MSFT,GOOGL,META --min-correlation 0.75

# Full options
python scripts/find_pairs.py \
  --sector Financials \
  --min-correlation 0.70 \
  --min-market-cap 2000000000 \
  --lookback-days 730 \
  --output pairs_analysis.json

パラメーター:

  • --sector:セクター名(Technology、Financials など)
  • --symbols:ティッカーのカンマ区切りリスト(セクターの代わりに指定)
  • --min-correlation:相関の最小しきい値(デフォルト:0.70)
  • --min-market-cap:時価総額の最小値によるフィルター(デフォルト:$2B)
  • --lookback-days:過去データの対象期間(デフォルト:730 日)
  • --output:出力する JSON ファイル(デフォルト:stdout)
  • --api-key:FMP API キー(または環境変数 FMP_API_KEY を設定)

出力:

[
  {
    "pair": "AAPL/MSFT",
    "stock_a": "AAPL",
    "stock_b": "MSFT",
    "correlation": 0.87,
    "beta": 1.15,
    "cointegration_pvalue": 0.012,
    "adf_statistic": -3.45,
    "half_life_days": 42,
    "current_zscore": -2.3,
    "signal": "LONG",
    "strength": "Strong"
  }
]
scripts/analyze_spread.py

目的: 特定のペアのスプレッドの動きを分析し、取引シグナルを生成します。

使い方:

# Analyze specific pair
python scripts/analyze_spread.py --stock-a AAPL --stock-b MSFT

# Custom lookback period
python scripts/analyze_spread.py \
  --stock-a JPM \
  --stock-b BAC \
  --lookback-days 365 \
  --entry-zscore 2.0 \
  --exit-zscore 0.5

パラメーター:

  • --stock-a:1 つ目の株式ティッカー
  • --stock-b:2 つ目の株式ティッカー
  • --lookback-days:分析期間(デフォルト:365 日)
  • --entry-zscore:エントリーの Z スコアしきい値(デフォルト:2.0)
  • --exit-zscore:エグジットの Z スコアしきい値(デフォルト:0.0)
  • --api-key:FMP API キー

出力:

  • 現在のスプレッド分析
  • Z スコアの計算
  • エントリー/エグジットの推奨事項
  • ポジションサイジング
  • 過去の Z スコアチャート(テキスト)

参考ドキュメント

references/methodology.md

統計的裁定取引とペアトレードの包括的なガイド:

  • ペア選定基準:有望なペア候補を特定する方法
  • 統計的検定:相関、共和分、定常性
  • スプレッドの構築:価格差と価格比のアプローチ
  • 平均回帰:半減期の計算と解釈
  • リスク管理:ポジションサイズ、損切り、分散
  • よくある落とし穴:生存者バイアス、先読みバイアス、過剰適合
references/cointegration_guide.md

共和分検定の詳細な解説:

  • 共和分とは?:直感的な説明
  • ADF 検定:手順を順を追って解説
  • P 値の解釈:統計的有意性のしきい値
  • 半減期の推定:AR(1)モデルのアプローチ
  • 構造変化:レジーム変化の検定
  • 実践例:実際のペアを用いたケーススタディ

他のスキルとの連携

セクターアナリストとの連携:

  • セクターアナリストを使って、資金が流入しているセクターを特定します
  • パフォーマンスが優れているセクター内でペアをスクリーニングします
  • 先行セクターのペアは、より強いトレンドを示す可能性があります

テクニカルアナリストとの連携:

  • 個別銘柄のテクニカル分析で、ペアのエントリー/エグジットを確認します
  • エントリー前にサポート/レジスタンスの水準を確認します
  • トレンドの方向がスプレッドのシグナルと一致しているか検証します

バックテストエキスパートとの連携:

  • ペア候補をバックテストエキスパートに渡して検証します
  • 過去の Z スコアに基づくエントリー/エグジットルールをテストします
  • しきい値パラメーター(エントリー Z スコア、損切り)を最適化します
  • ロバスト性を確認するため、ウォークフォワード分析を行います

市場環境分析との連携:

  • 極端なボラティリティの際(VIX > 30)は、ペアトレードを避けます
  • 危機的な局面では相関が崩れることがあります
  • 横ばい相場やレンジ相場では、ペアトレードを優先します

ポートフォリオマネージャーとの連携:

  • 複数のペアポジションを追跡します
  • ポートフォリオ全体のマーケットニュートラルなエクスポージャーを監視します
  • ポートフォリオ全体のペアトレード損益(P/L)を計算します
  • ヘッジ比率を定期的にリバランスします

重要な注意事項

  • 分析と出力はすべて英語で行います
  • 統計的基盤:裁量による解釈は行いません
  • マーケットニュートラルを重視:方向性のあるベータ・エクスポージャーを最小限に抑えます
  • データ品質が重要:入力が不適切であれば、結果も不適切になります
  • FMP API キーが必要:基本的なスクリーニングには無料プランで十分です
  • Python の依存関係:pandas、numpy、scipy、statsmodels

よくあるユースケース

ユースケース 1:テクノロジーセクターのペア

User: "Find pair trading opportunities in tech stocks"

Workflow:
1. Screen Technology sector for stocks with market cap > $10B
2. Calculate all pairwise correlations
3. Filter pairs with correlation ≥ 0.75
4. Run cointegration tests
5. Identify current z-score extremes (|z| > 2.0)
6. Generate top 10 pairs report

ユースケース 2:特定ペアの分析

User: "Analyze AAPL and MSFT as a pair trade"

Workflow:
1. Fetch 2-year price history for AAPL and MSFT
2. Calculate correlation and beta
3. Test for cointegration
4. Calculate current spread and z-score
5. Generate entry/exit recommendation
6. Provide position sizing guidance

ユースケース 3:地方銀行のペア

User: "Screen for pairs among regional banks"

Workflow:
1. Filter Financials sector for industry = "Regional Banks"
2. Exclude banks with <$5B market cap
3. Calculate pairwise statistics
4. Rank by cointegration strength
5. Focus on pairs with half-life < 45 days
6. Report top 5 mean-reverting pairs

トラブルシューティング

問題:共和分するペアが見つからない

解決策:

  • 対象銘柄群を広げます(時価総額のしきい値を下げます)
  • 共和分の P 値を 0.10 に緩和します
  • 別のセクターを試します(公益事業は共和分しやすい傾向があります)
  • ルックバック期間を 3 年に延ばします

問題:すべての Z スコアがゼロ付近で、トレードシグナルがない

解決策:

  • 市場が通常の状態で、ペアが均衡している可能性があります
  • 後で再確認するか、対象銘柄群を広げます
  • エントリーしきい値を ±2.0 から ±1.5 に下げます

問題:ペアの相関が崩れた

解決策:

  • 企業イベント(決算、ガイダンスの変更)がないか確認します
  • M&A 活動や事業再編がないことを確認します
  • 構造変化が確認された場合は、ペアをウォッチリストから削除します
  • 再エントリーする前に 30 日間監視します

API の要件

  • 必須:FMP API キー(無料プランで十分です)
  • レート制限:無料プランでは 1 日あたり約 250 リクエスト
  • データ使用量:2 年分の履歴データの場合、銘柄あたり約 2 リクエスト
  • アップグレード:頻繁にスクリーニングを行う場合は、Professional プラン($29/mo)を推奨します

リソース


バージョン:1.0 最終更新日:2025-11-08 依存関係:Python 3.8+、pandas、numpy、scipy、statsmodels、requests

コメント