Examples

This section provides examples of how to use the HAR-CAESar library.

Basic Usage

The following example demonstrates how to generate synthetic data, fit the model, and produce forecasts.

import numpy as np
from har_caesar import HAR_CAESar

# 1. Generate synthetic returns (e.g., from a GARCH process)
np.random.seed(42)
y = np.random.normal(0, 1, 2000)
theta = 0.025  # 2.5% tail probability

# 2. Initialize the model
# 'AS' (Asymmetric Slope) is the default specification
model = HAR_CAESar(theta=theta, lambdas={'q': 10, 'e': 10})

# 3. Fit and Predict
# We split the data at index 1500:
# - Train on y[:1500]
# - Predict for y[1500:]
print("Fitting model...")
results = model.fit_predict(y, ti=1500, seed=42)

# 4. Access Results
q_forecasts = results['qf']  # VaR
e_forecasts = results['ef']  # ES

print(f"Forecasts generated: {len(q_forecasts)}")
print(f"Mean VaR: {np.mean(q_forecasts):.4f}")

Backtesting Example

This example demonstrates how to validate VaR forecasts using the Christoffersen conditional coverage test:

import numpy as np
from har_caesar import HAR_CAESar
from har_caesar.utils import christoffersen_cc_test

# 1. Generate synthetic data
np.random.seed(42)
y = np.random.normal(0, 1, 2000)
theta = 0.025  # 2.5% VaR

# 2. Fit model and generate forecasts
model = HAR_CAESar(theta=theta)
results = model.fit_predict(y, ti=1500, seed=42)

# 3. Get test period data
y_test = y[1500:]
var_forecasts = results['qf']

# 4. Compute violations (1 if return < VaR, 0 otherwise)
violations = (y_test < var_forecasts).astype(int)

# 5. Run Christoffersen test
test_results = christoffersen_cc_test(violations, theta=theta)

# 6. Interpret results
print(f"Violation rate: {np.mean(violations):.4f} (expected: {theta:.4f})")
print(f"LR_UC: {test_results['LR_UC']:.2f}, p-value: {test_results['p_value_UC']:.4f}")
print(f"LR_IND: {test_results['LR_IND']:.2f}, p-value: {test_results['p_value_IND']:.4f}")
print(f"LR_CC: {test_results['LR_CC']:.2f}, p-value: {test_results['p_value_CC']:.4f}")

if test_results['p_value_CC'] > 0.05:
    print("✓ Model passes Christoffersen test at 5% significance")
else:
    print("✗ Model fails Christoffersen test at 5% significance")

Running the Full Experiment

To reproduce the empirical results from the thesis (comparing against benchmarks on real market data), use the provided experiment script:

python experiments/experiments_har_caesar.py

This script will: 1. Load data for S&P 500, FTSE 100, Nikkei 225, and MSCI EM. 2. Run a rolling-window analysis. 3. Save pickled results to output/har_experiment/.