next up previous contents index
Next: American options. Up: Basic Option Pricing, analytical Previous: European call and put   Contents   Index


Adjusting for payouts of the underlying.

For options on other financial instruments than stocks, we have to allow for the fact that the underlying may have payouts during the life of the option. For example, in working with commodity options, there is often some storage costs if one wanted to hedge the option by buying the underlying.

Continous Payouts from underlying.

The simplest case is when the payouts are done continuously. To value an European option, a simple adjustment to the Black Scholes formula is all that is needed. Let $q$ be the continuous payout of the underlying commodity.

Call and put prices for European options are then given by (see (Hull, 1997, pg 263))

\begin{displaymath}c = Se^{-q(T-t)}N(d_1)-Xe^{-r(T-t)}N(d_2) \end{displaymath}

\begin{displaymath}p = Xe^{-r(T-t)}N(-d_2)-Se^{-q(T-t)}N(-d_1) \end{displaymath}


\begin{displaymath}d_1 = \frac{\ln\left(\frac{S}{X}\right)+(r-q+\frac{1}{2}\sigma^2)(T-t)}{\sigma\sqrt{T-t}}\end{displaymath}

\begin{displaymath}d_2 = d_1 - \sigma\sqrt{T-t} \end{displaymath}

which are implemented below.

// file:
// author: Bernt A Oedegaard
//    Calculation of the Black Scholes option price formula, 
//    special case where the underlying is paying out a yield of q.

#include <cmath>              // mathematical library
#include "normdist.h"          // this defines the normal distribution
double option_price_european_call_payout( double S, // spot price
					 double X, // Strike (exercise) price,
					 double r,  // interest rate
					 double q,  // yield on underlying
					 double sigma, // volatility
					 double time) { // time to maturity
  double sigma_sqr = pow(sigma,2);
  double time_sqrt = sqrt(time);
  double d1 = (log(S/X) + (r-q + 0.5*sigma_sqr)*time)/(sigma*time_sqrt);
  double d2 = d1-(sigma*time_sqrt);
  double call_price = S * exp(-q*time)* N(d1) - X * exp(-r*time) * N(d2);
  return call_price;


A special case of payouts for the underlying is dividends. When the underlying pays dividends, the pricing formula is adjusted, because the dividend changes the value of the underlying.

The case of continuous dividends is easiest to deal with. It corresponds to the continuous payouts we have looked at previously. The problem is the fact that most dividends are paid at discrete dates.

European Options on dividend-paying stock.

To adjust the price of an European option for known dividends, we merely subtract the present value of the dividends from the current price of the underlying asset in calculating the Black Scholes value.

// file:
// author: Bernt A Oedegaard

#include <cmath>              // mathematical library
#include "fin_algoritms.h"          // define the black scholes price 
#include <vector>

double option_price_european_call_dividends(  double S,               
					      double X,
					      double r,
					      double sigma,           
					      double time_to_maturity,
					      vector<double>& dividend_times,
					      vector<double>& dividend_amounts ) 
// reduce the current stock price by the amount of dividends. 
  for (int i=0;i<dividend_times.size();i++) {
    if (dividend_times[i]<=time_to_maturity){
      S -= dividend_amounts[i] * exp(-r*dividend_times[i]);
  return option_price_call_black_scholes(S,X,r,sigma,time_to_maturity);

next up previous contents index
Next: American options. Up: Basic Option Pricing, analytical Previous: European call and put   Contents   Index
Bernt Arne Odegaard