A Python implementation of the Realized Quantiles methodology for high-frequency financial data analysis, based on the work of Dimitriadis & Halbleib (2022).
This package provides tools for computing tail risk measures (Value-at-Risk and Expected Shortfall) from high-frequency trading data using intrinsic-time sampling schemes. It enables more accurate risk forecasting by accounting for the time-varying nature of financial markets.
-
Multiple Intrinsic-Time Sampling Schemes:
- CTS (Constant Time Sampling): Traditional calendar-time sampling
- TickTS (Tick Time Sampling): Based on transaction counts
- TTS (Time Transformation Sampling): Based on average intraday transaction patterns
- BTS (Business Time Sampling): Volatility-based sampling using tripower variation
-
Realized Risk Measures:
- Realized Quantiles (RQ): high-frequency VaR estimates
- Realized Expected Shortfall (RES): high-frequency ES estimates
-
Forecasting & Evaluation:
- HAR (Heterogeneous AutoRegressive) models for RQ/RES forecasting
- Proper scoring rules (Fissler-Ziegel) for forecast evaluation
- Coverage testing and model comparison
git clone https://github.com/Mapirlet/Realized-Quantiles.git
cd Realized-Quantiles
pip install -e .- Python >= 3.11
- pandas >= 2.2.0
- numpy >= 2.0.0
- scipy >= 1.13.0
- arch >= 7.2.0 (for HAR models)
- statsmodels >= 0.14.0
- matplotlib >= 3.9.0
- tqdm >= 4.67.0
import realized_quantiles as rq
# Load stock data from CSV files
data = rq.load_stock_data("AAPL")Expected data format: CSV files with columns Dates, Time, Price
# Choose a sampling scheme: "CTS", "TickTS", "TTS", or "BTS"
intensity = rq.build_intensity(
data=data,
scheme="BTS",
frequency_seconds=1
)# Resample trades based on the intensity measure
resampled_data, cumulative_intensity = rq.batch_resample(
data=data,
intensities=intensity,
n_trades=390 # Number of observations per day
)from realized_quantiles.returns import compute_intraday_returns
# Compute intraday returns
intraday_returns = compute_intraday_returns(resampled_data)
# Compute empirical VaR and ES
var_es = rq.compute_daily_var_es(
intraday_returns,
prob_levels=[0.01, 0.025, 0.05] # 1%, 2.5%, 5% risk levels
)
# Scale to daily Realized Quantiles and Realized ES
rq_res = rq.compute_daily_realized_var_es(
var_es,
scaling_index_H=0.5, # Hurst exponent (0.5 for Brownian motion)
c=390 # Number of intraday observations
)# Rolling forecast using Heterogeneous AutoRegressive models
forecasts = rq.rolling_forecast_HAR(
series=rq_res,
window_size=252, # 1 year of trading days
forecast_horizon=1, # 1-day ahead
har_lags=[1, 5, 22] # Daily, weekly, monthly lags
)from realized_quantiles.returns import calculate_daily_log_returns
# Compute actual daily returns
daily_returns = calculate_daily_log_returns(data)
# Calculate average asymmetric VaR scores
var_scores = rq.calculate_average_asymmetric_var_scores(
actual_returns=daily_returns,
forecasted_data=forecasts,
probability_levels=[0.01, 0.025, 0.05]
)
# Calculate joint VaR-ES scores (Fissler-Ziegel)
joint_scores = rq.calculate_average_svares_scores(
actual_returns=daily_returns,
forecasted_data=forecasts,
probability_levels=[0.01, 0.025, 0.05]
)
print(var_scores)
print(joint_scores)realized_quantiles/
├── __init__.py # Main package interface
├── config.py # Configuration (trading hours, paths)
├── data_loader.py # Load high-frequency data
├── intensity.py # Build intensity measures (CTS/TickTS/TTS/BTS)
├── sampling.py # Resample to intrinsic time
├── returns.py # Compute log returns (intraday & daily)
├── tail_risk.py # Compute RQ, RES, volatility measures
├── forecasting.py # HAR forecasting models
├── scoring.py # Forecast evaluation (scoring rules, coverage)
└── dma.py # DMA estimator for Hurst exponent (diagnostics)
This implementation follows the methodology from:
Dimitriadis, T., & Halbleib, R. (2022). Realized Quantiles.
Traditional risk measures computed on calendar-time data may miss important intraday dynamics. This package implements intrinsic-time sampling schemes that adapt to market activity:
- CTS: Uniform sampling (baseline)
- TickTS: Sample proportionally to transaction counts
- TTS: Sample based on average historical transaction patterns
- BTS: Sample based on realized volatility (tripower variation)
Realized Quantiles are obtained by:
- Resampling tick data to intrinsic time
- Computing empirical quantiles from intraday returns
- Scaling to daily horizon using the Hurst exponent
This provides more robust tail risk estimates than traditional approaches.
- Risk Management: Compute more accurate VaR and ES for trading portfolios
- Regulatory Compliance: Meet Basel III/IV capital requirements with better risk estimates
- Academic Research: Study tail risk dynamics in high-frequency financial data
- Trading Strategy Development: Incorporate intrinsic-time risk measures into quantitative strategies
Edit realized_quantiles/config.py to customize:
TRADING_START = 34200 # Market open (9:30 AM in seconds since midnight)
TRADING_END = 57600 # Market close (4:00 PM in seconds since midnight)
PATH_DATA = "./data" # Path to your high-frequency dataYour CSV files should contain at minimum:
| Column | Type | Description |
|---|---|---|
Dates |
datetime | Trading date (YYYY-MM-DD) |
Time |
int | Seconds since midnight |
Price |
float | Trade price |
Example:
Dates,Time,Price
2024-01-02,34200,150.25
2024-01-02,34201,150.26
2024-01-02,34203,150.24
...Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
If you use this package in academic research, please cite:
@masterthesis{pirlet2025realized,
author = {Pirlet, Matthias},
title = {An empirical analysis of tail risk forecasting using realized quantiles},
year = {2025},
url = {https://github.com/Mapirlet/Realized-Quantiles},
version = {0.1.0}
}And the original methodology paper:
@article{dimitriadis2022realized,
title={Realized Quantiles},
author={Dimitriadis, Timo and Halbleib, Roxana},
journal={Journal of the American Statistical Association},
year={2022},
publisher={Taylor \& Francis}
}- Issues: GitHub Issues
- Email: matthiaspirlet[arobase]gmail.com
This implementation is based on the methodology developed by Timo Dimitriadis and Roxana Halbleib. Special thanks to the authors for their work on realized quantiles and answers to my questions.