MATLAB: Do I receive erroneous results using BINPRICE in Financial Toolbox 3.5 (R2008b)

Financial Toolbox

I am using BINPRICE: An American Call and I assume the stock pays a dividend of 30 in 0.5 years. Thus it is very likely that the call is exercised at 0.5 – eps. The price that binprice gives me is 0.44. If I use European Black–Scholes–Merton with an `escrowed' dividend, the price of a European call is already 0.50.
If I price an American Call that matures in 0.5, ie., right before the dividend, its value is 6.91. This appears strange as for the 1-year call could always be exercised at 0.5 – eps, and hence give about the same payoff as the 0.5-year call. I would expect the magnitude to be roughly the same.
My code is as follows:
clc, clear all, close all hidden
S0 = 100;
X = 100;
r = 0.05;
tau = 1;
sigma = 0.2;
M = 101; % steps
D = 30;
tauD = 0.5;
fprintf('American Call Dividend\n')
[S, C0] = binprice(S0, X, r, tau, tau/M, sigma, 1, 0, D,tauD);
C0(1,1)
fprintf('\nB--S--M (European) escrowed dividend\n')
blsprice(S0 - D*exp(-r * tauD), X, r, tau, sigma, 0)
fprintf('Matlab Financial Toolbox without div, tau/2\n')
[ign, C0] = binprice(S0, X, r, tau/2, tau/M, sigma, 1);
C0(1,1)

Best Answer

This change has been incorporated into the documentation in Release 2009b (R2009b). For previous releases, read below for any additional information:
In the code described, note that the Ex-dividend date (ExDiv (optional argument)) is specified in number of periods. So it cannot be just 'tauD' but has to be in terms of increments. Hence you have to divide 'tauD' with increments which is 'tau/M'. Then you will get a reasonable answer.
[S, C0] = binprice(S0, X, r, tau, tau/M, sigma, 1, 0, D,M*tauD/tau)
Related Question