人工智慧金融投資決策_ Binomial Tree Pricing
二項樹(Binomial Tree)二項式定價模型
- 期權的二項式定價模型是由Cox, Ross and Rubinstein在 1979 年首次提出的。
- 是一種常用的方法,用來近似股票、選擇權或其他資產價格的變動。
- 二項樹是一種圖形表示方式,用來呈現資產在存續期間內,股票價格可能遵循的各種不同路徑。
- 在進行選擇權定價時,其基本假設是股票價格遵循隨機漫步(Random Walk)。
- 使用二項式樹時的主要假設包括利率保持不變、沒有股息發放,以及不存在交易成本或稅金。此模型最適用於期限較長或涉及有股息支付的證券的期權定價。
- 使用二項式樹來計算價格的過程會比Black Scholes還來的慢。
假設一個經濟體情境
- 屬於一個無風險債券(risk-free bond),其無風險利率為 12%。
- 一檔股票,目前價格為 20 美元。
- 三個月後,股票價格將會是 22 美元或 18 美元。
- 將股票價格簡化為要馬上漲、要馬下跌
- 我們要將三個月到期的call option price去定價,履約價為21
- 當三個月到期時股票價格漲到22元,這時候call price價值就是1元,此時就會履約。
- 若未來股票下跌到18元,此時call price價值就是0元,則不履約。
- 在每一個時間步驟中,股票價格都有某個特定機率上漲某個百分比幅度,也有某個特定機率下跌某個百分比幅度。
如果我們能建立一個投資組合(Portfolio),使其報酬能夠複製選擇權的到期損益(Replicate the Payoff of an Option),那麼在市場不存在套利機會的情況下
選擇權價格=複製投資組合的價格
也就是說,如果「股票+無風險債券」組成的投資組合,未來不論股價上漲或下跌,都能產生
和某個選擇權完全相同的損益,那麼今天這兩者的價格就必須相同;否則市場上就會出現無風險套利機會。
Binomial Tree Option Pricing Formula
假設要讓投資組合變成無風險投資組合
也就表示在「上漲」與「下跌」兩種情況下,投資組合的最終價值完全一樣
這個式子進一步整理,就可以得到一期二項樹的選擇權價格:
n-step Binomial Model
在風險中立世界中,以資本利得形式表示的預期報酬率為 r。
其期望值為:
定義 R 為資產價格在時間 Δt 內的百分比變動率。則:
- 有機率 p,使得
- 有機率 ,使得
根據上一個公式, 的變異數為:
底下是 Tow-Period Binomial Model
有p的機率股價變成S₀ * u
有1-p的機率股價變成S₀ * d
隔天則會根據上一個節點,又有二分可能。
有可能先漲再跌,也可能先跌再漲。
因此根據two-step由上至下四種路徑各自機率如下
S₀ * u² =>代表買了兩次都漲 ,機率: p²
S₀ * ud =>代表買了先漲再跌 ,機率: p(1-p)
S₀ * ud =>代表買了先跌再漲 ,機率: (1-p)p
S₀ * d² =>代表買了兩次都跌 ,機率: (1-p)²
透過兩層迴圈,把整個 n-step 股票價格二項樹建立出來。
Step1.將 T 切成 n 期,準備一個 Price[n+1][n+1]的空矩陣。
Step2.初始化Price[0][0] = S ,將目前的股票價格 S 放在矩陣的起始位置。
Step3.接著利用 r 與 c 兩層迴圈來計算Price[r][c] 逐一填寫此矩陣的 upper triangle
Step4.c 從 1 跑到 n
- 針對每一個 c,r 從 0 跑到 c,逐一計算Price[r][c]
- 例如當c = 3時,需要依序計算:Price[0][3] 、Price[1][3] 、Price[2][3] 、Price[3][3]
- 當r是0時,則Price[r][c] = Price[r][c-1] * u,每個元素都是其左邊元素乘上d。
- 當r 非0時,則Price[r][c] = Price[r-1][c-1] * d,每個元素都是其左上角元素乘上d。
第二階段.第二棵機率樹矩陣的Pseudo Code
Step1.將 T 切成 n 期,準備 Prob[n+1][n+1] 空矩陣
Step2.初始 Prob[0][0] = SStep1.
Step3.接著用 r 及 c 兩層迴圈來計算 Prob[r][c],逐一填寫此矩陣的 upper triangle
Step4. c 從 1 跑到 n
► 針對每個 c , r 從 0 跑到 c,逐一計算 Prob[r][c]
► 承上,當 c 是 3 的時候,要計算
prob[0][3]、prob[1][3]、prob[2][3]、prob[3][3]
► 當 r 是 0 的時候,prob[r][c] = prob[r][c-1] * p
即:prob[0][c] = prob[0][c-1] * p,是其左邊元素乘 p
► 當 r == c 時,prob[r][c] = prob[r-1][c-1] * (1-p)
即:prob[c][c] = prob[c-1][c-1] * (1-p) ,是其左上元素乘
► 其他時候,prob[r][c] = prob[r][c-1] * p+ prob[r-1][c-1] * (1-p)
,從左邊及左上兩個元素各自乘 p 及 計算過來。
第三階段.取出 price 及 prob 兩個 tree 的最後一個 column,計算每個股價下的選擇權報酬,再乘上各自的機率,計算出此選擇權整體的期望報酬後再折現回今日價。
測試程式碼
import numpy as np import math def bitprice(S,K,T,r0,vol,N): dt=T/N u=math.exp(vol*math.sqrt(dt)) d=math.exp(-vol*math.sqrt(dt)) p=(math.exp(r0*dt)-d)/(u-d) price=np.zeros((N+1,N+1)) price[0,0]=S for c in range(1,N+1): price[0][c]=price[0][c-1]*u for r in range(1,c+1): price[r][c] = price[r-1][c-1]*d prob = np.zeros((N+1,N+1)) prob[0][0]=1 for c in range(1,N+1): prob[0][c]=prob[0][c-1]*p for r in range(1,c): prob[r][c] = prob[r-1][c-1]*(1-p)+prob[r][c-1]*p prob[c][c] = prob[c-1][c-1]*(1-p) call = 0 for r in range(N+1): if(price[r][N]>K): call += (price[r][N]-K) * prob[r][N] print("價格樹") print(price) print("機率樹") print(prob) return call*math.exp(-r0*T) S = 50 K = 40 T = 2 r = 0.08 vol = 0.2 call = bitprice(S,K,T,r,vol,5) print(call)
程式運行結果
Ref:
Binomial Pricing
https://quantra.quantinsti.com/glossary/Binomial-Pricing
金融衍生品06-An Introduction to Binomial Tree Models
Comprehensive Guide to Binomial Trees: Definitions and Examples
留言
張貼留言