I want to calibrate the HW one factor model to current market data. How do I set the function $\theta(t)$ in

$$ \mathrm{d}r(t) = \kappa(\theta(t)-r(t))\mathrm{d}t+\sigma\mathrm{d}W(t) $$ to replicate the current yield curve, i.e. what data do I look at to calibrate (Libor curves?) and how do I use these data to get $\theta$?


1 Answer 1


Concerning your first question, this depends on what curve, currency, etc. you are interested in. The general method for constructing yield curves is called bootstrapping which allows you to derive spot, zero-coupon rates from the known price of coupon-bearing instruments $-$ such as bonds or swaps. In general:

  1. You start picking short-term (typically less than 1 year), zero-coupon instruments, such as Forward Rate Agreements (FRAs), futures, Certificate Deposits (CDs) to start the curve;
  2. Then for longer maturities (typically longer than 1 year) you pick coupon-bearing instruments such as swaps and you iteratively bootstrap zero-coupon rates for those maturities from the prices of these instruments and the previous zero-coupon rates you already have.

For a Euro curve, you might look at rate futures for maturities lower than 1 year and to standard fixed-for-floating swaps for longer maturities to derive a Libor-based yield curve.

As to your second question, we assume you have a bootstrapped yield curve up to a maturity $T_{\max}$. Then you can derive the price of zero-coupon bonds $B(0,T)$ for a continuum of maturities $T \in [0;T_{\max}]$ by interpolation. As these prices are derived from market data, I will write them as $B^M(0,T)$.

Now, note that there exists a relationship between zero-coupon bonds and instantaneous forward rates $f(0,T)$ which is the following:

$$ f(0,T)=-\frac{\partial \ln B}{\partial T}(0,T) $$

Thus you can derive market-implied instantaneous forward rates $f^M(0,T)$ from the current term structure $\left(B^M(0,T):T \in [0;T_{\max]}\right)$ $-$ using numerical differentiation techniques such as finite differences.

Slightly rewriting your SDE:

$$ \mathrm{d}r(t) = (\theta(t)-\kappa r(t))\mathrm{d}t+\sigma\mathrm{d}W(t) $$

In order to match your bootstrapped term structure you need to set theta as follows:

$$ \theta(t) = \frac{\partial f^M}{\partial T}(0,t) + \kappa f^M(0,t) + \frac{\sigma^2}{2\kappa}(1-e^{-2\kappa t})$$

Note that with the calibration procedure described above you will calibrate the model only to the yield curve. If you want to calibrate to more complex products such as options you can turn parameters $\kappa$ and $\sigma$ into time-dependent functions: $\kappa(t)$, $\sigma(t)$.

  • $\begingroup$ Thank you very much for the detailed answer! I have one more question remaining: In your formula for $\theta$ there appear $\sigma$ and $\kappa$ which are also model parameters and hence unknown a priori. How do I get those values? $\endgroup$
    – lbf_1994
    Mar 12, 2018 at 15:38
  • $\begingroup$ That depends on what is the purpose of your model. You can for example set them discretionarily $-$ for products whose price only depends on the curve this should not have any impact as with the calibration described above you match the curve. However, if you want to match prices of more complex products, you need to make them time-dependent to obtain a good (even perfect) fit; alternatively, you can keep them flat and derive their value by minimizing the difference between these complex products' market prices and the prices obtained from your model. $\endgroup$ Mar 12, 2018 at 20:00
  • $\begingroup$ How do we get the value of ∂f/∂T(0,t) $\endgroup$ Apr 20, 2018 at 19:52
  • $\begingroup$ @DarkKnight Numerically from the second derivative of $\ln B(0,T)$. $\endgroup$ Apr 20, 2018 at 21:37
  • $\begingroup$ When pricing a bond using HullWhite 1F I see that one needs to calculate A and B. In A I see the ∂LN(B(0,t)) /∂T(0,t). Is this term the same as the instantaneous forward rate as mentioned above? $\endgroup$
    – Oamriotn
    Jun 12, 2019 at 17:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.