PA

Identifies cointegrated asset pairs and calculates trading metrics to determine entry and exit points.

Install

mkdir -p .claude/skills/pair-trade-screener && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/402" && unzip -o skill.zip -d .claude/skills/pair-trade-screener && rm skill.zip

Installs to .claude/skills/pair-trade-screener

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Statistical arbitrage tool for identifying and analyzing pair trading opportunities. Detects cointegrated stock pairs within sectors, analyzes spread behavior, calculates z-scores, and provides entry/exit recommendations for market-neutral strategies. Use when user requests pair trading opportunities, statistical arbitrage screening, mean-reversion strategies, or market-neutral portfolio construction. Supports correlation analysis, cointegration testing, and spread backtesting.
482 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Advanced

Key capabilities

  • Identify cointegrated stock pairs
  • Calculate spread z-scores
  • Perform correlation and beta analysis
  • Generate entry and exit trading signals
  • Backtest pair trading strategies

How it works

The tool screens assets for statistical relationships using correlation and cointegration tests. It calculates the spread between pairs and uses z-scores to determine mean-reversion trade opportunities.

Inputs & outputs

You give it
Sector name or list of stock tickers
You get back
List of cointegrated pairs with trading recommendations

When to use pair-trade-screener

  • Screening for cointegrated assets
  • Calculating spread z-scores
  • Backtesting pair trading strategies

About this skill

Pair Trade Screener

Overview

This skill identifies and analyzes statistical arbitrage opportunities through pair trading. Pair trading is a market-neutral strategy that profits from the relative price movements of two correlated securities, regardless of overall market direction. The skill uses rigorous statistical methods including correlation analysis and cointegration testing to find robust trading pairs.

Core Methodology:

  • Identify pairs of stocks with high correlation and similar sector/industry exposure
  • Test for cointegration (long-term statistical relationship)
  • Calculate spread z-scores to identify mean-reversion opportunities
  • Generate entry/exit signals based on statistical thresholds
  • Provide position sizing for market-neutral exposure

Key Advantages:

  • Market-neutral: Profits in up, down, or sideways markets
  • Risk management: Limited exposure to broad market movements
  • Statistical foundation: Data-driven, not discretionary
  • Diversification: Uncorrelated to traditional long-only strategies

When to Use This Skill

Use this skill when:

  • User asks for "pair trading opportunities"
  • User wants "market-neutral strategies"
  • User requests "statistical arbitrage screening"
  • User asks "which stocks move together?"
  • User wants to hedge sector exposure
  • User requests mean-reversion trade ideas
  • User asks about relative value trading

Example user requests:

  • "Find pair trading opportunities in the tech sector"
  • "Which stocks are cointegrated?"
  • "Screen for statistical arbitrage opportunities"
  • "Find mean-reversion pairs"
  • "What are good market-neutral trades right now?"

Prerequisites

  • Python 3.9 or newer
  • An FMP API key with access to the company screener and historical-price endpoints
  • statsmodels>=0.14,<0.15 for ADF and autoregression calculations

Set the API key without placing it on the command line or in a committed file:

export FMP_API_KEY="<fmp-api-key>"

Run the scripts from the repository root with the statistical dependency isolated to the command:

uv run --with 'statsmodels>=0.14,<0.15' python \
  skills/pair-trade-screener/scripts/find_pairs.py \
  --symbols AAPL,MSFT \
  --output /tmp/pair-trade/pairs.json

Analysis Workflow

Step 1: Define Pair Universe

Objective: Establish the pool of stocks to analyze for pair relationships.

Option A: Sector-Based Screening (Recommended)

Select a specific sector to screen:

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

Option B: Custom Stock List

User provides specific tickers to analyze:

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

Option C: Industry-Specific

Narrow focus to specific industry within sector:

  • Example: "Software" within Technology sector
  • Example: "Regional Banks" within Financials

Filtering Criteria:

  • Minimum market cap: $2B (mid-cap and above)
  • Minimum average volume: 1M shares/day (liquidity requirement)
  • Active trading: No delisted or inactive stocks
  • Same exchange preference: Avoid cross-exchange complications

Step 2: Retrieve Historical Price Data

Objective: Fetch price history for correlation and cointegration analysis.

Data Requirements:

  • Timeframe: 2 years (minimum 252 trading days)
  • Frequency: Daily closing prices
  • Adjustments: Adjusted for splits and dividends
  • Clean data: No gaps or missing values

FMP API Endpoint:

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

Data Validation:

  • Verify consistent date ranges across all symbols
  • Remove stocks with >10% missing data
  • Fill minor gaps with forward-fill method
  • Log data quality issues

Script Execution:

uv run --with 'statsmodels>=0.14,<0.15' python \
  skills/pair-trade-screener/scripts/find_pairs.py \
  --sector Technology \
  --lookback-days 730 \
  --output /tmp/pair-trade/technology.json

Step 3: Calculate Correlation and Beta

Objective: Identify candidate pairs with strong linear relationships.

Correlation Analysis:

For each pair of stocks (i, j) in the universe:

  1. Calculate Pearson correlation coefficient (ρ)
  2. Calculate rolling correlation (90-day window) for stability check
  3. Filter pairs with ρ >= 0.70 (strong positive correlation)

Correlation Interpretation:

  • ρ >= 0.90: Very strong correlation (best candidates)
  • ρ 0.70-0.90: Strong correlation (good candidates)
  • ρ 0.50-0.70: Moderate correlation (marginal)
  • ρ < 0.50: Weak correlation (exclude)

Beta Calculation:

For each candidate pair (Stock A, Stock B):

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

Beta indicates the hedge ratio:

  • Beta = 1.0: Equal dollar amounts
  • Beta = 1.5: $1.50 of B for every $1.00 of A
  • Beta = 0.8: $0.80 of B for every $1.00 of A

Correlation Stability Check:

  • Calculate correlation over multiple periods (6mo, 1yr, 2yr)
  • Require correlation to be stable (not deteriorating)
  • Flag pairs where recent correlation < historical correlation by >0.15

Step 4: Cointegration Testing

Objective: Statistically validate long-term equilibrium relationship.

Why Cointegration Matters:

  • Correlation measures short-term co-movement
  • Cointegration proves long-term equilibrium relationship
  • Cointegrated pairs mean-revert predictably
  • Non-cointegrated pairs may diverge permanently

Augmented Dickey-Fuller (ADF) Test:

For each correlated pair:

  1. Calculate spread: Spread = Price_A - (Beta × Price_B)
  2. Run ADF test on spread series
  3. Check p-value: p < 0.05 indicates cointegration (reject null hypothesis of unit root)
  4. Extract ADF statistic for strength ranking

Cointegration Interpretation:

  • p-value < 0.01: Very strong cointegration (★★★)
  • p-value 0.01-0.05: Moderate cointegration (★★)
  • p-value > 0.05: No cointegration (exclude)

Half-Life Calculation:

Estimate mean-reversion speed:

Half-Life = -log(2) / log(mean_reversion_coefficient)
  • Half-life < 30 days: Fast mean-reversion (good for short-term trading)
  • Half-life 30-60 days: Moderate speed (standard)
  • Half-life > 60 days: Slow mean-reversion (long holding periods)

Python Implementation:

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

Step 5: Spread Analysis and Z-Score Calculation

Objective: Quantify current spread deviation from equilibrium.

Spread Calculation:

Two common methods:

Method 1: Price Difference (Additive)

Spread = Price_A - (Beta × Price_B)

Best for: Stocks with similar price levels

Method 2: Price Ratio (Multiplicative)

Spread = Price_A / Price_B

Best for: Stocks with different price levels, easier interpretation

Z-Score Calculation:

Measures how many standard deviations spread is from its mean:

Z-Score = (Current_Spread - Mean_Spread) / Std_Dev_Spread

Z-Score Interpretation:

  • Z > +2.0: Stock A expensive relative to B (short A, long B)
  • Z > +1.5: Moderately expensive (watch for entry)
  • Z -1.5 to +1.5: Normal range (no trade)
  • Z < -1.5: Moderately cheap (watch for entry)
  • Z < -2.0: Stock A cheap relative to B (long A, short B)

Historical Spread Analysis:

  • Calculate mean and std dev over 90-day rolling window
  • Plot historical z-score distribution
  • Identify maximum historical z-score deviations
  • Check for structural breaks (spread regime change)

Step 6: Generate Entry/Exit Recommendations

Objective: Provide actionable trading signals with clear rules.

Entry Conditions:

Conservative Approach (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)

Aggressive Approach (Z ≥ ±1.5):

  • Lower threshold for more frequent trades
  • Higher win rate but smaller avg profit per trade
  • Requires tighter risk management

Exit Conditions:

Primary Exit: Mean Reversion (Z = 0)

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

Secondary Exit: Partial Profit Take

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

Stop Loss:

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

Time-Based Exit:

Exit after 90 days if no mean-reversion
Prevents holding broken pairs indefinitely

Step 7: Position Sizing and Risk Management

Objective: Determine dollar amounts for market-neutral exposure.

Market Neutral Sizing:

For a pair (Stock A, Stock B) with beta = β:

Equal Dollar Exposure:

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

Position Sizing Considerations:

  • Total pair allocation: 10-20% of portfolio per pair
  • Maximum pairs: 5-8 active pairs for diversification
  • Correlation across pairs: Avoid highly correlated pairs

Risk Metrics:

  • Maximum loss per pair: 2-3% of total portfolio
  • Stop loss trigger: Z-score > ±3.0 or -5% loss on spread
  • Portfolio-level risk: Sum of all pair risks ≤ 10%

Step 8: Generate Pair Analysis Report

Objective: Create structured markdown report with findings and recommendations.

Report Sections:

  1. Executive Summary

    • Total pairs analyzed
    • Number of cointegrated pairs found
    • Top 5 opportunities ranked by statistical strength
  2. **Cointegr


Content truncated.

When not to use it

  • When trading directional strategies
  • When market volatility is extremely high
  • When you lack historical price data

Prerequisites

FMP API key

Limitations

  • Requires at least 252 trading days of historical data
  • Correlations can break down during market crises

How it compares

It automates the statistical validation of pairs and signal generation, whereas manual analysis would require complex spreadsheet modeling and data fetching.

Compared to similar skills

pair-trade-screener side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
pair-trade-screener (this skill)111moReviewAdvanced
quant-analyst1032moNo flagsAdvanced
stock-analyzer712moReviewBeginner
risk-metrics-calculation82moNo flagsIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

quant-analyst

zenobi-us

Expert quantitative analyst specializing in financial modeling, algorithmic trading, and risk analytics. Masters statistical methods, derivatives pricing, and high-frequency trading with focus on mathematical rigor, performance optimization, and profitable strategy development.

103355

stock-analyzer

FrancyJGLisboa

Provides comprehensive technical analysis for stocks and ETFs using RSI, MACD, Bollinger Bands, and other indicators. Activates when user requests stock analysis, technical indicators, trading signals, or market data for specific ticker symbols.

71214

risk-metrics-calculation

wshobson

Calculate portfolio risk metrics including VaR, CVaR, Sharpe, Sortino, and drawdown analysis. Use when measuring portfolio risk, implementing risk limits, or building risk monitoring systems.

881

backtesting-trading-strategies

jeremylongshore

Backtest crypto and traditional trading strategies against historical data. Calculates performance metrics (Sharpe, Sortino, max drawdown), generates equity curves, and optimizes strategy parameters. Use when user wants to test a trading strategy, validate signals, or compare approaches. Trigger with phrases like "backtest strategy", "test trading strategy", "historical performance", "simulate trades", "optimize parameters", or "validate signals".

1071

model-usage

openclaw

Use CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.

548

agent-trading-predictor

ruvnet

Agent skill for trading-predictor - invoke with $agent-trading-predictor

942

Search skills

Search the agent skills registry