3

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";
}
bcf
  • 2,828
  • 20
  • 35
  • It also seems to be a pretty volatile interest rate. – J.R. Feb 01 '16 at 08:39
  • 2
    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,%$. – Gordon Feb 01 '16 at 14:03
  • 1
    You can try by setting parameters so that $\frac{\sigma}{a} \approx 20,%$, for example, $a=0.05$ and $\sigma = 0.01$. – Gordon Feb 01 '16 at 14:11
  • 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! – Milan Jul 06 '17 at 23:32
  • I forgot to put @Gordon. Not quite sure how these notification things work, so I apologize for inconvenience if any. – Milan Jul 07 '17 at 10:39
  • @Milan: Since $P=e^{A-rB}$, the volatility of the bond is $\sigma B\approx \frac{\sigma}{a}$ for large $T$. – Gordon Jul 07 '17 at 13:52
  • @Milan: See also this question. – Gordon Jul 07 '17 at 20:28

0 Answers0