RegimeLib

RegimeLib — Bayesian online change-point detection (BOCPD) with score-driven variance.
Implements Tsaknaki, Lillo, Mazzarisi 2023 (arXiv:2307.02375) score-driven extension
to Adams & MacKay 2007 BOCPD. Maintains run-length distribution P(r_t | data_{1:t})
and detects regime changes when MAP run length resets.
Layer L0 (imports NumLib/4 for math helpers only).
DESIGN DECISIONS:
1. Score-driven variance adaptation (GARCH-like) handles heteroskedasticity.
2. Broadcast pattern: single BOCPD instance shared across multiple setups via regime_id.
3. varip state arrays (run_length_probs, run_means, run_variances) persist across bars.
4. Compute cost: O(L) per bar where L = max_run_length (default 100).
f_default_regime_reading()
Create default RegimeReading
Returns: Empty RegimeReading
f_bocpd_regime_score_driven(x, hazard, max_run_length, omega, alpha, beta, rl_probs, run_means, run_vars, prev_map, regime_counter)
BOCPD with score-driven variance adaptation (Tsaknaki et al. 2023)
Parameters:
x (float): Current observation (e.g. log return)
hazard (simple float): Hazard rate H (probability of regime change per bar), default 1/250
max_run_length (simple int): Maximum run length L to track (caps array size), default 100
omega (simple float): Score-driven variance ω parameter, default 1e-4
alpha (simple float): Score-driven variance α parameter (score weight), default 0.05
beta (simple float): Score-driven variance β parameter (persistence), default 0.94
rl_probs (array<float>): varip array<float> run-length probabilities (size L+1, caller-managed)
run_means (array<float>): varip array<float> online means per run (size L+1, caller-managed)
run_vars (array<float>): varip array<float> online variances per run (size L+1, caller-managed)
prev_map (int): varip int previous MAP run length (caller-managed)
regime_counter (float): varip float regime ID counter (caller-managed)
Returns: RegimeReading
f_bocpd_regime(x, hazard, max_run_length, rl_probs, run_means, run_vars, prev_map, regime_counter)
Vanilla BOCPD (fixed variance, no score-driven adaptation)
Parameters:
x (float): Current observation
hazard (simple float): Hazard rate H
max_run_length (simple int): Maximum run length L
rl_probs (array<float>): varip array<float> run-length probabilities (caller-managed)
run_means (array<float>): varip array<float> online means per run (caller-managed)
run_vars (array<float>): varip array<float> online variances per run (caller-managed)
prev_map (int): varip int previous MAP run length (caller-managed)
regime_counter (float): varip float regime ID counter (caller-managed)
Returns: RegimeReading
f_init_bocpd_state(max_run_length, initial_mean, initial_var)
Initialize BOCPD state arrays (call once on first bar)
Parameters:
max_run_length (simple int): Maximum run length L
initial_mean (float): Initial mean estimate
initial_var (float): Initial variance estimate
Returns: Tuple of (rl_probs, run_means, run_vars)
RegimeReading
RegimeReading — output of BOCPD regime detector
Fields:
map_run_length (series int): Current MAP run length (bars since last regime change)
change_point_detected (series bool): True if regime change detected on this bar
regime_id (series float): Incrementing counter per regime (resets on change-point)
predictive_likelihood (series float): Diagnostic: P(x_t | data_in_run_r*)
current_variance (series float): Score-driven variance estimate at MAP run length
Библиотека Pine
В истинном духе TradingView автор опубликовал этот код Pine как библиотеку с открытым исходным кодом, чтобы другие программисты Pine из нашего сообщества могли её использовать. Браво автору! Вы можете использовать эту библиотеку для личного пользования или в других публикациях с открытым исходным кодом, но повторное использование этого кода в публикациях регулируется Правилами поведения.
Отказ от ответственности
Библиотека Pine
В истинном духе TradingView автор опубликовал этот код Pine как библиотеку с открытым исходным кодом, чтобы другие программисты Pine из нашего сообщества могли её использовать. Браво автору! Вы можете использовать эту библиотеку для личного пользования или в других публикациях с открытым исходным кодом, но повторное использование этого кода в публикациях регулируется Правилами поведения.