Arte SheetsLearn. Try. Understand.

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 ExpressionExact 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 * t0.003788
Hull-White Bond Factor B(t, T=5)(1 - EXP(-a * (T - t))) / a2.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.

Further reading