# ─── FIGURE 10: Rolling Parameter Evolution ──────────────────────────────────
fig, axes = plt.subplots(3, 1, figsize=(14, 12), sharex=True)
params_config = [
('theta', 'θ — Long-Run Equilibrium Spread (%)', 'θ'),
('kappa', 'κ — Mean Reversion Speed', 'κ'),
('sigma', 'σ — Volatility', 'σ'),
]
for ax, (param, title, symbol) in zip(axes, params_config):
ax.plot(roll_usd_df.index, roll_usd_df[param], color='#1565C0', linewidth=1.3, label=f'{symbol} (USD)', alpha=0.9)
ax.plot(roll_khr_df.index, roll_khr_df[param], color='#C62828', linewidth=1.3, label=f'{symbol} (KHR)', alpha=0.9)
ax.axvspan(pd.Timestamp('2020-01-01'), pd.Timestamp('2021-12-31'), alpha=0.1, color='grey')
ax.set_title(title, fontweight='bold', fontsize=12)
ax.set_ylabel(symbol)
ax.legend(loc='upper right', fontsize=9)
ax.grid(True, alpha=0.3)
for date, label in [('2020-03-01','COVID'), ('2022-03-01','Fed\nHikes'), ('2024-09-01','Fed\nCuts')]:
for ax in axes:
ax.axvline(x=pd.Timestamp(date), color='grey', linestyle=':', alpha=0.4, linewidth=0.8)
axes[2].set_xlabel('Date')
axes[2].xaxis.set_major_locator(mdates.YearLocator())
axes[2].xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
plt.xticks(rotation=45)
fig.suptitle('Figure 10: Rolling 36-Month OU Parameter Evolution', fontweight='bold', fontsize=14, y=1.01)
plt.tight_layout()
plt.savefig('../figures/fig10_rolling_parameters.png', dpi=300, bbox_inches='tight')
plt.show()
print('Saved: fig10_rolling_parameters.png')