人工智慧金融投資決策_ 利用Bi-section反推求解Volatility_希臘字風險係數



二分逼近法(Bisection Method)
當處於連續函數情境,則適合去套用bisection方法。

以下是一個推導的動畫示意

求解 f(x) = x² - 2 = 0,即找到 √2 ≈ 1.4142...



根據上面的數學式子很明顯會知道要求解的根位於1~2之間
那我們一開始就取二分,也就是中間值1.5
1.5帶入式子計算 =>1.5² -2 > 0
代表我們猜的中間值取大了
這時候就要再去二分了,取的是[1,1.5]之間的中間值也就是1.25。
1.25帶入式子計算 =>1.25² -2 < 0
代表我們猜的中間值取小了
這時候就要再去二分了,取的是[1.25,1.5]之間的中間值
後續就持續往中間去逼近要求解的根,這就是Bi-Section

所以程式演算法每一次都會圍繞在[a,b]區間做三件事
  1. 先找中間值
  2. 接著判斷根在哪一半,再去調整左右哪側要取代為新的中間值
  3. 只要目前左右邊界 a 和 b 的距離還大於 0.000001,就繼續二分。

二分逼近法程式範例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
def f(x):
    return x**2 - 2


a, b = 1, 2

while b - a > 0.000001:
    c = (a + b) / 2

    if f(a) * f(c) < 0:
        b = c
    else:
        a = c

print((a + b) / 2)

運行結果

利用Bi-section反推求解Volatility
選擇權定價主要是以

S0S_0、 K 、 r 、 T、volatility來計算call 和 put的價格

其中以下這些都是能根據當時市場狀況和合約內容直接得知或推得,也是固定值:

S0S_0:時間 0 時的股票價格

KK:履約價(合約到期價格)

r
r
:無風險利率

TT:選擇權的存續期間,以年為單位,通常以交易日計算,例如一年為 252 個交易日


而唯獨Volatility(波動率)是需要估測的,能夠利用歷史波動率和統計作協助。

那也可改思考成輸入
S0S_0、 K 、 r 、 T、當時call price的成交價格,來計算Volatility


換言之,就是找出一個volatility使其滿足Black-Scholes公式計算

blsprice(S0S_0, K , r , T , Vol) 能近似於call price(現在成交價格)的問題


因為其他參數都為固定參數,我們可以用f(vol)去代替
blsprice(S0S_0, K , r , T , Vol)  - call   ,找出最適vol使f(vol)近似於0

假設波動率是坐落於0~1中間的數字
計算f(0.5),若f(0) * f(0.5) < 0改去找0~0.5之間,反之則找0.5~1之間。
重複上述動作,持續對半縮減搜尋範圍。


在上一篇已經藉由Black-Scholes求解出call price


現在我們反過來看,比方有人交易成交價格為16.383741845158895
那要去反推當時的vol是多少,如果求解出來近似0.2就代表是正確的。

利用當時的call price套用二分逼近法反推波動率的程式範例

import math
from scipy.stats import norm
#傳入S、K、T、r、val,返回合理價格
def blsprice(S, K, T, r, vol):
    d1 = (math.log(S / K) + (r + vol * vol / 2) * T) / (vol * math.sqrt(T))
    d2 = d1 - vol * math.sqrt(T)
    call = S * norm.cdf(d1) - K * math.exp(-r * T) * norm.cdf(d2)
    return call

S = 50
K = 40
T = 2
r = 0.08
vol = 0.2
call = blsprice(S, K, T, r, vol)
print(call)



#傳入S、K、T、r、call,返回當時的波動率vol
def BisectionBLS(S,K,T,r,call):
  left = 0.00000001
  right = 1
  while(right-left >= 0.00001):
    middle = (right+left)/2
    if((blsprice(S,K,T,r,left)-call)*(blsprice(S,K,T,r,middle)-call) < 0):
      right = middle
    else:
      left = middle
  return (left+right)/2
print(BisectionBLS(S,K,T,r,call))


運行結果



The Greek Letters(風險係數)
希臘字母風險指標
當某一個市場參數改變,而其他條件先固定時,選擇權價格會改變多少。
是在 Black–Scholes 模型下,用偏微分去衡量選擇權價格對各變數的敏感度。


主要分三個因素會去影響期權價格,分別是股價、時間、波動率。
如果想了解股價怎麼影響期權價格,則需要去聚焦在Delta、Gamma
如果想了解時間怎麼影響期權價格,則需要去聚焦在Theta
如果想了解波動率怎麼影響期權價格,則需要去聚焦在Vega


Delta 期權對沖值
值介於0~1之間,也就是期權對股價的敏感度,愈靠近1愈敏感,愈靠近0就愈不敏感。
希望Call price去對S做偏微分,也就是想得知S每移動一單位時候,Call Price會動多少。


期權伽瑪系數



Ref:
https://www.cmegroup.com/cn-t/education/courses/option-greeks/options-delta-the-greeks.html
https://www.cmegroup.com/cn-t/education/courses/option-greeks/options-gamma-the-greeks.html
https://www.cmegroup.com/cn-t/education/courses/option-greeks/theta.html
https://www.cmegroup.com/cn-t/education/courses/option-greeks/options-vega-the-greeks.html






留言

這個網誌中的熱門文章

SAP物料主數據(Material Master Data)

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

外貿Payment Term 付款條件(方式)常見的英文縮寫與定義