3
$\begingroup$

Has anyone played with the parameters of the Vasicek model and observed the sometimes ridiculous bond prices it implies? E.g. with the right parameters, a 30-year zero is priced at $147,327.

To be specific, the SDE is $$ dr_t = a(b - r_t)dt + \sigma dW_t. $$ The $T$-bond price is given by $$ P = e^{A - rB} $$ where $r$ is the current short rate, $$ B = \frac{1 - e^{-aT}}{a}, \\ A = -\left(b - \frac{\sigma^2}{2a^2}\right)\left(T - B\right) - \frac{\sigma^2}{4a} B^2. $$

Try setting $r = 0.02$, $a = 0.3$, $b = 0.02$, $\sigma = 0.3$ and $T = 30$ in the C++ implementation below. I get a price of \$147,327. Of course, it should be less than \$1, and I know the Vasicek may imply prices larger than \$1 due to the possibility of negative rates, but this price is a bit ridiculous. After searching for a while I can't seem to find anything like the "Feller conditions" for the Heston model requiring some relationship among the parameters to avoid outputs like this. Has anyone had experience with this issue?

#include <iostream>
#include <cmath>

double BondPrice(double r, double a, double b, double sigma,
                 double tau)
{
  double B = ( 1 - exp(-a*tau)) / a;
  double A = -( b - pow(sigma,2.0)/(2*pow(a,2.0))) * (tau - B)
    - pow(sigma,2.0)/(4*a) * pow(B,2.0);

  double price = exp(A - r*B);

  return price;
}

int main()
{
  double r = 0.02;  // initial short rate                              
  double a = 0.3;  // mean reversion speed                              
  double b = 0.02;  // long term mean                                  
  double sigma = 0.3;  // volatility
  double tau = 30;  // time to maturity

  std::cout << "price = " << BondPrice(r,a,b,sigma,tau) << "\n";
}
$\endgroup$
  • $\begingroup$ It also seems to be a pretty volatile interest rate. $\endgroup$ – J.R. Feb 1 '16 at 8:39
  • 2
    $\begingroup$ Your volatility appears too large: note that $B\approx \frac{1}{a}$ for long maturity, and the bond volatility is about $\frac{\sigma}{a}\approx 100\,\%$. $\endgroup$ – Gordon Feb 1 '16 at 14:03
  • 1
    $\begingroup$ You can try by setting parameters so that $\frac{\sigma}{a} \approx 20\,\%$, for example, $a=0.05$ and $\sigma = 0.01$. $\endgroup$ – Gordon Feb 1 '16 at 14:11
  • $\begingroup$ Gordon, could you please explain why is the bond's price volatility approximately equal to $\frac{\sigma}{a}$? I know that the short-rate has the limiting distribution $\mathcal{N}\left( b, \frac{\sigma^2}{2a} \right)$, so that implies that the limiting distribution of the bond's price has the log-normal distribution - I've actually tried calculating it's volatility but I either messed it up or got some huge number, much bigger than 1. And again, the whole procedure was long - I am definitely missing something here, so would appreciate any insights. Thanks! $\endgroup$ – Milan Jul 6 '17 at 23:32
  • $\begingroup$ I forgot to put @Gordon. Not quite sure how these notification things work, so I apologize for inconvenience if any. $\endgroup$ – Milan Jul 7 '17 at 10:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.