利用刚才工商银行股票期权作为分析对象,通过 Python 演示期权价格与基础资产(股票)价格、期权执行价格、波动率、无风险收益率、期限等变量之间的关系。
假设一个工商银行股票期权信息,对股票价格设定一个取值是在区间[5,7]的等差数列,其他的变量取值保持不变,运用布莱克斯科尔斯默顿模型对期权进行定价,从而模拟期权价格与基础资产价格变动之间的关系。
S_list = np.linspace(5.0, 7.0, 100) #基础资产价格数组
call_list1 = call_BS(S=S_list, K=6, sigma=0.24, r=0.04, T=0.5) #计算看涨期权价格数组
put_list1 = put_BS(S=S_list, K=6, sigma=0.24, r=0.04, T=0.5) #计算看跌期权价格数组
plt.figure(figsize=(8, 6))
plt.plot(S_list, call_list1, 'b-', label='看期权', lw=2.5)
plt.plot(S_list, put_list1, 'r-', label='看跌期权', lw=2.5)
plt.ylabel('期权价格', fontsize=13)
plt.xlabel('基础资产价格', fontsize=13)
plt.title('基础资产价格与期权价格的关系', fontsize=13)
plt.legend(fontsize=13)
plt.grid(True);
不难发现,随着基础资产股票价格的上升,看涨期权价格会增大,看跌期权的价格走向恰好与看涨期权相反,即随着股票价格的上升,看跌期权价格会减小。此外,基础资产价格的变化与期权价格的变化之间存在非线性关系。
沿用前面工商银行股票期权信息,对期权的执行价格设定一个取值是在区间[5,7]的等差数列,其他的变量取值保持不变,模拟期权价格与执行价格变动之间的关系,具体的代码如下
K_list = np.linspace(5.0, 7.0, 100) #行权价 数组
call_list1 = call_BS(S=5.29, K=K_list, sigma=0.24, r=0.04, T=0.5) #计算看涨期权价格数组
put_list1 = put_BS(S=5.29, K=K_list, sigma=0.24, r=0.04, T=0.5) #计算看跌期权价格数组
plt.figure(figsize=(8, 6))
plt.plot(K_list, call_list1, 'b-', label='看涨期权', lw=2.5)
plt.plot(K_list, put_list1, 'r-', label='看跌期权', lw=2.5)
plt.ylabel('期权价格', fontsize=13)
plt.xlabel('行权价格', fontsize=13)
plt.title('行权价格与期权价格的关系', fontsize=13)
plt.legend(fontsize=13)
plt.grid(True);
随着期权执行价格上升,看涨期权价格则会减小,看跌期权价格则会增大。期权执行价格的变化与期权价格的变化也是非线性关系
沿用前面工商银行股票期权信息,对基础资产的波动率设定一个取值是在区间[0.05,0.35]的等差数列,其他的变量取值保持不变,模拟期权价格与波动率变动之间的关系,具体的代码如下
sigma_list = np.linspace(0.05, 0.35, 100) #波动率数组
call_list1 = call_BS(S=5.29, K=6, sigma=sigma_list, r=0.04, T=0.5) #计算看涨期权价格数组
put_list1 = put_BS(S=5.29, K=6, sigma=sigma_list, r=0.04, T=0.5) #计算看跌期权价格数组
plt.figure(figsize=(8, 6))
plt.plot(sigma_list, call_list1, 'b-', label='看涨期权', lw=2.5)
plt.plot(sigma_list, put_list1, 'r-', label='看跌期权', lw=2.5)
plt.ylabel('期权价格', fontsize=13)
plt.xlabel('波动率', fontsize=13)
plt.title('波动率与期权价格的关系', fontsize=13)
plt.legend(fontsize=13)
plt.grid(True);
随着波动率的增加,看涨期权和看跌期权价格都会增加,但是波动率的变化与期权价格的变化之间也是非线性关系。
沿用前面工商银行股票期权信息,对无风险收益率设定一个取值是在区间[0.01,0.1]的等差数列,其他的变量取值保持不变,模拟期权价格与无风险收益率变动之间的关系,具体的代码如下
r_list = np.linspace(0.01, 0.10, 100) #无风险收益数组
call_list1 = call_BS(S=5.29, K=6, sigma=0.24, r=r_list, T=0.5) #计算看涨期权价格数组
put_list1 = put_BS(S=5.29, K=6, sigma=0.24, r=r_list, T=0.5) #计算看跌期权价格数组
plt.figure(figsize=(8, 6))
plt.plot(r_list, call_list1, 'b-', label='看涨期权', lw=2.5)
plt.plot(r_list, put_list1, 'r-', label='看跌期权', lw=2.5)
plt.ylabel('期权价格', fontsize=13)
plt.xlabel('无风险收益率', fontsize=13)
plt.title('无风险收益率与期权价格的关系', fontsize=13)
plt.legend(fontsize=13)
plt.grid(True);
当无风险收益率增加时,看涨期权价格上升,看跌期权价格下降。主要原因可以归结于两方面:
以上两种效应的综合结果是当无风险收益率提高时,看涨期权价值会增加,看跌期权价值会下降。
沿用前面工商银行股票期权信息,对期权的剩余时间设定一个取值是在区间[0.01,3]的等差数列,其他的变量取值保持不变,模拟期权价格与期权剩余期限之间的关系,具体的代码如下
T_list = np.linspace(0.01, 3.0, 100) #剩余时间数组
call_list1 = call_BS(S=5.29, K=6, sigma=0.24, r=0.04, T=T_list) #计算看涨期权价格数组
put_list1 = put_BS(S=5.29, K=6, sigma=0.24, r=0.04, T=T_list) #计算看跌期权价格数组
plt.figure(figsize=(8, 6))
plt.plot(T_list, call_list1, 'b-', label='看涨期权', lw=2.5)
plt.plot(T_list, put_list1, 'r-', label='看跌期权', lw=2.5)
plt.ylabel('期权价格', fontsize=13)
plt.xlabel('剩余时间', fontsize=13)
plt.title('剩余时间与期权价格的关系', fontsize=13)
plt.legend(fontsize=13)
plt.grid(True);
无论是看跌期权还是看展该期权,期权价格通常是期权剩余期限的递增函数,但是当期权剩余时间很短的时候,这个结论可能不成立。