Binomial Options Pricing    Model: OPTIONB

Compared to the Black Scholes example above, we take a slightly different approach to options pricing in this example. We now assume a stock's return has a binomial distribution and use dynamic programming to compute the option's value.

MODEL:

SETS:

 

! Binomial option pricing model: We assume that

a stock can either go up in value from one period

to the next with probability PUP, or down with

probability (1 - PUP). Under this assumption,

a stock's return will be binomially distributed.

In addition, the symmetric probabilities allow

us to build a dynamic programming recursion to

determine the option's value;

 

! No. of periods, e.g., weeks;

  PERIOD /1..20/:;

 

ENDSETS

 

DATA:

 

! Current price of the stock;

  PNOW   = 40.75;

 

! Exercise price at option expiration;

  STRIKE = 40;

 

! Yearly interest rate;

  IRATE  = .163;

 

! Weekly variance in log of price;

  WVAR   = .005216191 ;

 

ENDDATA

 

SETS:

 

! Generate our state matrix for the DP.

 STATE( S, T) may be entered from STATE( S, T - 1)

 if stock lost value, or it may be entered from

 STATE( S - 1, T - 1) if stock gained;

  STATE( PERIOD, PERIOD)| &1 #LE# &2:

     PRICE,   ! There is a stock price, and...;

     VAL;     ! a value of the option;

 

ENDSETS

 

! Compute number of periods;

  LASTP = @SIZE( PERIOD);

 

! Get the weekly interest rate;

  ( 1 + WRATE) ^ 52 = ( 1 + IRATE);

 

! The weekly discount factor;

  DISF = 1/( 1 + WRATE);

 

! Use the fact that if LOG( P) is normal with

 mean LOGM and variance WVAR, then P has

 mean EXP( LOGM + WVAR/2), solving for LOGM...;

  LOGM = @LOG( 1 + WRATE) - WVAR/ 2;

 

! Get the log of the up factor;

  LUPF = ( LOGM * LOGM + WVAR) ^ .5;

 

! The actual up move factor;

  UPF = @EXP( LUPF);

 

! and the down move factor;

  DNF = 1/ UPF;

 

! Probability of an up move;

  PUP =  .5 * ( 1 + LOGM/ LUPF);

 

! Initialize the price table;

  PRICE( 1, 1) = PNOW;

 

! First the states where it goes down every period;

  @FOR( PERIOD( T) | T #GT# 1:

   PRICE( 1, T) = PRICE( 1, T - 1) * DNF);

 

! Now compute for all other states S, period T;

  @FOR( STATE( S, T)| T #GT# 1 #AND# S #GT# 1:

   PRICE( S, T) = PRICE( S - 1, T - 1) * UPF);

 

! Set values in the final period;

  @FOR( PERIOD( S):

   VAL( S, LASTP) =

    @SMAX( PRICE( S, LASTP) - STRIKE, 0));

 

! Do the dynamic programing;

  @FOR( STATE( S, T) | T #LT# LASTP:

   VAL( S, T) = DISF *

    ( PUP * VAL( S + 1, T + 1) +

     ( 1 - PUP) * VAL( S, T + 1)));

 

! Finally, the value of the option now;

  VALUE = VAL( 1, 1);

 

END

Model: OPTION