Skip to content
All library documents

Implementing Discrete Dividends in American Option Trees

Article Quant Q&A · Author: bizmark

Summary

The document asks how to implement the Vellekoop–Nieuwenhuis interpolation approach for pricing American options with discrete cash dividends. The author refers to a 2006 paper on derivatives with discrete dividends and provides a Cox–Ross–Rubinstein binomial-tree implementation for an American or European option. The code identifies a dividend step but leaves the interpolation operation as an unresolved placeholder.

No working interpolation formula or valuation results are supplied, and the question notes that an interpolation expression found elsewhere did not define its variables. The material therefore serves as a concrete implementation problem rather than a complete pricing method. It highlights that discrete cash dividends require special treatment in the tree and that the cited interpolation must be specified carefully before the code can produce a reliable American-option value.

Key ideas

  • The author seeks to incorporate discrete cash dividends into an American-option binomial tree.
  • The supplied tree uses a Cox–Ross–Rubinstein setup with early exercise decisions.
  • Interpolation at the dividend date is left as a placeholder rather than implemented.
  • The document provides no complete formula, variable definitions, or pricing evidence.

Tags

Full text
# Practical implementation of Vellekoop-Nieuwenhuis model/interpolation


# Practical implementation of Vellekoop-Nieuwenhuis model/interpolation












Have read the 2006 VELLEKOOP-NIEUWENHUIS paper (Efficient Pricing of Derivatives on Assets with Discrete Dividends) (Download) many times re Discrete dividends on American Options, but remain baffled as to how to implement this with code. The verbose paragraph in the paper about implementation is in image below.

Read most of the citations to look for some hints to no avail, but one source did provide a formula for one possible interpolation without saying what k,j, V or any of the variables in it actually are. See Image below.

One blogger tried to do it, but it is flawed and as cryptic as the paper.

Have included code for CRR Binomial Tree for American Options below, looking to implement that cash div methodology at the appropriate step indicated in accordance with the VELLEKOOP interpolation scheme.

Please let me know the correct way to do this if you know, because I am stuck. Thanks.

```
import numpy as np

AmeEurFlag='a'
CallPutFlag='P' 
S = 100 
X = 100 
T = 1.0
r = 0.05 
c = r
v = 0.2
n = 10
dt = T / n
#Assume one discrete cash div of $2 at Step 5 (counting from 0)
Div=2
DivStep= 4*dt   

n_list = np.arange(0, (n + 1), 1)
if CallPutFlag == 'C':
    z = 1
elif CallPutFlag == 'P':
    z = -1

# The up and down factors for S 
u = np.exp(v*np.sqrt(dt))
d = 1./u
p = (np.exp((c)*dt)-d) / (u-d) 
df = np.exp(-r * dt)

# Final Columns Of Trees
max_pay_off_list = []

for i in n_list:
    i = i.astype('int')
    max_pay_off = np.maximum(0, z * (S * u ** i * d ** (n - i) - X))
    max_pay_off_list.append(max_pay_off)

# Backwards Recrusion
for j in np.arange(n - 1, 0 - 1, -1):
    
    if j==4: print('\n',"Some Interpolation Magic should have happened here at Step ", i) 
    for i in np.arange(0, j + 1, 1):
        i = i.astype(int)  # Need to be converted to a integer
        if AmeEurFlag == 'e':
            max_pay_off_list[i] = (p * max_pay_off_list[i + 1] + (1 - p) * max_pay_off_list[i]) * df
        elif AmeEurFlag == 'a':
            max_pay_off_list[i] = np.maximum((z * (S * u ** i * d ** (j - i) - X)),
                                             (p * max_pay_off_list[i + 1] + (1 - p) * max_pay_off_list[i]) * df)
print("\n")
print("Option Value from CRR is:",max_pay_off_list[0])    
print("\n","But have to apply interpolation method from Vellekoop")
```

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.