Data API
Unified Data Manager
Routes data requests to appropriate sources: - Historical data: Parquet files (fast, local) - Real-time data: Polygon API - Sentiment: Alpha Vantage API - Fundamentals: yfinance API
Implements smart routing and fallback strategies.
- class quantlab.data.data_manager.DataManager(config, db, parquet)[source]
Bases:
objectUnified data manager with smart routing
Features: - Automatic source selection (Parquet vs API) - Caching with TTL - Fallback strategies - Greeks calculation
- __init__(config, db, parquet)[source]
Initialize data manager
- Parameters:
config (
Config) – Configuration objectdb (
DatabaseManager) – Database managerparquet (
ParquetReader) – Parquet reader
- get_stock_price(ticker, date=None, use_cache=True)[source]
Get stock price data
Strategy: - If date is None (real-time): Use Polygon API - If date is provided: Use Parquet (historical) - Cache results in database
- get_intraday_prices(ticker, interval='1min', from_date=None, to_date=None, limit=50000, include_extended_hours=False)[source]
Get intraday price data at minute/hour intervals
- Parameters:
ticker (
str) – Stock ticker symbolinterval (
str) – Time interval (‘1min’, ‘5min’, ‘15min’, ‘30min’, ‘1hour’)from_date (
Optional[str]) – Start date in YYYY-MM-DD format (default: today)to_date (
Optional[str]) – End date in YYYY-MM-DD format (default: today)limit (
int) – Maximum number of bars (default: 50000)include_extended_hours (
bool) – If True, include pre-market and after-hours data. If False (default), only include regular market hours (9:30 AM - 4 PM ET)
- Returns:
date, open, high, low, close, volume, vwap or None if no data available
- Return type:
pandas DataFrame with columns
Example
>>> # Get today's 5-minute data (regular hours only) >>> df = data_manager.get_intraday_prices("AAPL", interval="5min") >>> # Get 1 year of 5-minute data including pre/post market >>> df = data_manager.get_intraday_prices("AAPL", interval="5min", ... from_date="2024-01-01", to_date="2025-01-01", include_extended_hours=True)
- get_options_chain(ticker, expiration_date=None, option_type=None, min_itm_pct=5.0, max_itm_pct=20.0, use_cache=True)[source]
Get options chain with calculated advanced Greeks
- Parameters:
ticker (
str) – Underlying ticker symbolexpiration_date (
Optional[date]) – Optional specific expirationoption_type (
Optional[str]) – Optional ‘call’ or ‘put’ filtermin_itm_pct (
float) – Minimum ITM percentagemax_itm_pct (
float) – Maximum ITM percentageuse_cache (
bool) – Whether to use cached data
- Return type:
List[OptionContract]- Returns:
List of OptionContract objects with Greeks
- get_technical_indicators(ticker, days=200, verify_calculations=False)[source]
Get technical indicators using hybrid approach: - Primary: Polygon API for SMA, EMA, MACD, RSI (faster, pre-calculated) - Fallback: Calculate from Parquet historical data - Always calculate: Bollinger Bands, ATR, Stochastic, OBV, ADX (not in Polygon)
- Parameters:
- Return type:
- Returns:
Dictionary with all technical indicators or None
API client wrappers for external data sources
Provides unified interface to: - Polygon.io (real-time quotes, options chains) - Alpha Vantage (news sentiment, treasury rates) - yfinance (fundamentals, analyst data)
- class quantlab.data.api_clients.RateLimiter(requests_per_minute)[source]
Bases:
objectSimple rate limiter for API calls
- class quantlab.data.api_clients.PolygonClient(api_key, rate_limit=10000)[source]
Bases:
objectWrapper for Polygon.io API
Provides: - Real-time stock quotes - Options chains - Historical OHLCV data - Company details - Technical indicators (SMA, EMA, MACD, RSI)
- get_options_chain(ticker, expiration_date=None, contract_type=None, max_workers=50)[source]
Get options chain for a ticker (parallel fetching)
- Parameters:
- Return type:
- Returns:
List of option contracts
- get_intraday_aggregates(ticker, multiplier=1, timespan='minute', from_date=None, to_date=None, limit=50000)[source]
Get intraday aggregate bars (minute-level data) from Polygon.
- Parameters:
ticker (
str) – Stock ticker symbolmultiplier (
int) – Size of the timespan multiplier (e.g., 1, 5, 15, 30)timespan (
str) – Size of the time window (‘minute’, ‘hour’)from_date (
str) – Start date in YYYY-MM-DD format (default: today)to_date (
str) – End date in YYYY-MM-DD format (default: today)limit (
int) – Maximum number of results (default: 50000, max: 50000)
- Return type:
- Returns:
List of dictionaries with OHLCV data or None
Example
>>> client.get_intraday_aggregates("AAPL", multiplier=5, timespan="minute") >>> # Get 1 year of 5-minute data >>> client.get_intraday_aggregates("AAPL", multiplier=5, from_date="2024-01-01", to_date="2025-01-01")
- class quantlab.data.api_clients.AlphaVantageClient(api_key, rate_limit=5)[source]
Bases:
objectWrapper for Alpha Vantage API
Provides: - News sentiment analysis - Treasury rates - Economic indicators
- BASE_URL = 'https://www.alphavantage.co/query'