Why Vasicek Bond Prices Can Exceed Par by a Large Amount
Summary
The document raises a question about the Vasicek short-rate model, which assumes mean-reverting rates with normally distributed shocks, and its closed-form zero-coupon bond price. It gives the stochastic differential equation and the affine pricing expression, then reports that a particular parameter set produces an extraordinarily large value for a long-maturity zero-coupon bond. The author recognizes that the model permits negative rates but wonders whether parameter restrictions analogous to the Heston Feller condition prevent such outcomes.
The example motivates scrutiny of model inputs, units, calibration, and the price formula; it does not establish that the stated output is correct or explain its cause. In particular, a zero-coupon bond price above its face value can be consistent with sufficiently negative discount rates, but the extreme quoted value calls for checking calculations and assumptions. No answer, parameter constraint, calibration evidence, or practical fix is included, so the post is useful chiefly as a model-diagnostics question rather than a complete pricing guide.
Key ideas
- The Vasicek model specifies a mean-reverting short rate with normally distributed innovations.
- Its zero-coupon bond price has an exponential affine form involving the current rate and model parameters.
- The author reports an unusually high long-maturity bond value under one parameter choice and asks whether it is plausible.
- The possibility of negative rates can produce bond prices above face value, but the example is not independently checked.
- The document offers no parameter restriction or resolution for the reported anomaly.
Tags
Full text
# Ridiculous Bond Prices under Vasicek Model
# 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";
}
```Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.