编程金融小白学 股票期权 lv.5 希腊字母 Delta

上一篇 隐含波动率

编程金融小白学 股票期权

希腊字母 I

  • 运用希腊字母 是对期权 比较静态的敏感分析

  • 含义:其他条件不变,(某因素)变化一单位,期权价格大概变化多少?

    • 标的资产价格: Delta ( Δ ) (\Delta) (Δ)
    • 时间: Theta ( θ ) (\theta) (θ)
    • 隐含波动率: Vega ( ϑ ) (\vartheta) (ϑ)
    • 利率: Rho ( r ) (r) (r)
  • Gamma ( γ ) (\gamma) (γ): 标的价格变动1单位时,Delta Δ \Delta Δ 变多少?

波动率 Sigma ( σ ) (\sigma) (σ)

Delta ( Δ ) (\Delta) (Δ) — 标的资产价格

  • 标的资产价格变化一单位,期权价格大概变化多少?

  • 例:

    • Delta = 0.3141 意味着
    • 如果指数上涨 10 点,期权价格大概上涨 3.141点
  • Δ = ∂ c ∂ S \Delta = \frac{\partial c}{\partial S} Δ=Sc

  • 期权价格曲线切线斜率(动态时变)

  • (无红利欧式期权)的4个特征:

特征 I
标的价格看涨多头看涨空头看跌多头看跌空头
区间 0 < Δ < 1 0<\Delta<1 0<Δ<1符号相反 − 1 < Δ < 0 -1<\Delta<0 1<Δ<0符号相反
虚值 Δ → 0 \Delta\to0 Δ0 Δ → 0 \Delta\to0 Δ0 Δ → 0 \Delta\to0 Δ0 Δ → 0 \Delta\to0 Δ0
平价 Δ ≈ 0.5 \Delta\approx0.5 Δ0.5 Δ ≈ − 0.5 \Delta\approx-0.5 Δ0.5 Δ ≈ − 0.5 \Delta\approx-0.5 Δ0.5 Δ ≈ 0.5 \Delta\approx0.5 Δ0.5
实值 Δ → 1 \Delta\to1 Δ1 Δ → − 1 \Delta\to-1 Δ1 Δ → − 1 \Delta\to-1 Δ1 Δ → 1 \Delta\to1 Δ1
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt # 画图
plt.rcParams['font.sans-serif'] = ['FangSong'] # 设置中文
plt.rcParams['axes.unicode_minus'] = False # 设置中文负号

class BlackScholes:
    def __init__(self, S0, X, r, T, sigma=0.3,t=0):
        self.S0 = S0
        self.X = X
        self.r = r
        self.sigma = sigma
        self.dT = T-t
    
    def d1(self):
        return(np.log(self.S0/self.X)+(self.r+self.sigma**2/2)*(self.dT))/(self.sigma*np.sqrt(self.dT))

    def d2(self):
        return self.d1()-self.sigma*np.sqrt(self.dT)
    
    def calc(self, call_put):
        if call_put in {'c','C','call','Call','CALL'}:
            return self.S0 * norm.cdf(self.d1())- \
                    self.X*np.exp(-self.r*self.dT)*norm.cdf(self.d2())
        elif call_put in {'p','P','put','Put','PUT'}:
            return self.X*np.exp(-self.r*self.dT)*norm.cdf(-self.d2())- \
                    self.S0 * norm.cdf(-self.d1())
        raise NameError('Must be call or Put!',call_put)
        
    def imp_vol(self,call_put,mktprice):
        price = 0
        sigma = 0.3
        up, low = 1,0
        loop = 0
        while abs(price-mktprice)>1e-6 and loop<50:
            price = BlackScholes(self.S0,self.X,self.r,self.dT,sigma).calc(call_put)
            if (price-mktprice)>0:
                up = sigma
                sigma = (sigma+low)/2
            else:
                low = sigma
                sigma = (sigma+up)/2
            loop+=1
        return sigma

# 标的价格S做自变量 求因变量c
S = np.arange(2.5,3.5,0.001)
BS = [BlackScholes(s,3., 0.05, 0.16)for s in S]
c = np.array([bs.calc('c') for bs in BS])
# 绘图
plt.figure(figsize=(8,5), dpi=200)
plt.plot(S,c,'r',lw=2)
annotate_x=[2.6,3.,3.4]
annotate_y=[BlackScholes(s,3., 0.05, 0.16).calc('c') for s in annotate_x]
annotate_name = ['虚值','平价','实值']
annotate_symbol= [r'$\Delta \to 0$',r'$\Delta \approx 0.5$',r'$\Delta \to 1$']
for x,y,z,s in zip(annotate_x,annotate_y,annotate_name,annotate_symbol):
    plt.annotate(z,xy=(x-0.05,y+0.08),weight="bold")
    plt.annotate(s,xy=(x,y),xytext=(x-0.05,y+0.05),arrowprops=dict(arrowstyle='->',connectionstyle="arc3",color="r"))
plt.annotate(r'$0<\Delta<1$',xy=(2.95,0.01))
plt.xlabel('标的价格')
plt.ylabel('看涨期权价格')
plt.title('看涨期权多头 Delta 特征')
plt.show()

04

# 标的价格S做自变量 求因变量c
c = np.array([-1*bs.calc('c') for bs in BS])
plt.figure(figsize=(8,5), dpi=200)
plt.plot(S,c,'r',lw=2)
annotate_x=[2.6,3.,3.4]
annotate_y=[-1*BlackScholes(s,3., 0.05, 0.16).calc('c') for s in annotate_x]
annotate_name = ['虚值','平价','实值']
annotate_symbol= [r'$\Delta \to 0$',r'$\Delta \approx -0.5$',r'$\Delta \to -1$']
for x,y,z,s in zip(annotate_x,annotate_y,annotate_name,annotate_symbol):
    plt.annotate(z,xy=(x-0.1,y-0.08),weight="bold")
    plt.annotate(s,xy=(x,y),xytext=(x-0.1,y-0.05),arrowprops=dict(arrowstyle='->',connectionstyle="arc3",color="r"))
plt.annotate(r'$0>\Delta>-1$',xy=(2.95,-0.5))
plt.xlabel('标的价格')
plt.ylabel('看涨期权价格')
plt.title('看涨期权空头 Delta 特征')
plt.show()

05

# 标的价格S做自变量 求因变量p
p = np.array([bs.calc('p') for bs in BS])
plt.figure(figsize=(8,5), dpi=200)
plt.plot(S,p,'r',lw=2)
annotate_x=[2.6,3.,3.4]
annotate_y=[BlackScholes(s,3., 0.05, 0.16).calc('p') for s in annotate_x]
annotate_name = ['实值','平价','虚值']
annotate_symbol= [r'$\Delta \to -1$',r'$\Delta \approx -0.5$',r'$\Delta \to 0$']
for x,y,z,s in zip(annotate_x,annotate_y,annotate_name,annotate_symbol):
    plt.annotate(z,xy=(x-0.05,y+0.08),weight="bold")
    plt.annotate(s,xy=(x,y),xytext=(x-0.05,y+0.05),arrowprops=dict(arrowstyle='->',connectionstyle="arc3",color="r"))
plt.annotate(r'$-1<\Delta<0$',xy=(2.9,0.01))
plt.xlabel('标的价格')
plt.ylabel('看跌期权价格')
plt.title('看跌期权多头 Delta 特征')
plt.show()

06

# 标的价格S做自变量 求因变量p
p = np.array([-1*bs.calc('p') for bs in BS])
plt.figure(figsize=(8,5), dpi=200)
plt.plot(S,p,'r',lw=2)
annotate_x=[2.6,3.,3.4]
annotate_y=[-1*BlackScholes(s,3., 0.05, 0.16).calc('p') for s in annotate_x]
annotate_name = ['实值','平价','虚值']
annotate_symbol= [r'$\Delta \to 1$',r'$\Delta \approx 0.5$',r'$\Delta \to 0$']
for x,y,z,s in zip(annotate_x,annotate_y,annotate_name,annotate_symbol):
    plt.annotate(z,xy=(x-0.05,y-0.08),weight="bold")
    plt.annotate(s,xy=(x,y),xytext=(x-0.05,y-0.05),arrowprops=dict(arrowstyle='->',connectionstyle="arc3",color="r"))
plt.annotate(r'$1>\Delta>0$',xy=(2.95,-0.5))
plt.xlabel('标的价格')
plt.ylabel('看跌期权价格')
plt.title('看跌期权空头 Delta 特征')
plt.show()

7

特征 II
  • PCP 平价原理
    • 看 涨 期 权 D e l t a = 看 跌 期 权 D e l t a + 1 看涨期权 Delta = 看跌期权 Delta + 1 Delta=Delta+1

c + X 1 + r ( T − t ) = p + S → ∂ c ∂ S = ∂ p ∂ S + 1 c + \frac{X}{1+r(T-t)}=p+S \to \frac{\partial c}{\partial S}= \frac{\partial p}{\partial S}+1 c+1+r(Tt)X=p+SSc=Sp+1

# 其实没必要这么复杂。。。
from sklearn import linear_model
def d1(X,Y,Window=5):
    result_x, result_y = [],[]
    step = Window//2
    for i in range(len(X)-Window):
        reg = linear_model.LinearRegression()
        reg.fit(X[i:i+Window].reshape(-1,1),Y[i:i+Window].reshape(-1,1))
        result_y.append(reg.coef_[0][0])
        result_x.append(X[i+step])
    return result_x,result_y
bc = np.array([bs.calc('c') for bs in BS]) # Buy Call
bp = np.array([bs.calc('p') for bs in BS]) # Buy Put
bc_x,bc_y = d1(S,bc) # Buy Call Delta
bp_x,bp_y = d1(S,bp) # Buy Put Delta
plt.figure(figsize=(8,5), dpi=200)
plt.plot(bc_x,bc_y,'r',label='Call')
plt.plot(bp_x,bp_y,'green',label='Put')
plt.legend(loc='best')
plt.ylabel('Delta 值')
plt.xlabel('标的价格')
plt.grid(True)
plt.show()

11

  • 如图,可以看出来 他们的Delta 相差1
特征 III
  • 快到期时,实值、虚值、和平值期权的Delta 差异比较大
    • 剩余期限比较大的话 时间价值比较大 它的期权价格曲线相对平滑,所以它的切线斜率比较小
T = np.arange(0.01,2,0.001)
BS_T_r = [(BlackScholes(3.49,3., 0.05, t),BlackScholes(3.51,3., 0.05, t)) for t in T] # 实值
BS_T_e = [(BlackScholes(2.99,3., 0.05, t),BlackScholes(3.01,3., 0.05, t)) for t in T] # 平价
BS_T_i = [(BlackScholes(2.49,3., 0.05, t),BlackScholes(2.51,3., 0.05, t)) for t in T] # 虚值

plt.figure(figsize=(8,5), dpi=200)
for BS_T,labels,color in zip([BS_T_r,BS_T_e,BS_T_i],['实值','平价','虚值'],['r','orange','g']):
    bc = np.array([(bs2.calc('c')-bs1.calc('c'))/0.02 for bs1,bs2 in BS_T]) # Buy Call Delta
    plt.plot(T,bc,color,label=labels)
plt.legend(loc='best')
plt.ylabel('Delta 值')
plt.title('看涨期权的Delta 与期限的关系')
plt.xlabel('期权期限(年)')
plt.xticks([0,1,2])
plt.grid(True)
plt.show()

13

plt.figure(figsize=(8,5), dpi=200)
for BS_T,labels,color in zip([BS_T_r,BS_T_e,BS_T_i],['虚值','平价','实值'],['g','orange','r']):# 与认购相反
    bp = np.array([(bs2.calc('p')-bs1.calc('p'))/0.02 for bs1,bs2 in BS_T]) # Buy Call Delta
    plt.plot(T,bp,color,label=labels)
plt.legend(loc='best')
plt.ylabel('Delta 值')
plt.title('看跌期权的Delta 与期限的关系')
plt.xlabel('期权期限(年)')
plt.xticks([0,1,2])
plt.grid(True)
plt.show()

14

特征 IV
  • 波动率较低时,实值、虚值、和平值期权的Delta 差异比较大
    • 原理与特征 III 相同
Sigma = np.arange(0.01,1,0.001)
t = 0.5
BS_S_r = [(BlackScholes(3.49,3., sigma, t),BlackScholes(3.51,3., sigma, t)) for sigma in Sigma] # 实值
BS_S_e = [(BlackScholes(2.99,3., sigma, t),BlackScholes(3.01,3., sigma, t)) for sigma in Sigma] # 平价
BS_S_i = [(BlackScholes(2.49,3., sigma, t),BlackScholes(2.51,3., sigma, t)) for sigma in Sigma] # 虚值

plt.figure(figsize=(8,5), dpi=200)
for BS_S,labels,color in zip([BS_S_r,BS_S_e,BS_S_i],['实值','平价','虚值'],['r','orange','g']):
    bc = np.array([(bs2.calc('c')-bs1.calc('c'))/0.02 for bs1,bs2 in BS_S]) # Buy Call Delta
    plt.plot(Sigma,bc,color,label=labels)
plt.legend(loc='best')
plt.ylabel('Delta 值')
plt.title('看涨期权的Delta 与波动率的关系')
plt.xlabel('波动率')
plt.xticks([0,0.5,1],['0%','50%','100%'])
plt.grid(True)
plt.show()

16

plt.figure(figsize=(8,5), dpi=200)
for BS_S,labels,color in zip([BS_S_r,BS_S_e,BS_S_i],['虚值','平价','实值'],['g','orange','r']):# 与认购相反
    bp = np.array([(bs2.calc('p')-bs1.calc('p'))/0.02 for bs1,bs2 in BS_S]) # Buy Call Delta
    plt.plot(Sigma,bp,color,label=labels)
plt.legend(loc='best')
plt.ylabel('Delta 值')
plt.title('看跌期权的Delta 与波动率的关系')
plt.xlabel('波动率')
plt.xticks([0,0.5,1],['0%','50%','100%'])
plt.grid(True)
plt.show()

17

证券组合的 Delta 值

头寸Delta例子(N为数量)
现货多头14单位: 4 × 1 = 4 4\times 1 =4 4×1=4
现货空头-13单位: 3 × − 1 = − 3 3\times -1 =-3 3×1=3
期货多头12单位: 2 × 1 = 2 2\times 1 =2 2×1=2
现货多头-15单位: 5 × − 1 = − 5 5\times -1 =-5 5×1=5
欧式看涨期权多头
(无红利)
0 < Δ < 1 0<\Delta<1 0<Δ<15单位多头,每单位Delta为0.5: 5 × 0.5 = 2.5 5\times 0.5 =2.5 5×0.5=2.5
欧式看涨期权空头
(无红利)
− 1 < Δ < 0 -1<\Delta<0 1<Δ<04单位多头,每单位Delta为-0.4: 4 × − 0.4 = − 1.6 4\times -0.4 =-1.6 4×0.4=1.6
欧式看跌期权多头
(无红利)
− 1 < Δ < 0 -1<\Delta<0 1<Δ<03单位多头,每单位Delta为-0.5: 3 × − 0.5 = − 1.5 3\times -0.5 =-1.5 3×0.5=1.5
欧式看跌期权空头
(无红利)
0 < Δ < 1 0<\Delta<1 0<Δ<12单位多头,每单位Delta为0.6: 2 × 0.6 = 1.2 2\times 0.6 =1.2 2×0.6=1.2
投资组合 ∑ i N i ⋅ Δ i ↑ \sum_i N_i\cdot\Delta_i\uparrow iNiΔi
Delta 中性
  • 在投资组合中 让Delta 为0 称 Delta 中性
  • 意味着 投资组合对现货价格变动的一阶敏感性为 0
  • 实现:运用同一标的资产的现货,期货和期权等进行相互套期保值,使证券组合的值等于0
  • 特点:有期权的情况下是动态的,需要不懂调整头寸以使组合重新处于 Δ \Delta Δ中性状态,这种调整称为再均衡(Rebalancing)。

Theta ( θ ) (\theta) (θ) — 时间

  • 时间变化一天,期权价格大概变化多少?

  • Time 时间

  • 例:

    • Theta = 1.234 意味着
    • 时间每过一天,期权价格大概上涨 1.234点

Vega ( ϑ ) (\vartheta) (ϑ) — 隐含波动率

  • 隐含波动率变化一百分点,期权价格大概变化多少?

  • Volatility 隐含波动率

  • 例:

    • Vega = 1.878 意味着
    • 每隐含波动率上升1%,期权价格大概上涨 1.878点

Rho ( r ) (r) (r) — 利率

  • Rate 利率

Gamma

  • 例:
    • Gamma = 0.0056,Delta = 0.3141 意味着
    • 如果指数上涨 10 点,Delta大概上升至 0.3141 + 10 ∗ 0.0056 = 0.3701 0.3141+10*0.0056 = 0.3701 0.3141+100.0056=0.3701
    • 如果指数下跌 10 点,Delta大概下降至 0.3141 − 10 ∗ 0.0056 = 0.2581 0.3141-10*0.0056 = 0.2581 0.3141100.0056=0.2581

下篇 希腊字母 Gamma

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值