Math Problem Statement

import numpy as np

Parameters given in the problem

r0 = 0.05 # initial short rate (5%) u = 1.1 # up factor d = 0.9 # down factor q = 0.5 # probability of up move t_expiration = 6 # expiration time for the option strike_price = 80 # strike price for the option

Build the short-rate binomial tree for 10 periods

n = 10 r = np.zeros((n+1, n+1)) r[0, 0] = r0

for i in range(1, n+1): for j in range(i+1): if j == 0: r[j, i] = r[j, i-1] * u else: r[j, i] = r[j-1, i-1] * d

Initialize bond prices at maturity t = 10 (ZCB with face value 100)

bond_prices = np.zeros((n+1, n+1)) bond_prices[:, n] = 100

Backward induction to compute bond prices at each node

for i in range(n-1, -1, -1): for j in range(i+1): bond_prices[j, i] = (q * bond_prices[j, i+1] + (1-q) * bond_prices[j+1, i+1]) / (1 + r[j, i])

Initialize the option values at expiration (t=6) based on the strike price

option_values = np.maximum(bond_prices[:, t_expiration] - strike_price, 0)

Backward induction to compute the option price at t=0, considering early exercise

for i in range(t_expiration-1, -1, -1): for j in range(i+1):

Discounted expected option value if held to the next period

hold_value = (q * option_values[j+1] + (1-q) * option_values[j]) / (1 + r[j, i])

Immediate exercise value

exercise_value = bond_prices[j, i] - strike_price

Option value is the maximum of holding and exercising

option_values[j] = max(hold_value, exercise_value)

The price of the American call option at time 0 is option_values[0]

american_call_price_at_time_0 = round(option_values[0], 2) print("The price of the American call option is:", american_call_price_at_time_0)

Solution

Ask a new question for Free

By Image

Drop file here or Click Here to upload

Math Problem Analysis

Mathematical Concepts

Finance
Binomial Trees
Option Pricing
Interest Rates

Formulas

Binomial option pricing formula

Theorems

-

Suitable Grade Level

Undergraduate level