Quantitative Finance API Reference¶
Return Analysis¶
financelib.quant.returns
¶
Return calculation and analysis functions.
Provides simple, logarithmic, cumulative, and annualized return calculations used in quantitative finance.
Functions¶
annualized_return(returns: pd.Series, periods_per_year: int = 252) -> float
¶
Calculate the annualized return.
Uses geometric mean for compounding.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
Series
|
Simple returns series. |
required |
periods_per_year
|
int
|
Trading periods per year (252 for daily, 52 for weekly). |
252
|
Returns:
| Type | Description |
|---|---|
float
|
Annualized return as a decimal. |
Source code in financelib/quant/returns.py
annualized_volatility(returns: pd.Series, periods_per_year: int = 252) -> float
¶
Calculate annualized volatility (standard deviation of returns).
sigma_annual = sigma_daily * sqrt(periods_per_year)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
Series
|
Returns series. |
required |
periods_per_year
|
int
|
Trading periods per year. |
252
|
Returns:
| Type | Description |
|---|---|
float
|
Annualized volatility as a decimal. |
Source code in financelib/quant/returns.py
cumulative_returns(returns: pd.Series) -> pd.Series
¶
Calculate cumulative returns from a returns series.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
Series
|
Simple returns series. |
required |
Returns:
| Type | Description |
|---|---|
Series
|
Cumulative returns series (starting from 0). |
Source code in financelib/quant/returns.py
log_returns(prices: pd.Series) -> pd.Series
¶
Calculate logarithmic (continuously compounded) returns.
r_t = ln(P_t / P_{t-1})
Log returns are additive across time, making them preferable for multi-period analysis.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
prices
|
Series
|
Price series. |
required |
Returns:
| Type | Description |
|---|---|
Series
|
Log returns series. |
Source code in financelib/quant/returns.py
rolling_beta(asset_returns: pd.Series, market_returns: pd.Series, window: int = 63) -> pd.Series
¶
Calculate rolling beta against a market benchmark.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
asset_returns
|
Series
|
Asset returns series. |
required |
market_returns
|
Series
|
Market/benchmark returns series. |
required |
window
|
int
|
Rolling window size. |
63
|
Returns:
| Type | Description |
|---|---|
Series
|
Rolling beta series. |
Source code in financelib/quant/returns.py
rolling_sharpe(returns: pd.Series, window: int = 63, risk_free_rate: float = 0.0, periods_per_year: int = 252) -> pd.Series
¶
Calculate rolling Sharpe ratio.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
Series
|
Returns series. |
required |
window
|
int
|
Rolling window size (default: 63 = ~3 months). |
63
|
risk_free_rate
|
float
|
Annualized risk-free rate. |
0.0
|
periods_per_year
|
int
|
Trading periods per year. |
252
|
Returns:
| Type | Description |
|---|---|
Series
|
Rolling Sharpe ratio series. |
Source code in financelib/quant/returns.py
rolling_volatility(returns: pd.Series, window: int = 21, periods_per_year: int = 252) -> pd.Series
¶
Calculate rolling annualized volatility.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
Series
|
Returns series. |
required |
window
|
int
|
Rolling window size. |
21
|
periods_per_year
|
int
|
Trading periods per year. |
252
|
Returns:
| Type | Description |
|---|---|
Series
|
Rolling annualized volatility series. |
Source code in financelib/quant/returns.py
simple_returns(prices: pd.Series) -> pd.Series
¶
Calculate simple (arithmetic) returns.
R_t = (P_t - P_{t-1}) / P_{t-1}
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
prices
|
Series
|
Price series. |
required |
Returns:
| Type | Description |
|---|---|
Series
|
Simple returns series. |
Source code in financelib/quant/returns.py
Risk Metrics¶
financelib.quant.risk_metrics
¶
Risk metrics for quantitative finance.
Implements industry-standard risk-adjusted return measures and risk quantification tools used in portfolio management and performance attribution.
Functions¶
alpha(asset_returns: pd.Series, market_returns: pd.Series, risk_free_rate: float = 0.0, periods_per_year: int = 252) -> float
¶
Calculate Jensen's alpha.
alpha = R_a - [R_f + beta * (R_m - R_f)]
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
asset_returns
|
Series
|
Asset returns series. |
required |
market_returns
|
Series
|
Market/benchmark returns series. |
required |
risk_free_rate
|
float
|
Annualized risk-free rate. |
0.0
|
periods_per_year
|
int
|
Trading periods per year. |
252
|
Returns:
| Type | Description |
|---|---|
float
|
Annualized alpha. |
Source code in financelib/quant/risk_metrics.py
beta(asset_returns: pd.Series, market_returns: pd.Series) -> float
¶
Calculate beta (systematic risk) relative to a market benchmark.
beta = Cov(R_a, R_m) / Var(R_m)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
asset_returns
|
Series
|
Asset returns series. |
required |
market_returns
|
Series
|
Market/benchmark returns series. |
required |
Returns:
| Type | Description |
|---|---|
float
|
Beta coefficient. |
Source code in financelib/quant/risk_metrics.py
calmar_ratio(returns: pd.Series, prices: pd.Series, periods_per_year: int = 252) -> float
¶
Calculate the Calmar ratio.
Calmar = Annualized Return / |Max Drawdown|
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
Series
|
Returns series. |
required |
prices
|
Series
|
Price series. |
required |
periods_per_year
|
int
|
Trading periods per year. |
252
|
Returns:
| Type | Description |
|---|---|
float
|
Calmar ratio. |
Source code in financelib/quant/risk_metrics.py
conditional_var(returns: pd.Series, confidence: float = 0.95) -> float
¶
Calculate Conditional Value at Risk (CVaR / Expected Shortfall).
The expected loss given that the loss exceeds VaR. More conservative than VaR.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
Series
|
Returns series. |
required |
confidence
|
float
|
Confidence level. |
0.95
|
Returns:
| Type | Description |
|---|---|
float
|
CVaR as a negative decimal. |
Source code in financelib/quant/risk_metrics.py
information_ratio(asset_returns: pd.Series, benchmark_returns: pd.Series, periods_per_year: int = 252) -> float
¶
Calculate the Information Ratio.
IR = (R_a - R_b) / TE, where TE is tracking error.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
asset_returns
|
Series
|
Asset returns series. |
required |
benchmark_returns
|
Series
|
Benchmark returns series. |
required |
periods_per_year
|
int
|
Trading periods per year. |
252
|
Returns:
| Type | Description |
|---|---|
float
|
Annualized Information Ratio. |
Source code in financelib/quant/risk_metrics.py
max_drawdown(prices: pd.Series) -> float
¶
Calculate maximum drawdown from peak.
MDD = (Trough - Peak) / Peak
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
prices
|
Series
|
Price series. |
required |
Returns:
| Type | Description |
|---|---|
float
|
Maximum drawdown as a negative decimal (e.g., -0.25 for -25%). |
Source code in financelib/quant/risk_metrics.py
sharpe_ratio(returns: pd.Series, risk_free_rate: float = 0.0, periods_per_year: int = 252) -> float
¶
Calculate the annualized Sharpe ratio.
SR = (R_p - R_f) / sigma_p * sqrt(N)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
Series
|
Asset returns series. |
required |
risk_free_rate
|
float
|
Annualized risk-free rate (e.g., 0.05 for 5%). |
0.0
|
periods_per_year
|
int
|
Trading periods per year (252 daily, 12 monthly). |
252
|
Returns:
| Type | Description |
|---|---|
float
|
Annualized Sharpe ratio. |
Source code in financelib/quant/risk_metrics.py
sortino_ratio(returns: pd.Series, risk_free_rate: float = 0.0, periods_per_year: int = 252) -> float
¶
Calculate the annualized Sortino ratio.
Uses downside deviation instead of total standard deviation, penalizing only negative volatility.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
Series
|
Asset returns series. |
required |
risk_free_rate
|
float
|
Annualized risk-free rate. |
0.0
|
periods_per_year
|
int
|
Trading periods per year. |
252
|
Returns:
| Type | Description |
|---|---|
float
|
Annualized Sortino ratio. |
Source code in financelib/quant/risk_metrics.py
treynor_ratio(asset_returns: pd.Series, market_returns: pd.Series, risk_free_rate: float = 0.0, periods_per_year: int = 252) -> float
¶
Calculate the Treynor ratio.
Treynor = (R_a - R_f) / beta
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
asset_returns
|
Series
|
Asset returns series. |
required |
market_returns
|
Series
|
Market/benchmark returns series. |
required |
risk_free_rate
|
float
|
Annualized risk-free rate. |
0.0
|
periods_per_year
|
int
|
Trading periods per year. |
252
|
Returns:
| Type | Description |
|---|---|
float
|
Treynor ratio. |
Source code in financelib/quant/risk_metrics.py
value_at_risk(returns: pd.Series, confidence: float = 0.95, method: str = 'historical') -> float
¶
Calculate Value at Risk (VaR).
Estimates the maximum expected loss at a given confidence level.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
Series
|
Returns series. |
required |
confidence
|
float
|
Confidence level (e.g., 0.95 for 95%). |
0.95
|
method
|
str
|
Calculation method ('historical' or 'parametric'). |
'historical'
|
Returns:
| Type | Description |
|---|---|
float
|
VaR as a negative decimal representing potential loss. |
Source code in financelib/quant/risk_metrics.py
Portfolio Analysis¶
financelib.quant.portfolio
¶
Portfolio analysis and optimization tools.
Provides mean-variance optimization, portfolio performance metrics, and covariance/correlation analysis for multi-asset portfolios.
Functions¶
correlation_matrix(returns: pd.DataFrame) -> pd.DataFrame
¶
Calculate the correlation matrix of asset returns.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
DataFrame
|
DataFrame of asset returns (columns = assets). |
required |
Returns:
| Type | Description |
|---|---|
DataFrame
|
Correlation matrix as DataFrame. |
Source code in financelib/quant/portfolio.py
covariance_matrix(returns: pd.DataFrame) -> pd.DataFrame
¶
Calculate the covariance matrix of asset returns.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
DataFrame
|
DataFrame of asset returns (columns = assets). |
required |
Returns:
| Type | Description |
|---|---|
DataFrame
|
Covariance matrix as DataFrame. |
Source code in financelib/quant/portfolio.py
equal_weight_portfolio(n_assets: int) -> np.ndarray
¶
Generate equal-weight portfolio allocation.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
n_assets
|
int
|
Number of assets. |
required |
Returns:
| Type | Description |
|---|---|
ndarray
|
Array of equal weights (1/n for each asset). |
Source code in financelib/quant/portfolio.py
minimum_variance_weights(returns: pd.DataFrame) -> np.ndarray
¶
Calculate minimum variance portfolio weights.
Uses analytical solution: w = (Sigma^-1 * 1) / (1^T * Sigma^-1 * 1)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
DataFrame
|
DataFrame of asset returns (columns = assets). |
required |
Returns:
| Type | Description |
|---|---|
ndarray
|
Array of optimal weights for minimum variance portfolio. |
Source code in financelib/quant/portfolio.py
portfolio_return(weights: np.ndarray, returns: pd.DataFrame) -> float
¶
Calculate expected portfolio return.
R_p = w^T * mu
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
weights
|
ndarray
|
Array of portfolio weights (must sum to 1). |
required |
returns
|
DataFrame
|
DataFrame of asset returns (columns = assets). |
required |
Returns:
| Type | Description |
|---|---|
float
|
Expected portfolio return. |
Source code in financelib/quant/portfolio.py
portfolio_sharpe(weights: np.ndarray, returns: pd.DataFrame, risk_free_rate: float = 0.0, periods_per_year: int = 252) -> float
¶
Calculate portfolio Sharpe ratio.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
weights
|
ndarray
|
Portfolio weights. |
required |
returns
|
DataFrame
|
DataFrame of asset returns. |
required |
risk_free_rate
|
float
|
Annualized risk-free rate. |
0.0
|
periods_per_year
|
int
|
Trading periods per year. |
252
|
Returns:
| Type | Description |
|---|---|
float
|
Annualized portfolio Sharpe ratio. |
Source code in financelib/quant/portfolio.py
portfolio_volatility(weights: np.ndarray, returns: pd.DataFrame) -> float
¶
Calculate portfolio volatility (standard deviation).
sigma_p = sqrt(w^T * Sigma * w)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
weights
|
ndarray
|
Array of portfolio weights. |
required |
returns
|
DataFrame
|
DataFrame of asset returns. |
required |
Returns:
| Type | Description |
|---|---|
float
|
Portfolio standard deviation. |
Source code in financelib/quant/portfolio.py
Statistical Analysis¶
financelib.quant.statistics
¶
Statistical analysis functions for quantitative finance.
Provides distribution tests, mean-reversion analysis, and time-series statistics commonly used in academic finance research.
Functions¶
autocorrelation(returns: pd.Series, lag: int = 1) -> float
¶
Calculate autocorrelation at a given lag.
Measures how correlated returns are with their own past values. Significant autocorrelation may indicate momentum or mean reversion.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
Series
|
Returns series. |
required |
lag
|
int
|
Number of periods to lag. |
1
|
Returns:
| Type | Description |
|---|---|
float
|
Autocorrelation coefficient at the specified lag. |
Source code in financelib/quant/statistics.py
half_life(prices: pd.Series) -> float
¶
Calculate the half-life of mean reversion using OLS.
Fits: delta_y = alpha + beta * y_{t-1} + epsilon Half-life = -ln(2) / beta
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
prices
|
Series
|
Price series (should be a spread or log-price series). |
required |
Returns:
| Type | Description |
|---|---|
float
|
Half-life in periods. Lower values indicate faster mean reversion. |
Source code in financelib/quant/statistics.py
hurst_exponent(prices: pd.Series, max_lag: int = 100) -> float
¶
Estimate the Hurst exponent using R/S analysis.
H < 0.5: Mean-reverting (anti-persistent) H = 0.5: Random walk H > 0.5: Trending (persistent)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
prices
|
Series
|
Price series. |
required |
max_lag
|
int
|
Maximum lag for R/S calculation. |
100
|
Returns:
| Type | Description |
|---|---|
float
|
Estimated Hurst exponent. |
Source code in financelib/quant/statistics.py
jarque_bera_test(returns: pd.Series) -> Tuple[float, float]
¶
Perform the Jarque-Bera test for normality.
Tests whether the sample data has skewness and kurtosis matching a normal distribution.
JB = (n/6) * (S^2 + (K-3)^2/4)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
Series
|
Returns series. |
required |
Returns:
| Type | Description |
|---|---|
float
|
Tuple of (JB statistic, p-value). |
float
|
p-value < 0.05 rejects normality at 95% confidence. |
Source code in financelib/quant/statistics.py
kurtosis(returns: pd.Series, excess: bool = True) -> float
¶
Calculate the kurtosis of a returns distribution.
Excess kurtosis > 0 indicates fat tails (leptokurtic), common in financial returns.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
Series
|
Returns series. |
required |
excess
|
bool
|
If True, return excess kurtosis (Fisher's definition). |
True
|
Returns:
| Type | Description |
|---|---|
float
|
Kurtosis value. |
Source code in financelib/quant/statistics.py
rolling_z_score(series: pd.Series, window: int = 20) -> pd.Series
¶
Alias for z_score with rolling window.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
series
|
Series
|
Input series. |
required |
window
|
int
|
Rolling window. |
20
|
Returns:
| Type | Description |
|---|---|
Series
|
Rolling z-score series. |
Source code in financelib/quant/statistics.py
skewness(returns: pd.Series) -> float
¶
Calculate the skewness of a returns distribution.
Positive skew: more extreme positive returns. Negative skew: more extreme negative returns (typical for equities).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
returns
|
Series
|
Returns series. |
required |
Returns:
| Type | Description |
|---|---|
float
|
Skewness value. |
Source code in financelib/quant/statistics.py
z_score(series: pd.Series, window: int = 20) -> pd.Series
¶
Calculate rolling z-score.
z = (x - mean) / std
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
series
|
Series
|
Input series. |
required |
window
|
int
|
Rolling window for mean and std. |
20
|
Returns:
| Type | Description |
|---|---|
Series
|
Z-score series. |