The augment_rolling_risk_metrics function calculates rolling risk-adjusted performance metrics for a financial time series using either pandas or polars engine, and returns the augmented DataFrame with columns for Sharpe Ratio, Sortino Ratio, and other metrics.
The input data can be a pandas DataFrame or a pandas DataFrameGroupBy object containing the time series data for risk metric calculations.
required
date_column
str
The name of the column containing dates or timestamps.
required
close_column
str
The column containing closing prices to calculate returns and risk metrics from.
required
window
int
The rolling window size for calculations (e.g., 252 for annual). Default is 252.
252
risk_free_rate
float
The assumed risk-free rate (e.g., 0.0 for 0%). Default is 0.0.
0.0
benchmark_column
str or None
The column containing benchmark returns (e.g., market index) for Treynor and Information Ratios. Default is None.
None
annualization_factor
int
The factor to annualize returns and volatility (e.g., 252 for daily data). Default is 252.
252
metrics
List[str] or None
The list of risk metrics to calculate. Choose from: ‘sharpe_ratio’, ‘sortino_ratio’, ‘treynor_ratio’, ‘information_ratio’, ‘omega_ratio’, ‘volatility_annualized’, ‘skewness’, ‘kurtosis’. Default is None (all metrics).
None
reduce_memory
bool
If True, reduces memory usage of the DataFrame before calculation. Default is False.
False
engine
str
The computation engine to use: ‘pandas’ or ‘polars’. Default is ‘pandas’.
'pandas'
Returns
Name
Type
Description
pd.DataFrame
A pandas DataFrame augmented with columns: - {close_column}sharpe_ratio{window}: Rolling Sharpe Ratio - {close_column}sortino_ratio{window}: Rolling Sortino Ratio - {close_column}treynor_ratio{window}: Rolling Treynor Ratio (if benchmark provided) - {close_column}information_ratio{window}: Rolling Information Ratio (if benchmark provided) - {close_column}omega_ratio{window}: Rolling Omega Ratio - {close_column}volatility_annualized{window}: Rolling annualized volatility - {close_column}skewness{window}: Rolling skewness of returns - {close_column}kurtosis{window}: Rolling kurtosis of returns
Notes
This function computes returns from closing prices and calculates rolling risk metrics:
Sharpe Ratio: Excess return over risk-free rate divided by volatility
Sortino Ratio: Excess return over risk-free rate divided by downside deviation
Treynor Ratio: Excess return over risk-free rate divided by beta (requires benchmark)
Information Ratio: Excess return over benchmark divided by tracking error (requires benchmark)
Omega Ratio: Ratio of gains to losses above/below a threshold
Volatility: Annualized standard deviation of returns
Skewness: Asymmetry of return distribution
Kurtosis: Fat-tailedness of return distribution
Examples
import pandas as pdimport pytimetk as tkdf = tk.load_dataset('stocks_daily', parse_dates=['date'])# Single stock risk metricsrisk_df = ( df.query("symbol == 'AAPL'") .augment_rolling_risk_metrics( date_column='date', close_column='adjusted', window=252 ))risk_df.head()
symbol
date
open
high
low
close
volume
adjusted
adjusted_sharpe_ratio_252
adjusted_sortino_ratio_252
adjusted_volatility_annualized_252
adjusted_omega_ratio_252
adjusted_skewness_252
adjusted_kurtosis_252
5398
AAPL
2013-01-02
19.779285
19.821428
19.343929
19.608213
560518000
16.791180
NaN
NaN
NaN
NaN
NaN
NaN
5399
AAPL
2013-01-03
19.567142
19.631071
19.321428
19.360714
352965200
16.579241
NaN
NaN
NaN
NaN
NaN
NaN
5400
AAPL
2013-01-04
19.177500
19.236786
18.779642
18.821428
594333600
16.117437
NaN
NaN
NaN
NaN
NaN
NaN
5401
AAPL
2013-01-07
18.642857
18.903570
18.400000
18.710714
484156400
16.022623
NaN
NaN
NaN
NaN
NaN
NaN
5402
AAPL
2013-01-08
18.900356
18.996071
18.616072
18.761070
458707200
16.065746
NaN
NaN
NaN
NaN
NaN
NaN
# Multiple stocks with groupby and benchmarkrisk_df = ( df.groupby('symbol') .augment_rolling_risk_metrics( date_column='date', close_column='adjusted',# benchmark_column='market_adjusted_returns', # Use if a benchmark returns column exists window=60, engine='polars' ))risk_df.head()