上一篇 隱含波動率
文章目錄
編程金融小白學 股票期權
希臘字母 II
-
運用希臘字母 是對期權 比較靜態的敏感分析
-
含義:其他條件不變,(某因素)變化一單位,期權價格大概變化多少?
- 標的資產價格: Delta
- 時間: Theta
- 隱含波動率: Vega T
- 利率: Rho
-
Gamma : 標的價格變動1單位時,Delta 變多少?
波動率 Sigma
- 詳情 請看 隱含波動率
Delta — 標的資產價格
-
標的資產價格變化一單位,期權價格大概變化多少?
-
例:
- Delta = 0.3141 意味着
- 如果指數上漲 10 點,期權價格大概上漲 3.141點
-
-
期權價格曲線切線斜率(動態時變)
-
(無紅利歐式期權) Delta 的4個特徵:
特徵 I
標的價格 | 看漲多頭 | 看漲空頭 | 看跌多頭 | 看跌空頭 |
---|---|---|---|---|
區間 | 符號相反 | 符號相反 | ||
虛值 | ||||
平價 | ||||
實值 | ||||
圖像 |
特徵 II
- PCP 平價原理
- 如圖,可以看出來 他們的Delta 相差1
特徵 III
- 快到期時,實值、虛值、和平值期權的Delta 差異比較大
- 剩餘期限比較大的話 時間價值比較大 它的期權價格曲線相對平滑,所以它的切線斜率比較小
看漲 | 看跌 |
---|---|
特徵 IV
- 波動率較低時,實值、虛值、和平值期權的Delta 差異比較大
- 原理與特徵 III 相同
看漲 | 看跌 |
---|---|
證券組合的 Delta 值
頭寸 | Delta | 例子(N爲數量) |
---|---|---|
現貨多頭 | 1 | 4單位: |
現貨空頭 | -1 | 3單位: |
期貨多頭 | 1 | 2單位: |
現貨多頭 | -1 | 5單位: |
歐式看漲期權多頭 (無紅利) |
5單位多頭,每單位Delta爲0.5: | |
歐式看漲期權空頭 (無紅利) |
4單位空頭,每單位Delta爲-0.4: | |
歐式看跌期權多頭 (無紅利) |
3單位多頭,每單位Delta爲-0.5: | |
歐式看跌期權空頭 (無紅利) |
2單位空頭,每單位Delta爲0.6: | |
投資組合 |
Delta 中性
- 在投資組合中 讓Delta 爲0 稱 Delta 中性
- 意味着 投資組合對現貨價格變動的一階敏感性爲 0
- 實現:運用同一標的資產的現貨,期貨和期權等進行相互套期保值,使證券組合的值等於0
- 特點:有期權的情況下是動態的,需要不懂調整頭寸以使組合重新處於中性狀態,這種調整稱爲再均衡(Rebalancing)。
Gamma
-
標的價格變動1單位時,Delta 變多少?
-
例:
- Gamma = 0.0056,Delta = 0.3141 意味着
- 如果指數上漲 10 點,Delta大概上升至
- 如果指數下跌 10 點,Delta大概下降至
-
-
期權價格曲線曲度的主要部分
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()
- (無紅利歐式期權)Gamma的4個特徵
特徵 I
- 期權多頭 凹曲面 Convex
- 看漲 Convex up 上凹
- 看跌 Convex down 下凹
- 期權空頭 凸曲面 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()
# 看跌多頭
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()
# 看漲空頭
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()
# 看跌空頭
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()
特徵 II
- 其他條件相同的歐式期權:看漲Gamma=看跌Gamma
# 對比多頭 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()
特徵 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()
# 看跌期權的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()
# 看漲期權的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()
# 看跌期權的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()
證券組合的 Gamma 值
頭寸 | Gamma | 例子(N爲數量) |
---|---|---|
現貨多頭 | 0 | 4單位: |
現貨空頭 | 0 | 3單位: |
期貨多頭 | 0 | 2單位: |
現貨多頭 | 0 | 5單位: |
歐式看漲期權多頭 (無紅利) |
5單位多頭,每單位 Gamma 爲0.005: | |
歐式看漲期權空頭 (無紅利) |
4單位空頭,每單位 Gamma 爲-0.004: | |
歐式看跌期權多頭 (無紅利) |
3單位多頭,每單位 Gamma 爲0.005: | |
歐式看跌期權空頭 (無紅利) |
2單位空頭,每單位 Gamma 爲-0.006: | |
投資組合 |
Gamma 中性
- 只有期權有 Gamma 值
- 在投資組合中 讓 爲0 稱 中性
- 中性 時爲了消除 中性的誤差,同樣也是動態的概念
- 實現:由於保持 中性只能通過期權頭寸調整獲得,實現中性的結果往往時非中性,因而常常還需要運用標的資產或期貨頭寸進行調整,才能使得證券組合同時實現 中性
Theta — 時間
-
時間變化一天,期權價格大概變化多少?
-
Time 時間
-
例:
- Theta = 1.234 意味着
- 時間每過一天,期權價格大概上漲 1.234點
Vega — 隱含波動率
-
隱含波動率變化一百分點,期權價格大概變化多少?
-
Volatility 隱含波動率
-
例:
- Vega = 1.878 意味着
- 每隱含波動率上升1%,期權價格大概上漲 1.878點
Rho — 利率
- Rate 利率