Code covered by the BSD License  

Highlights from
American Call option Pricing Approximation

from American Call option Pricing Approximation by S B
Roll, geske , whaley approximation of american calls and puts with one dividend.

rogewhaley(S0,k,r,T,sigma,D1,t1)
function C = rogewhaley(S0,k,r,T,sigma,D1,t1)

%Roll, Geske, Whaley approximation of an American Call Price
%Inputs
%S0 = Current Stock price (or) S0 reduced by present value of dividends
%except final dividend.
%D1 = final dividend amount
%k = strike price
%sigma = Volatility
%t1: final dividend date
%T: Time to maturity in years.
%r: risk free rate

% Please refer to the documentation in page 265 of HULL's Book
% When several dividends are anticipated, early exercise is optimal only
%on the final dividend. The RGW formula can be used with S0 reduced by
% the present value of all dividends except the final one. The variable D1
% should be set equal to the final dividend and t1 should be set equal to
% the final ex-dividend date.

%Author: Sivakumar Batthala
%MBA candidate
%Chicago Graduate School of Business
%University of chicago
%Date:02/23/2005
%Please email sbatthal@gsb.uchicago.edu for any clarifications or errors.

%Remove the following comment to run an example
%S0=39.5074;r=0.09;k=40;sigma=0.30;t1=5/12;T=6/12;D1=0.50; 

a1 = (log((S0 - (D1 * exp(-r*t1)))/k) + (r + (sigma.^2/2))*T)/(sigma*sqrt(T));

a2 = a1 - (sigma*sqrt(T));

% bsprice(S1)-S1 - D1 + k = 0 solve for S1;
% Time to maturity here is T -t1. When early exercise is never optimal, S_Star = inf; In this case,
% b1=b2=-INF. In other situation, option should be exercised at time t1
% when S(t1) > S_star + D1

% bisectional method of finding S_Star

S_star = bisect(S0,k,r,T,sigma,D1,t1);
   
b1 = (log((S0 - (D1 * exp(-r*t1)))/S_star) + (r + (sigma.^2/2))*t1)/(sigma*sqrt(t1));


b2 = b1 - (sigma * sqrt(t1));

C1 = (S0 - (D1 * exp(-r*t1))) * normcdfM(b1);
C2 = (S0 - (D1 * exp(-r*t1)))* bivnormcdf(a1,-b1,-sqrt(t1/T));
C3 = - k * exp(-r*T) * bivnormcdf(a2,-b2,-sqrt(t1/T));
C4 = - (k - D1)* exp(-r*t1)* normcdfM(b2);

%Final call price

C = C1+C2+C3+C4;
      

Contact us at files@mathworks.com