gqzhang
2022/12/06阅读:47主题:默认主题
期权风险的Delta对冲(附Python代码)
上一期我们推导了欧式看涨期权价格的Black-Scholes (BS)公式:
其中, ,以及:
当时间 趋于到期日,即 趋于 的时候,我们可以发现 就是期权的回报函数:
如果我们卖出一个欧式看涨期权,虽然在初始时刻我们可以收到 的期权费,但是在到期日的时候,我们需要付出该期权的回报:
如果未来标的资产价格 飙涨,我们会蒙受巨大损失,因此进行风险对冲是很有必要的。
根据BS公式,我们可以对于卖出期权的风险进行完美的对冲。
首先注意到期权价格是关于时间 和标的资产价格 的一个函数,即:
风险对冲策略可以构造如下:
-
在初始时刻,我们使用收到的期权费 构造一个包含无风险资产和标的资产的投资组合。 -
在任意时间 调仓,使得持有的标的资产数量为:
-
其余资金全部投入无风险资产。
我们接下来说明这个风险对冲投资组合在时间 的价值正好等于我们需要付出的期权回报。
把对冲组合在时间 的价值记为 。那么:
在时间区间 内,对冲组合的价值 的变化由两部分贡献:
-
由于在时间 ,我们持有的标的资产数量为 ,其价格变化为 ,这会带来 -
投入无风险资产的价值为 ,其在 时间内产生的收益为:
因此对冲组合的价值变化为:
对冲组合价值的折现版本具有更为简单的形式,应用伊藤公式到 ,我们有:
将 代入:
简化可得:
假设:
其中 为标的资产的平均收益率。
因此:
代入 :
再考虑期权价格的走势。应用伊藤公式:
将 的公式和 代入可得:
由于折现期权价格 在风险中性测度下为一个鞅,可以推出上式中:
因此:
所以:
注意到 :
因此:
综上所述,该对冲策略可以完美地保证我们在时间 付出期权持有方要求的回报。
在现实中,我们不可能在连续时间上进行调仓,因此需要对时间进行离散。在离散的时间点上进行调仓,这会带来对冲误差。如果时间步长足够小的话,我们可以预期对冲误差是比较小的。
该对冲策略的代码实现和测试如下:
'''
欧式看涨期权Delta对冲策略Python代码实现
'''
from scipy.stats import norm
import numpy as np
r = 0.01 # 无风险利率
mu = 0.1 # 标的资产的平均增长率
sig = 0.3 # 波动率
S0 = 100 # 初始标的资产价格
T = 1.0 # 期权到期日
K = 100 # 期权执行价格
freq = 252 # 对冲频率
dt = T/freq # 对冲时间步长
n_paths = 1000 # 测试次数
# 计算期权价格的函数
# 以时间t和当时的标的资产价格S为变量
def BS(t, S):
d1 = (np.log(S/K) + (r+sig**2/2)*(T-t))/np.sqrt(T-t)/sig
d2 = d1 - sig*np.sqrt(T-t)
return (S*norm.cdf(d1) - K*np.exp(-r*(T-t))*norm.cdf(d2))
# 初始期权费
C0 = BS(0, S0)
# 计算Delta的函数
# 以时间t和当时的标的资产价格S为变量
def Delta(t, S):
d1 = (np.log(S/K) + (r+sig**2/2)*(T-t))/np.sqrt(T-t)/sig
return norm.cdf(d1)
PnL = np.zeros(n_paths) # 记录每次对冲的收益损失
for n in range(n_paths):
if n%100 == 0:
print('测试:%3d' % n)
# 第n次测试
X = C0 # 初始价值
S = S0 # 初始标的资产价格
dW = np.sqrt(dt)*norm.rvs(size=freq) # 布朗运动增量
for i in range(freq):
# 第n次测试的第i步
DT = Delta(i*dt, S) # 持有的标的资产数量
RF = X - DT*S # 持有的无风险资产
# 经过时间dt之后的资产价格变化
S = S*np.exp((mu-sig**2/2)*dt + sig*dW[i])
# 经过时间dt之后的对冲组合价值
X = DT*S + RF*np.exp(r*dt)
# 计算对冲收益/损失
PnL[n] = X - max(S-K, 0)
# 相对对冲收益/损失
PnL_rel = PnL/C0
计算完了对冲收益损失,我们就可以对其进行统计。简单起见,我们仅画出直方图。
import matplotlib.pyplot as plt
num_bins = 50
plt.hist(PnL_rel, num_bins, density=True)
plt.show()
每周(freq=52)调仓对冲的结果为:

每日(freq=252)调仓对冲的结果为:

可以看到调仓频率越高,对冲效果越好。
作者介绍