最小二乘蒙特卡洛为美式期权定价,Python代码
时间: 2023-09-02 17:14:05 浏览: 287
matlab 最小二乘蒙特卡罗(LMS)美式期权定价,蒙特卡洛模拟matlab期权定价,matlab源码.zip
5星 · 资源好评率100%
以下是使用最小二乘蒙特卡洛方法进行美式期权定价的Python代码示例:
```python
import numpy as np
from scipy.stats import norm
def american_option_pricing_mc(S, K, r, sigma, T, M, I, option_type):
dt = T / M
S_path = np.zeros((M + 1, I))
S_path[0] = S
for t in range(1, M + 1):
z = np.random.standard_normal(I)
S_path[t] = S_path[t - 1] * np.exp((r - 0.5 * sigma ** 2) * dt +
sigma * np.sqrt(dt) * z)
if option_type == 'call':
payoff = np.maximum(S_path - K, 0)
else:
payoff = np.maximum(K - S_path, 0)
V = np.zeros_like(payoff)
V[-1] = payoff[-1]
for t in range(M - 1, 0, -1):
regression = np.polyfit(S_path[t], V[t + 1] * np.exp(-r * dt), 7)
C = np.polyval(regression, S_path[t])
V[t] = np.where(payoff[t] > C, payoff[t], V[t + 1] * np.exp(-r * dt))
V0 = np.sum(V[1]) / I
return V0
S0 = 100 # 初始股票价格
K = 100 # 行权价格
r = 0.05 # 无风险利率
sigma = 0.2 # 波动率
T = 1 # 时间到期
M = 100 # 时间步长
I = 10000 # 蒙特卡洛模拟次数
option_type = 'put' # 期权类型
price = american_option_pricing_mc(S0, K, r, sigma, T, M, I, option_type)
print('American {} option price is: {:.4f}'.format(option_type, price))
```
该代码使用蒙特卡洛模拟生成股票价格路径,并基于回归分析估计每个时间步长的期权价值。在回归中,使用7次多项式拟合。最后,使用最小二乘法计算期权的现值,并返回其平均值作为期权价格。
阅读全文