Skip to content

theoddden/Option-Positioning-Ratios

Repository files navigation

Option-Positioning-Ratios

Enhanced version of the original Option-Positioning-Ratios repository with Databento integration, universe-wide processing, and advanced alpha generation capabilities.

Key Enhancements Over Original

Data Quality Revolution

  • Databento OPRA.PILLAR vs yfinance (institutional vs retail)
  • Nanosecond timestamps vs daily data
  • Complete order book depth vs limited quotes
  • Real-time Greeks calculation vs simplified estimates

Universe-Wide Processing

  • 3,500+ equity options vs single ticker analysis
  • Parallel processing for institutional scale
  • Cross-asset correlation analysis
  • Relative ranking within universe

Alpha Generation Framework

  • Institutional flow detection algorithms
  • Volatility surface anomaly identification
  • Gamma concentration analysis for pinning risk
  • Geopolitical sensitivity scoring

Production Architecture

  • Snowflake integration with incremental loading
  • Real-time alerting system
  • API-first design for integration
  • Error handling and data quality validation

Features

Core Positioning Ratios (Enhanced)

  1. Put/Call Volume Ratio - Sentiment analysis with liquidity filtering
  2. Open Interest Ratio - Structural positioning with notional weighting
  3. Skew Shift Ratio - Fear premium detection with moneyness filtering
  4. Delta Exposure Ratio - Directional positioning with volume weighting
  5. Gamma Exposure Ratio - Market maker inventory with GEX calculation

Advanced Alpha Signals

  • Institutional Flow Score - Large trade detection and flow acceleration
  • Volatility Surface Anomaly - Cross-expiration IV dispersion analysis
  • Gamma Concentration Score - Key strike identification for pinning risk
  • Market Maker Inventory Bias - Dealer positioning estimation
  • Unusual Activity Detector - Comprehensive anomaly detection framework

Universe-Relative Metrics

  • Percentile Rankings - Compare any metric across 3,500+ equities
  • Relative Strength Score - Cross-asset performance analysis
  • Geopolitical Sensitivity - Defense tech and event exposure scoring
  • Liquidity Quality Score - Multi-dimensional liquidity assessment

Alpha Signal Generation

  • Short-term (1-5 days) - Flow and momentum-based signals
  • Medium-term (1-4 weeks) - Setup and positioning-based signals
  • Long-term (1-3 months) - Volatility regime and structural signals
  • Geopolitical Event Signals - Taiwan scenario and defense tech analysis

Risk Management

  • Liquidity Score - Tradeability assessment
  • Concentration Risk - Strike and expiration concentration
  • Regime Detection - Market regime identification
  • Data Quality Score - Confidence assessment

Quick Start

Installation

# Clone the enhanced repository
git clone https://github.com/theoddden/Option-Positioning-Ratios.git
cd Option-Positioning-Ratios

# Install dependencies
pip install databento pandas numpy scipy snowflake-connector-python asyncio

# Set up Databento API key
export DATABENTO_API_KEY="your_api_key_here"

Basic Usage

from databento_enhanced_options_ratios import DatabentoOptionsEngine, OptionsConfig, AlphaGenerator

# Configure for institutional use
config = OptionsConfig(
    databento_api_key="your_api_key",
    snowflake_config={
        'user': 'your_username',
        'password': 'your_password', 
        'account': 'your_account',
        'warehouse': 'your_warehouse',
        'database': 'your_database',
        'schema': 'your_schema'
    },
    universe_symbols=['SPY', 'QQQ', 'PLTR', 'RKLB'],  # Optional - auto-discovery available
    volume_threshold=1000,  # $1M notional trades
    notional_threshold=1000000
)

# Initialize engine
engine = DatabentoOptionsEngine(config)

# Process single symbol
ratios = engine.calculate_enhanced_ratios('PLTR', '2026-04-20', '2026-04-22')
print(f"Put/Call Volume Ratio: {ratios['put_call_volume_ratio']:.3f}")
print(f"Skew Shift Ratio: {ratios['skew_shift_ratio']:.3f}")
print(f"Alpha Signal: {ratios['short_term_alpha_signal']}")

# Process entire universe (3,500+ symbols)
import asyncio
universe_results = await engine.process_universe('2026-04-20', '2026-04-22')

# Generate alpha signals
alpha_gen = AlphaGenerator(engine)
alpha_signals = alpha_gen.generate_universe_alpha_signals(universe_results)

print(f"Top bullish signals: {len(alpha_signals['top_bullish_signals'])}")
print(f"Unusual activity alerts: {len(alpha_signals['unusual_activity_alerts'])}")

Universe Processing

# Get complete options universe
universe = engine.get_universe_symbols()
print(f"Found {len(universe)} equity option symbols")

# Process with parallel execution
results = await engine.process_universe('2026-04-20', '2026-04-22')

# Store to Snowflake for historical analysis
engine.store_to_snowflake(results)

Architecture

Data Flow

Databento OPRA.PILLAR 
    -> Real-time Options Data 
    -> Enhanced Greeks Calculation
    -> Positioning Ratios Engine
    -> Alpha Generation Framework
    -> Snowflake Storage
    -> API Endpoints

Processing Pipeline

  1. Data Ingestion: Databento API with nanosecond timestamps
  2. Symbol Parsing: OCC symbol format with strike/expiry extraction
  3. Greeks Calculation: Real-time Black-Scholes with dividend adjustments
  4. Ratio Calculation: Enhanced algorithms with liquidity filtering
  5. Universe Analysis: Cross-asset relative ranking and correlation
  6. Alpha Generation: Multi-timeframe signal generation
  7. Risk Assessment: Liquidity, concentration, and regime analysis
  8. Storage: Snowflake with incremental materialization

Integration Examples

1. Portfolio Management System

# Real-time portfolio integration
class PortfolioManager:
    def __init__(self, options_engine):
        self.engine = options_engine
        self.positions = {}
    
    def update_portfolio_signals(self):
        # Get current portfolio symbols
        symbols = list(self.positions.keys())
        
        # Calculate ratios for all positions
        for symbol in symbols:
            ratios = self.engine.calculate_enhanced_ratios(
                symbol, 
                datetime.now().strftime('%Y-%m-%d'),
                datetime.now().strftime('%Y-%m-%d')
            )
            
            # Update position based on signals
            if ratios['short_term_alpha_signal'] == 'STRONG_BULLISH':
                self.adjust_position(symbol, 'increase')
            elif ratios['short_term_alpha_signal'] == 'BEARISH':
                self.adjust_position(symbol, 'decrease')

2. Alert System

# Real-time alerting
class AlertSystem:
    def __init__(self, options_engine):
        self.engine = options_engine
    
    def monitor_alerts(self):
        while True:
            # Get latest universe data
            universe_data = await self.engine.process_universe(
                datetime.now().strftime('%Y-%m-%d'),
                datetime.now().strftime('%Y-%m-%d')
            )
            
            # Generate alpha signals
            alpha_gen = AlphaGenerator(self.engine)
            signals = alpha_gen.generate_universe_alpha_signals(universe_data)
            
            # Send alerts for critical signals
            if signals['top_bullish_signals']:
                self.send_alert('BULLISH_SIGNALS', signals['top_bullish_signals'])
            
            if signals['unusual_activity_alerts']:
                self.send_alert('UNUSUAL_ACTIVITY', signals['unusual_activity_alerts'])
            
            # Wait for next update
            await asyncio.sleep(60)  # 1-minute updates

Configuration

Environment Variables

export DATABENTO_API_KEY="your_api_key"
export SNOWFLAKE_USER="your_username"
export SNOWFLAKE_PASSWORD="your_password"
export SNOWFLAKE_ACCOUNT="your_account"
export SNOWFLAKE_WAREHOUSE="your_warehouse"
export SNOWFLAKE_DATABASE="your_database"
export SNOWFLAKE_SCHEMA="your_schema"

Configuration File

# config.py
DATABENTO_CONFIG = {
    'api_key': os.getenv('DATABENTO_API_KEY'),
    'dataset': 'OPRA.PILLAR',
    'schema': 'mbbo-1',
    'universe_size': 3500,
    'batch_size': 50,
    'parallel_workers': 10
}

SNOWFLAKE_CONFIG = {
    'user': os.getenv('SNOWFLAKE_USER'),
    'password': os.getenv('SNOWFLAKE_PASSWORD'),
    'account': os.getenv('SNOWFLAKE_ACCOUNT'),
    'warehouse': os.getenv('SNOWFLAKE_WAREHOUSE'),
    'database': os.getenv('SNOWFLAKE_DATABASE'),
    'schema': os.getenv('SNOWFLAKE_SCHEMA')
}

ALPHA_CONFIG = {
    'volume_threshold': 1000,
    'notional_threshold': 1000000,
    'iv_expansion_threshold': 0.25,
    'gamma_concentration_threshold': 50.0,
    'flow_acceleration_threshold': 5.0,
    'skew_shift_threshold': 0.15
}

Monitoring & Alerting

Metrics to Monitor

  • Data Quality: Completeness, accuracy, latency
  • Processing Performance: Universe processing time, memory usage
  • Alpha Performance: Signal generation rate, success rates
  • System Health: API response times, error rates

Alert Types

  • Data Quality Alerts: Missing data, unusual spreads
  • Performance Alerts: Slow processing, high memory usage
  • Alpha Alerts: High-confidence signals, unusual activity
  • System Alerts: API failures, storage issues

Contributing

We welcome contributions from institutional quantitative researchers and developers. Please see CONTRIBUTING.md for guidelines.

Areas for Enhancement

  1. Additional Greeks: Charm, Vanna, Speed
  2. Volatility Surface Modeling: Parametric surface fitting
  3. Machine Learning: Pattern recognition in flow data
  4. Cross-Asset: Equity-options-futures integration
  5. International Markets: European and Asian options

License

This project is licensed under the MIT License - see the LICENSE file for details.

Changelog

Version 2.0.0 (Institutional Edition)

  • Added Databento integration for institutional data quality
  • Implemented universe-wide processing (3,500+ symbols)
  • Added advanced alpha generation framework
  • Enhanced all core ratios with institutional features
  • Added geopolitical sensitivity analysis
  • Implemented Snowflake integration
  • Added real-time alerting system
  • Enhanced risk management capabilities
  • Added comprehensive backtesting framework

Version 1.5.0

  • Added delta and gamma exposure ratios
  • Enhanced skew calculation methodology
  • Improved volume and open interest filtering
  • Added support for multiple expirations

Version 1.3.0

  • Initial release with core positioning ratios
  • Basic put/call volume and open interest analysis
  • Simple skew shift calculation
  • Support for single ticker analysis

Built for serious capital management. Designed for institutional trading desks.

About

Ratios analyzing the right/left shift of IV Skew, put/call volume, and put/call open interest on the option chain of an underlying. On SPX, computes LiquidVIX, charm peak spread width, and ODTE volume as a % of volume...

Topics

Resources

License

Stars

8 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages