关于亚洲期权定价代码中sT变量及仿真循环的技术咨询
关于亚洲期权蒙特卡洛定价代码的三个问题
我在查看一段亚洲期权定价的Python代码时,发现其中sT变量未定义,同时存在逻辑缩进问题,原代码如下:
import scipy as sp s0=40. #today stock price x=40. #excercise price T=0.5 #maturity in years r=0.05 #risk-free rate sigma=0.2 # volatility n_simulation =100 # number of simulations n_steps=100 dt=T/n_steps call=sp.zeros([n_simulation],dtype=float) for j in range(0, n_simulation): sT*=s0 total=0 for i in range(0,int(n_steps)): e=sp.random.normal() sT*=sp.exp((r-0.5*sigma*sigma)*dt+sigma*e*sp.sqrt(dt)) total+=sT price_average=total/n_steps call[j]=max(price_average-x,0) call_price=mean(call)*exp(-r*T) print 'call price = ', round(call_price,3)
我希望明确三个问题:
- sT的含义是什么?
- 外层循环
for j in range(0, n_simulation)的具体作用? - 若sT应为模拟过程中的股价,该如何定义它?
问题解答
sT的含义
sT是模拟过程中每个时间步的股票价格变量。在亚洲期权定价中,我们需要计算到期前所有时间步股价的平均值,所以sT会在每个时间步更新,记录当前模拟路径下的实时股价,最终用来累加计算平均价格。外层循环的作用
这个循环是蒙特卡洛模拟的核心载体,作用是执行第j次独立的股价路径模拟。蒙特卡洛定价的逻辑是通过生成成百上千条独立的股价走势路径,计算每条路径对应的期权收益,最后将所有收益取平均并贴现到当前,得到期权的估算价格。每一次外层循环就对应一条完整的从初始价s0到到期日的股价路径模拟。sT的正确定义方式
在每次模拟(外层循环内部)开始时,需要将sT初始化为初始股价s0,因为每条模拟路径都要从当前已知的股票价格出发。同时需要修正原代码的缩进错误,将内层时间步循环嵌套在外层模拟循环中,还要补全mean和exp的scipy调用。修正后的代码如下:
import scipy as sp from scipy.stats import mean s0 = 40. # 当前股票价格 x = 40. # 执行价格 T = 0.5 # 到期时间(年) r = 0.05 # 无风险利率 sigma = 0.2 # 波动率 n_simulation = 100 # 模拟次数 n_steps = 100 # 每个模拟的时间步数 dt = T / n_steps call = sp.zeros([n_simulation], dtype=float) for j in range(n_simulation): sT = s0 # 每次模拟开始时,初始化sT为当前股价 total = 0 for i in range(n_steps): e = sp.random.normal() # 用几何布朗运动公式更新股价 sT *= sp.exp((r - 0.5 * sigma ** 2) * dt + sigma * e * sp.sqrt(dt)) total += sT # 计算当前模拟路径的平均股价 price_average = total / n_steps # 记录当前路径的期权收益 call[j] = max(price_average - x, 0) # 计算所有模拟收益的平均值并贴现,得到期权价格 call_price = mean(call) * sp.exp(-r * T) print('call price = ', round(call_price, 3))
内容的提问来源于stack exchange,提问作者lost_in_the_source
相关产品推荐
相关产品推荐

