編程金融小白學 股票期權 lv.6 希臘字母 Gamma

上一篇 隱含波動率

編程金融小白學 股票期權

希臘字母 II

  • 運用希臘字母 是對期權 比較靜態的敏感分析

  • 含義:其他條件不變,(某因素)變化一單位,期權價格大概變化多少?

    • 標的資產價格: Delta (Δ)(\Delta)
    • 時間: Theta (Θ)(\Theta)
    • 隱含波動率: Vega (ϑ)(\vartheta) T
    • 利率: Rho (r)(r)
  • Gamma (γ)(\gamma): 標的價格變動1單位時,Delta Δ\Delta 變多少?

波動率 Sigma (σ)(\sigma)

Delta (Δ)(\Delta) — 標的資產價格

  • 標的資產價格變化一單位,期權價格大概變化多少?

  • 例:

    • Delta = 0.3141 意味着
    • 如果指數上漲 10 點,期權價格大概上漲 3.141點
  • Δ=cS\Delta = \frac{\partial c}{\partial S}

  • 期權價格曲線切線斜率(動態時變)

  • (無紅利歐式期權) Delta 的4個特徵:

特徵 I

標的價格 看漲多頭 看漲空頭 看跌多頭 看跌空頭
區間 0<Δ<10<\Delta<1 符號相反 1<Δ<0-1<\Delta<0 符號相反
虛值 Δ0\Delta\to0 Δ0\Delta\to0 Δ0\Delta\to0 Δ0\Delta\to0
平價 Δ0.5\Delta\approx0.5 Δ0.5\Delta\approx-0.5 Δ0.5\Delta\approx-0.5 Δ0.5\Delta\approx0.5
實值 Δ1\Delta\to1 Δ1\Delta\to-1 Δ1\Delta\to-1 Δ1\Delta\to1
圖像 04 05 06 7

特徵 II

  • PCP 平價原理
    • Delta=Delta+1看漲期權 Delta = 看跌期權 Delta + 1

c+X1+r(Tt)=p+ScS=pS+1c + \frac{X}{1+r(T-t)}=p+S \to \frac{\partial c}{\partial S}= \frac{\partial p}{\partial S}+1

11

  • 如圖,可以看出來 他們的Delta 相差1

特徵 III

  • 快到期時,實值、虛值、和平值期權的Delta 差異比較大
    • 剩餘期限比較大的話 時間價值比較大 它的期權價格曲線相對平滑,所以它的切線斜率比較小
看漲 看跌
13 14

特徵 IV

  • 波動率較低時,實值、虛值、和平值期權的Delta 差異比較大
    • 原理與特徵 III 相同
看漲 看跌
16 17

證券組合的 Delta 值

頭寸 Delta 例子(N爲數量)
現貨多頭 1 4單位: 4×1=44\times 1 =4
現貨空頭 -1 3單位: 3×1=33\times -1 =-3
期貨多頭 1 2單位: 2×1=22\times 1 =2
現貨多頭 -1 5單位: 5×1=55\times -1 =-5
歐式看漲期權多頭
(無紅利)
0<Δ<10<\Delta<1 5單位多頭,每單位Delta爲0.5: 5×0.5=2.55\times 0.5 =2.5
歐式看漲期權空頭
(無紅利)
1<Δ<0-1<\Delta<0 4單位空頭,每單位Delta爲-0.4: 4×0.4=1.64\times -0.4 =-1.6
歐式看跌期權多頭
(無紅利)
1<Δ<0-1<\Delta<0 3單位多頭,每單位Delta爲-0.5: 3×0.5=1.53\times -0.5 =-1.5
歐式看跌期權空頭
(無紅利)
0<Δ<10<\Delta<1 2單位空頭,每單位Delta爲0.6: 2×0.6=1.22\times 0.6 =1.2
投資組合 iNiΔi\sum_i N_i\cdot\Delta_i

Delta 中性

  • 在投資組合中 讓Delta 爲0 稱 Delta 中性
  • 意味着 投資組合對現貨價格變動的一階敏感性爲 0
  • 實現:運用同一標的資產的現貨,期貨和期權等進行相互套期保值,使證券組合的值等於0
  • 特點:有期權的情況下是動態的,需要不懂調整頭寸以使組合重新處於Δ\Delta中性狀態,這種調整稱爲再均衡(Rebalancing)。

Gamma (Γ)(\Gamma)

  • 標的價格變動1單位時,Delta Δ\Delta 變多少?

  • 例:

    • Gamma = 0.0056,Delta = 0.3141 意味着
    • 如果指數上漲 10 點,Delta大概上升至 0.3141+100.0056=0.37010.3141+10*0.0056 = 0.3701
    • 如果指數下跌 10 點,Delta大概下降至 0.3141100.0056=0.25810.3141-10*0.0056 = 0.2581
  • Γ=ΔS=2cS2\Gamma = \frac{\partial \Delta}{\partial S}=\frac{\partial^2 c}{\partial S^2}

  • 期權價格曲線曲度的主要部分 dcΔ×dS+12Γ×(dS)2d c \approx \Delta \times d S + \frac{1}{2}\Gamma \times (d S)^2

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


def d1(X,Y):
    dx = X[2:] - X[:-2]
    dy = Y[2:] - Y[:-2]
    return X[1:-1],dy/dx

def d2(X,Y):
    X, Y = d1(X,Y)
    return d1(X,Y)
    
def plt_slope(X,Y,x):
    dx,slopes = d1(X,Y)
    d2x, gammas = d2(X,Y)
    slope_x = slopes[abs(dx-x)<1e-6]
    gamma_x = gammas[abs(d2x-x)<1e-6]
    y = Y[abs(X-x)<1e-6]
    plt.plot(X,slope_x*(X-x)+y,'--',c='orange',label='slope')
    plt.annotate(fr'$\Delta = ${round(slope_x[0],4)}',xy=(x,y-0.08),weight="bold")
    plt.annotate(fr'$\Gamma = ${round(gamma_x[0],4)}',xy=(x,y-0.12),weight="bold")

# 標的價格S做自變量 求因變量c
S = np.arange(2.5,3.5,0.001)
BS = [BlackScholes(s,3., 0.05, 0.16)for s in S]
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_dx,bc_dy = d1(S,bc) # Buy Call Delta
bp_dx,bp_dy = d1(S,bp) # Buy Put Delta
bc_d2x,bc_d2y = d2(S,bc) # Buy Call Delta
bp_d2x,bp_d2y = d2(S,bp) # Buy Put Delta
x_samples = [2.6,3,3.4]
y_samples = [bc[abs(S-x)<1e-6]for x in x_samples] # 計算得出y座標
plt.figure(figsize=(8,5), dpi=200)
plt.plot(S,bc)
plt_slope(S,bc,3.)
plt.grid(True)
plt.xlabel('標的價格')
plt.ylabel('看漲期權價格')
plt.yticks(y_samples,[r'$C_2$',r'$C_0$',r'$C_1$'])
plt.xticks(x_samples,[r'$S_2$',r'$S_0$',r'$S_1$'])
plt.show()

04

  • (無紅利歐式期權)Gamma的4個特徵

特徵 I

  • 期權多頭 Γ>0\Gamma>0 凹曲面 Convex
    • 看漲 Convex up 上凹
    • 看跌 Convex down 下凹
  • 期權空頭 Γ<0\Gamma<0 凸曲面 Concave
    • 看漲 Concave down 下凸
    • 看跌 Concave up 上凸
# 看漲多頭
plt.figure(figsize=(8,5), dpi=200)
plt.plot(S,bc,'r',lw=2)
plt_slope(S,bc,3.)
plt.xlabel('標的價格')
plt.ylabel('看漲期權價格')
plt.title('看漲期權多頭 Gamma 特徵')
plt.show()

07

# 看跌多頭
plt.figure(figsize=(8,5), dpi=200)
plt.plot(S,bp,'r',lw=2)
plt_slope(S,bp,3.)
plt.xlabel('標的價格')
plt.ylabel('看跌期權價格')
plt.title('看跌期權多頭 Gamma 特徵')
plt.show()

08

# 看漲空頭
plt.figure(figsize=(8,5), dpi=200)
plt.plot(S,-1*bc,'r',lw=2)
plt_slope(S,-1*bc,3.)
plt.xlabel('標的價格')
plt.ylabel('看漲期權價格')
plt.title('看漲期權空頭 Gamma 特徵')
plt.show()

09

# 看跌空頭
plt.figure(figsize=(8,5), dpi=200)
plt.plot(S,-1*bp,'r',lw=2)
plt_slope(S,-1*bp,3.)
plt.xlabel('標的價格')
plt.ylabel('看跌期權價格')
plt.title('看跌期權空頭 Gamma 特徵')
plt.show()

10

特徵 II

  • 其他條件相同的歐式期權:看漲Gamma=看跌Gamma

c+X1+r(Tt)=p+S2cS2=2pS2c + \frac{X}{1+r(T-t)}=p+S \to \frac{\partial^2 c}{\partial S^2}= \frac{\partial^2 p}{\partial S^2}

# 對比多頭 Gamma

plt.figure(figsize=(8,5), dpi=200)
plt.plot(bc_d2x,bc_d2y,'r',lw=4,label='Call') # 因爲相等 加粗
plt.plot(bp_d2x,bp_d2y,'green',label='Put')
plt.legend(loc='best')
plt.ylabel('Gamma 值')
plt.xlabel('標的價格')
plt.grid(True)
plt.show()

12

特徵 III

  • 平價附近期權的Gamma值最大

特徵 IV

  • 快到期時,實值、虛值、和平值期權的Delta 差異比較大
  • 波動率較低時,實值、虛值、和平值期權的Delta 差異比較大
# 看漲期權的Gamma 與期限的關係
T = np.arange(0.01,2,0.001)
BS_T_r = [[BlackScholes(3.48+i*0.01,3., 0.05, t).calc('c') for i in range(5)] for t in T] # 實值
BS_T_e = [[BlackScholes(2.98+i*0.01,3., 0.05, t).calc('c') for i in range(5)] for t in T] # 平價
BS_T_i = [[BlackScholes(2.48+i*0.01,3., 0.05, t).calc('c') for i in range(5)] for t in T] # 虛值
interval_x = np.array([i*0.01 for i in range(5)])

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 = [d2(interval_x, np.array(bs))[1][0] for bs in BS_T] # Buy Call Gamma
    plt.plot(T,bc,color,label=labels)
plt.legend(loc='best')
plt.ylabel('Gamma 值')
plt.title('看漲期權的Gamma 與期限的關係')
plt.xlabel('期權期限(年)')
plt.xticks([0,1,2])
plt.grid(True)
plt.show()

15

# 看跌期權的Gamma 與期限的關係
T = np.arange(0.01,2,0.001)
BS_T_r = [[BlackScholes(3.48+i*0.01,3., 0.05, t).calc('p') for i in range(5)] for t in T] # 實值
BS_T_e = [[BlackScholes(2.98+i*0.01,3., 0.05, t).calc('p') for i in range(5)] for t in T] # 平價
BS_T_i = [[BlackScholes(2.48+i*0.01,3., 0.05, t).calc('p') for i in range(5)] for t in T] # 虛值
interval_x = np.array([i*0.01 for i in range(5)])

plt.figure(figsize=(8,5), dpi=200)
for BS_T,labels,color in zip([BS_T_i,BS_T_e,BS_T_r],['實值','平價','虛值'],['r','orange','g']):
    bc = [d2(interval_x, np.array(bs))[1][0] for bs in BS_T] # Buy Put Gamma
    plt.plot(T,bc,color,label=labels)
plt.legend(loc='best')
plt.ylabel('Gamma 值')
plt.title('看跌期權的Gamma 與期限的關係')
plt.xlabel('期權期限(年)')
plt.xticks([0,1,2])
plt.grid(True)
plt.show()

16

# 看漲期權的Gamma 與波動率的關係
Sigma = np.arange(0.01,1,0.001)
t = 0.5
BS_S_r = [[BlackScholes(3.48+i*0.01,3., sigma, t).calc('c') for i in range(5)] for sigma in Sigma] # 實值
BS_S_e = [[BlackScholes(2.98+i*0.01,3., sigma, t).calc('c') for i in range(5)] for sigma in Sigma] # 平價
BS_S_i = [[BlackScholes(2.48+i*0.01,3., sigma, t).calc('c') for i in range(5)] for sigma in Sigma] # 虛值
interval_x = np.array([i*0.01 for i in range(5)])

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 = [d2(interval_x, np.array(bs))[1][0] for bs in BS_S] # Buy Call Gamma
    plt.plot(Sigma,bc,color,label=labels)
plt.legend(loc='best')
plt.ylabel('Gamma 值')
plt.title('看漲期權的Gamma 與波動率的關係')
plt.xlabel('波動率')
plt.xticks([0,0.5,1],['0%','50%','100%'])
plt.grid(True)
plt.show()

17

# 看跌期權的Gamma 與波動率的關係
Sigma = np.arange(0.01,1,0.001)
t = 0.5
BS_S_r = [[BlackScholes(3.48+i*0.01,3., sigma, t).calc('p') for i in range(5)] for sigma in Sigma] # 實值
BS_S_e = [[BlackScholes(2.98+i*0.01,3., sigma, t).calc('p') for i in range(5)] for sigma in Sigma] # 平價
BS_S_i = [[BlackScholes(2.48+i*0.01,3., sigma, t).calc('p') for i in range(5)] for sigma in Sigma] # 虛值
interval_x = np.array([i*0.01 for i in range(5)])

plt.figure(figsize=(8,5), dpi=200)
for BS_S,labels,color in zip([BS_S_i,BS_S_e,BS_S_r],['實值','平價','虛值'],['r','orange','g']):
    bc = [d2(interval_x, np.array(bs))[1][0] for bs in BS_S] # Buy Put Gamma
    plt.plot(Sigma,bc,color,label=labels)
plt.legend(loc='best')
plt.ylabel('Gamma 值')
plt.title('看跌期權的Gamma 與波動率的關係')
plt.xlabel('波動率')
plt.xticks([0,0.5,1],['0%','50%','100%'])
plt.grid(True)
plt.show()

18

證券組合的 Gamma 值

頭寸 Gamma 例子(N爲數量)
現貨多頭 0 4單位: 4×0=04\times 0 =0
現貨空頭 0 3單位: 3×0=03\times 0 =0
期貨多頭 0 2單位: 2×0=02\times 0 =0
現貨多頭 0 5單位: 5×0=05\times 0 =0
歐式看漲期權多頭
(無紅利)
Γ>0\Gamma>0 5單位多頭,每單位 Gamma 爲0.005: 5×0.005=0.0255\times 0.005 =0.025
歐式看漲期權空頭
(無紅利)
Γ<0\Gamma<0 4單位空頭,每單位 Gamma 爲-0.004: 4×0.004=0.0164\times -0.004 =-0.016
歐式看跌期權多頭
(無紅利)
Γ>0\Gamma>0 3單位多頭,每單位 Gamma 爲0.005: 3×0.005=0.0153\times 0.005 =0.015
歐式看跌期權空頭
(無紅利)
Γ<0\Gamma<0 2單位空頭,每單位 Gamma 爲-0.006: 2×0.006=0.0122\times -0.006 =0.012
投資組合 iNiΓi\sum_i N_i\cdot\Gamma_i

Gamma 中性

  • 只有期權有 Gamma 值
  • 在投資組合中 讓 Γ\Gamma 爲0 稱 Γ\Gamma 中性
  • Γ\Gamma 中性 時爲了消除 Δ\Delta 中性的誤差,同樣也是動態的概念
  • 實現:由於保持 Γ\Gamma 中性只能通過期權頭寸調整獲得,實現中性的結果往往時非中性,因而常常還需要運用標的資產或期貨頭寸進行調整,才能使得證券組合同時實現 Δ, Γ\Delta ,\ \Gamma 中性

Theta (Θ)(\Theta) — 時間

  • 時間變化一天,期權價格大概變化多少?

  • Time 時間

  • 例:

    • Theta = 1.234 意味着
    • 時間每過一天,期權價格大概上漲 1.234點

Vega (ϑ)(\vartheta) — 隱含波動率

  • 隱含波動率變化一百分點,期權價格大概變化多少?

  • Volatility 隱含波動率

  • 例:

    • Vega = 1.878 意味着
    • 每隱含波動率上升1%,期權價格大概上漲 1.878點

Rho (r)(r) — 利率

  • Rate 利率

下一篇 希臘字母 Theta

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章