# Ridiculous Bond Prices under Vasicek Model

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";
}

• It also seems to be a pretty volatile interest rate. – J.R. Feb 1 '16 at 8:39
• 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 1 '16 at 14:03
• You can try by setting parameters so that $\frac{\sigma}{a} \approx 20\,\%$, for example, $a=0.05$ and $\sigma = 0.01$. – Gordon Feb 1 '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 6 '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 7 '17 at 10:39