Fixed Income & Interest Rate Models
Ho-Lee and Hull-White Short-Rate Drift Theta Calibration Formula
Calibrate no-arbitrage time-dependent drift theta(t) in Ho-Lee and one-factor Hull-White models to the observed forward curve f(0, t), slope df/dt, and convexity term.
Include the Jensen convexity term when fitting initial forward rates
To make a short-rate model exactly Fit today’s observed zero-coupon curve, Ho-Lee (1986, dr = theta(t)*dt + sig*dW) and Hull-White (1990, dr = (theta(t) - a*r)*dt + sig*dW) choose theta(t) from the market instantaneous forward rate f(0, t) and its slope df(0, t)/dt. Omitting the volatility convexity adjustment causes simulated discount factors E[EXP(-int r_s ds)] to exceed market bond prices.
Test at horizon t = 2.0 years (B2) with market instantaneous forward f(0, 2) = 0.0420 (B3), forward slope df/dt = 0.0035 (B4), mean reversion a = 0.25 (B5), and normal rate volatility sig = 0.0120 (B6): Hull-White drift is theta_HW(2) = 0.0035 + 0.25 * 0.0420 + (0.012^2 / 0.50) * (1 - EXP(-1.0)) = 0.0035 + 0.0105 + 0.000288 * 0.632121 = 0.014182 (whereas Ho-Lee a -> 0 gives 0.0035 + 0.012^2 * 2 = 0.003788).
| Calibration Quantity (t = 2 yr) | Closed-Form Expression | Exact Output |
|---|---|---|
| Hull-White Convexity Term | (sig^2 / (2*a)) * (1 - EXP(-2*a*t)) | 0.000182 |
| Hull-White Drift theta_HW(t) | df/dt + a * f(0,t) + (sig^2/(2*a))*(1 - EXP(-2*a*t)) | 0.014182 |
| Ho-Lee Limit Drift (a = 0) | df/dt + sig^2 * t | 0.003788 |
| Hull-White Bond Factor B(t, T=5) | (1 - EXP(-a * (T - t))) / a | 2.110534 (vs Ho-Lee 3.0) |
Hull-White No-Arbitrage Drift theta(t) Formula with Ho-Lee Limit
Branch smoothly to the Ho-Lee limit df/dt + sig^2 * t when mean reversion a = 0 so the formula never divides by zero.
=LET(t_hor, B2, f_mkt, B3, df_slp, B4, a_rev, B5, sig_r, B6, IF(OR(t_hor < 0, a_rev < 0, sig_r < 0), "Invalid Curve Input", IF(a_rev < 0.000001, ROUND(df_slp + (sig_r^2) * t_hor, 6), ROUND(df_slp + a_rev * f_mkt + ((sig_r^2) / (2 * a_rev)) * (1 - EXP(-2 * a_rev * t_hor)), 6))))Hull-White Bond Sensitivity Factor B(t, T) Formula
Compute B(t, T) = (1 - EXP(-a*(T - t))) / a (with Ho-Lee limit T - t as a -> 0) to measure how zero-coupon log-bond prices respond to short-rate shocks at time t.
=LET(tau_rem, B7 - B2, a_rev, B5, IF(tau_rem < 0, "Invalid Maturity", IF(a_rev < 0.000001, ROUND(tau_rem, 6), ROUND((1 - EXP(-a_rev * tau_rem)) / a_rev, 6))))Try the example
Use the original values or change them to test your understanding.