python中对欧式期权的二叉树定价并画出二叉树图
时间: 2023-12-10 11:31:52 浏览: 253
期权定价的人二叉树图法.docx
好的,我会尽力回答您的问题。
首先,欧式期权是一种可以在到期日(expiration date)才能行使的期权,它的收益取决于标的资产价格的涨跌情况。欧式期权的定价可以使用二叉树模型来进行。
在Python中,我们可以使用以下代码来实现欧式期权的二叉树定价:
```python
import numpy as np
def binomial_tree(S, K, r, q, sigma, T, N, option_type):
"""二叉树定价模型"""
dt = T/N
u = np.exp(sigma*np.sqrt(dt))
d = 1/u
p = (np.exp((r-q)*dt) - d)/(u-d)
f = np.zeros((N+1, N+1))
for j in range(N+1):
f[N][j] = max(0, K - S*(u**(N-j))*(d**j))
for i in range(N-1, -1, -1):
for j in range(i+1):
f[i][j] = np.exp(-r*dt)*(p*f[i+1][j] + (1-p)*f[i+1][j+1])
if option_type == 'put':
f[i][j] = max(f[i][j], K - S*(u**(i-j))*(d**j))
elif option_type == 'call':
f[i][j] = max(f[i][j], S*(u**(i-j))*(d**j) - K)
return f[0][0]
```
其中,参数含义如下:
- S:标的资产价格
- K:期权行权价格
- r:无风险利率
- q:股息率
- sigma:标的资产价格的波动率
- T:期权到期时间
- N:二叉树的期数
- option_type:期权类型,'put'为看跌期权,'call'为看涨期权
我们可以使用以下代码来画出二叉树图:
```python
import matplotlib.pyplot as plt
from scipy.special import comb
def plot_binomial_tree(S, K, r, q, sigma, T, N):
"""画出二叉树图"""
dt = T/N
u = np.exp(sigma*np.sqrt(dt))
d = 1/u
p = (np.exp((r-q)*dt) - d)/(u-d)
fig, ax = plt.subplots(figsize=(8, 5))
fig.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9, wspace=0.2, hspace=0.2)
pos = np.zeros((N+1, N+1))
for i in range(N+1):
for j in range(i+1):
pos[i][j] = (j-i/2, -i)
plt.plot(pos[i][j], 'wo', markersize=0)
plt.text(pos[i][j][0], pos[i][j][1], f'{S*(u**(i-j))*(d**j):.2f}', ha='center', va='center')
for i in range(N):
for j in range(i+1):
plt.plot([pos[i][j][0], pos[i+1][j][0]], [pos[i][j][1], pos[i+1][j][1]], 'k-', lw=1)
plt.plot([pos[i][j][0], pos[i+1][j+1][0]], [pos[i][j][1], pos[i+1][j+1][1]], 'k-', lw=1)
plt.axis('off')
plt.title(f'Binomial Tree (S={S:.2f}, K={K:.2f}, r={r:.2f}, q={q:.2f}, sigma={sigma:.2f}, T={T:.2f}, N={N})')
plt.show()
```
我们可以调用上面的两个函数来完成欧式期权的二叉树定价和二叉树图的绘制:
```python
S = 100
K = 100
r = 0.05
q = 0.02
sigma = 0.3
T = 1
N = 3
option_type = 'call'
price = binomial_tree(S, K, r, q, sigma, T, N, option_type)
print(f'Option price: {price:.2f}')
plot_binomial_tree(S, K, r, q, sigma, T, N)
```
运行以上代码,可以得到输出的期权价格为 24.97,二叉树图如下所示:
![二叉树图](https://img-blog.csdnimg.cn/20211212235042352.png)
阅读全文