Vasicek bond pricing.

Under Vacisek's model the process for the short rate is assumed to follow.

where , and are constants. We have seen earlier how to calculate the discount factor in this case. We now want to consider an European Call option in this setting.

Let be the time price of a zero coupon bond with a payment of $1
at time (the discount factor). The price at time of a European call
option maturing at time on on a discount bond maturing at time is( See
Jamshidan (1989) and Hull (1993))

where

In the case of ,

// file bondopt_call_vasicek.cc // author: Bernt A Oedegaard. #include <cmath> #include "normdist.h" #include "fin_algoritms.h" double bond_option_price_call_zero_vasicek(double X, // exercise price double r, // current interest rate double option_time_to_maturity, double bond_time_to_maturity, double a, // parameters double b, double sigma) { double T_t = option_time_to_maturity; double s_t = bond_time_to_maturity; double T_s = s_t-T_t; double v_t_T; double sigma_P; if (a==0.0) { v_t_T = sigma * sqrt ( T_t ) ; sigma_P = sigma*T_s*sqrt(T_t); } else { v_t_T = sqrt (sigma*sigma*(1-exp(-2*a*T_t))/(2*a)); double B_T_s = (1-exp(-a*T_s))/a; sigma_P = v_t_T*B_T_s; }; double h = (1.0/sigma_P) * log ( term_structure_discount_factor_vasicek(s_t,r,a,b,sigma)/ (term_structure_discount_factor_vasicek(T_t,r,a,b,sigma)*X) ) + sigma_P/2.0; double c = term_structure_discount_factor_vasicek(s_t,r,a,b,sigma)*N(h) -X*term_structure_discount_factor_vasicek(T_t,r,a,b,sigma)*N(h-sigma_P); return c; };