In [1]:
#import libraries
import math
import pandas as pd
import numpy as np
In [2]:
#import stock tree
stock = pd.read_excel('stock.xlsx',index_col=0)

#import possible interest_rates which are derived from CRR_BDT model code
interest_rates = pd.read_excel('interest_rates.xlsx',index_col=0)

#import risk_neutral_probabilities which are derived from CRR_BDT model code
probs = pd.read_excel('risk_neutral_probabilities.xlsx',index_col=0)

#import strike prices
strike = pd.read_excel('strike.xlsx', index_col=0)
In [15]:
#adjust maturity
period = len(stock) - 1
In [17]:
prices = []
count = -1
for K in strike:
    prices = []
    count = -1
    for i in range (period,-1,-1):
        price = []
        if i == period:
            for j in range(0,period+1):
                price.append(max(stock.iloc[i,j]-K,0))
            prices.append(price) 
        if i != period:
            for j in range(0,i+1):
                value = prices[count][j]* (1-probs.iloc[i,j]) + prices[count][j+1]* (probs.iloc[i,j])
                pv = value / (math.exp(interest_rates.iloc[i,j]))
                price.append(pv)
            prices.append(price)               
        count = count + 1
    results.append(pd.DataFrame(prices).iloc[-1,0])
In [19]:
pd.DataFrame(results).to_excel('option_prices.xlsx')