python中对欧式期权的二叉树定价并画出二叉树图
时间: 2023-12-10 22:23:29 浏览: 34
好的,关于欧式期权的二叉树定价,可以使用Cox-Ross-Rubinstein(CRR)模型来实现。以下是Python代码和对应的二叉树图。
```python
import numpy as np
import matplotlib.pyplot as plt
# 欧式期权的二叉树定价
def binomial_tree(S, K, r, sigma, T, N):
dt = T / N
u = np.exp(sigma * np.sqrt(dt))
d = 1 / u
p = (np.exp(r * dt) - d) / (u - d)
stock = np.zeros((N+1, N+1))
stock[0, 0] = S
for i in range(1, N+1):
stock[i, 0] = stock[i-1, 0] * u
for j in range(1, i+1):
stock[i, j] = stock[i-1, j-1] * d
option = np.zeros((N+1, N+1))
option[N, :] = np.maximum(np.zeros(N+1), K - stock[N, :])
for i in range(N-1, -1, -1):
for j in range(i+1):
option[i, j] = np.exp(-r*dt) * (p*option[i+1, j] + (1-p)*option[i+1, j+1])
return option[0, 0]
# 画出二叉树图
def plot_tree(S, K, r, sigma, T, N):
dt = T / N
u = np.exp(sigma * np.sqrt(dt))
d = 1 / u
p = (np.exp(r * dt) - d) / (u - d)
stock = np.zeros((N+1, N+1))
stock[0, 0] = S
for i in range(1, N+1):
stock[i, 0] = stock[i-1, 0] * u
for j in range(1, i+1):
stock[i, j] = stock[i-1, j-1] * d
fig, ax = plt.subplots()
ax.set_xlim(0, T)
ax.set_ylim(0, S * 2)
for i in range(N+1):
for j in range(i+1):
ax.plot([i*dt, (i+1)*dt], [stock[i, j], stock[i+1, j]], 'b')
ax.plot([i*dt, (i+1)*dt], [stock[i, j], stock[i+1, j+1]], 'b')
ax.plot([0, T], [K, K], 'r--')
ax.set_xlabel('Time')
ax.set_ylabel('Stock Price')
plt.show()
# 测试代码
S = 100
K = 105
r = 0.05
sigma = 0.2
T = 1
N = 100
option_price = binomial_tree(S, K, r, sigma, T, N)
print('The option price is:', option_price)
plot_tree(S, K, r, sigma, T, N)
```
这段代码实现了欧式期权的二叉树定价,并且画出了对应的二叉树图。你可以根据自己的需求修改参数,运行代码,查看不同情况下的期权价格和二叉树图。