Generate realistic market data including stock prices, OHLCV bars, and options chains.
The finance generators create data suitable for:
- Quantitative finance research
- Trading strategy backtesting
- Options pricing demos
- Risk management analysis
- Portfolio analytics
The stock_prices() function generates realistic price series using Geometric Brownian Motion (GBM).
from superstore import stock_prices
# Generate 252 days of stock prices (1 trading year)
df = stock_prices(nper=252, initial_price=150.0)
# Multiple tickers with correlation
df = stock_prices(nper=252, tickers=["AAPL", "GOOGL", "MSFT"])| Column | Type | Description |
|---|---|---|
date |
date | Trading date |
ticker |
str | Stock ticker symbol |
close |
float | Closing price |
The options_chain() function generates options chain data with Black-Scholes pricing and Greeks.
from superstore import options_chain
# Generate options chain for a $150 stock
df = options_chain(underlying_price=150.0, n_strikes=10)| Column | Type | Description |
|---|---|---|
strike |
float | Strike price |
expiration |
date | Expiration date |
type |
str | Option type (call/put) |
premium |
float | Option premium |
delta |
float | Delta |
gamma |
float | Gamma |
theta |
float | Theta |
vega |
float | Vega |
iv |
float | Implied volatility |
The finance() function generates complete financial datasets including OHLCV bars, multi-asset returns, and options.
from superstore import finance
# Generate full finance dataset
data = finance(tickers=["AAPL", "GOOGL"], nper=252)Use FinanceConfig for detailed control:
from superstore import finance, FinanceConfig
config = FinanceConfig(
ndays=500,
n_assets=3,
seed=42,
)
data = finance(config=config)config = FinanceConfig(
ndays=252, # Trading days (252 = 1 year)
n_assets=3, # Number of assets
tickers=["AAPL", "GOOGL", "MSFT"],
start_date="2024-01-02",
seed=42,
)| Parameter | Default | Description |
|---|---|---|
ndays |
252 |
Number of trading days |
n_assets |
1 |
Number of assets |
tickers |
["AAPL"] |
Ticker symbols |
start_date |
"2024-01-02" |
Start date (ISO format) |
asset_correlation |
0.5 |
Correlation between assets |
Configure the underlying price process:
config = FinanceConfig(
ndays=252,
stock={
"annual_drift": 0.10, # 10% expected annual return
"annual_volatility": 0.25, # 25% annual volatility
"initial_price": 175.0, # Starting price
# Jump diffusion
"enable_jumps": True,
"jump_probability": 0.03, # 3% daily jump probability
"jump_mean": -0.01, # Slight downward bias (crashes)
"jump_stddev": 0.08, # Jump size variability
}
)| Parameter | Default | Description |
|---|---|---|
annual_drift |
0.08 |
Annual expected return (mu) |
annual_volatility |
0.20 |
Annual volatility (sigma) |
initial_price |
100.0 |
Initial stock price |
enable_jumps |
False |
Enable jump diffusion |
jump_probability |
0.02 |
Daily probability of jump |
jump_mean |
0.0 |
Mean jump size (log-normal) |
jump_stddev |
0.05 |
Jump size standard deviation |
Configure OHLCV (Open-High-Low-Close-Volume) bars:
config = FinanceConfig(
ndays=252,
ohlcv={
"avg_volume": 2_000_000, # Average daily volume
"volume_volatility": 0.6, # Volume variability
"intraday_volatility": 0.03, # Intraday price range
"volume_price_correlation": 0.4, # Volume-return correlation
}
)| Parameter | Default | Description |
|---|---|---|
avg_volume |
1,000,000 |
Average daily trading volume |
volume_volatility |
0.5 |
Volatility of volume (log-normal) |
intraday_volatility |
0.02 |
Intraday price range volatility |
volume_price_correlation |
0.3 |
Volume-absolute return correlation |
Configure options chain generation with Black-Scholes pricing:
config = FinanceConfig(
ndays=252,
options={
"risk_free_rate": 0.045, # Risk-free rate
"dividend_yield": 0.015, # Dividend yield
"expirations": [7, 14, 30, 45, 60, 90], # Days to expiration
"strike_offsets": [0.85, 0.90, 0.95, 1.0, 1.05, 1.10, 1.15],
}
)| Parameter | Default | Description |
|---|---|---|
risk_free_rate |
0.05 |
Annual risk-free rate |
dividend_yield |
0.02 |
Annual dividend yield |
expirations |
[7, 14, 30, 60, 90] |
Days to expiration |
strike_offsets |
[0.90, 0.95, ...] |
Strike as multiplier of spot |
from superstore import finance, FinanceConfig
config = FinanceConfig(
ndays=500,
n_assets=4,
tickers=["AAPL", "GOOGL", "MSFT", "AMZN"],
start_date="2023-01-03",
asset_correlation=0.65,
seed=42,
# Stock process
stock={
"annual_drift": 0.12,
"annual_volatility": 0.22,
"initial_price": 150.0,
"enable_jumps": True,
"jump_probability": 0.02,
"jump_mean": -0.005,
"jump_stddev": 0.06,
},
# OHLCV bars
ohlcv={
"avg_volume": 5_000_000,
"volume_volatility": 0.5,
"intraday_volatility": 0.025,
"volume_price_correlation": 0.35,
},
# Options chain
options={
"risk_free_rate": 0.05,
"dividend_yield": 0.01,
"expirations": [7, 14, 21, 30, 45, 60, 90, 120],
"strike_offsets": [0.85, 0.90, 0.95, 0.97, 1.0, 1.03, 1.05, 1.10, 1.15],
},
)
data = finance(config=config)See the full API documentation: