(三十四)期权的盈亏图、平价公式和BS公式

期权到期时的盈亏图

  欧式看涨期权的盈亏为max(ST-K,0),若考虑期权费就是max(ST-K-c,-c);欧式看跌期权的盈亏为max(K-ST,0),若考虑期权费就是max(K-ST-p,-p)。下面以看跌期权为例,画出它到期时的盈亏图。需要注意的是np.maximum可以逐个比较array与数值,而np.max是求序列的最值,这里应该使用np.maximum函数

  有一投资者买入基础资产为100股Q股票、执行价格为50元/股的欧式看跌期权,每股的期权费为6元。假定Q股票现在的股价为56元,画出该看跌期权到期时多空头的盈亏图。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
K=50;P=6;S0=56
S=np.linspace(30,70,100)
plt.figure(figsize=(10,5))
plt.subplot(121)
plt.plot(S,100*np.maximum(K-S,0),'r-',label='看跌期权多头收益图')
plt.plot(S,100*np.maximum(K-S-P,-P),'k--',label='看跌期权多头盈亏图')
plt.xlabel('股价')
plt.ylabel('payoff')
plt.title('看跌期权多头盈亏图')
plt.grid()
plt.legend()
plt.subplot(122)
plt.plot(S,-100*np.maximum(K-S,0),'r-',label='看跌期权空头收益图')
plt.plot(S,-100*np.maximum(K-S-P,-P),'k--',label='看跌期权空头盈亏图')
plt.xlabel('股价')
plt.ylabel('payoff')
plt.title('看跌期权空头盈亏图')
plt.grid()
plt.legend()

在这里插入图片描述

看涨-看跌期权平价公式

  考虑两个组合:组合A:一份欧式看涨期权+Ke-rt的现金;组合B:一份看跌期权+一份标的资产。

  对于组合A,当到期ST>K时,以手中的K去买标的资产,价值为ST;到期ST<K时,放弃行权,价值为手中的K;对于组合B,当到期ST>K时,放弃行权,价值为ST;到期ST<K时行权,卖掉标的资产后手中价值为K。因此两个组合到期时的价值均为max(ST,K),那么当前的价值也相等,即P+S=C+Ke-rt

  假设当前股价为20,执行价格为18,无风险利率为每年5%,3个月的欧式看涨期权报价为2.3,3个月的欧式看跌期权报价为0.2,通过平价公式判断期权价格的合理性,如何套利?

def c(p,s,k,r,t):
	return p+s-k*np.exp(-r*t)
def p(c,s,k,r,t):
	return c-s+k*np.exp(-r*t)
c(0.2,20,18,0.05,0.25)
Out[1]: 2.4235995911101327
p(2.3,20,18,0.05,0.25)
Out[2]: 0.07640040888986732
#可见看涨期权价格被低估,看跌期权价格被高估,可以买入组合A,卖出组合B:
payoff=-2.3-18*np.exp(-0.05*0.25)+0.2+20
payoff
Out[3]: 0.12359959111013197

用BS公式计算期权价格

在这里插入图片描述
  其中N(·)为标准正态分布的累积分布函数。假设有一份期限为六个月的股票期权,标的资产股票价格为5.29元,期权执行价格为6元,年化无风险利率和年化波动率分别为4%和24%,用BS公式求看涨期权和看跌期权的价格。

from scipy.stats import norm
def bscall(S,K,r,sigma,t):
	d1=(np.log(S/K)+(r+0.5*sigma**2)*t)/(sigma*np.sqrt(t))
	d2=(np.log(S/K)+(r-0.5*sigma**2)*t)/(sigma*np.sqrt(t))
	return S*norm.cdf(d1)-K*np.exp(-r*t)*norm.cdf(d2)
def bsput(S,K,r,sigma,t):
	d1=(np.log(S/K)+(r+0.5*sigma**2)*t)/(sigma*np.sqrt(t))
	d2=(np.log(S/K)+(r-0.5*sigma**2)*t)/(sigma*np.sqrt(t))
	return -S*norm.cdf(-d1)+K*np.exp(-r*t)*norm.cdf(-d2)
print('看涨期权价格为{:.4f},看跌期权价格为{:.4f}。'.format(bscall(5.29,6,0.04,0.24,0.5),bsput(5.29,6,0.04,0.24,0.5)))

看涨期权价格为0.1532,看跌期权价格为0.7443

  如果在权利期间内支付红利,只需将S修改为S减去红利的现值,红利的现值可以由sum(d*exp(-rf *t))来计算,其中d和t以array或Series格式传入。

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值