人工智慧金融投資決策_ Binomial Tree Pricing




One-Period Binomial Model

二項樹(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

假設要讓投資組合變成無風險投資組合
也就表示在「上漲」與「下跌」兩種情況下,投資組合的最終價值完全一樣

這個 Δ 就是所謂的 Delta 避險比率(hedge ratio)。

假設無風險利率為 r,由於這個投資組合已經沒有風險,因此它應該只能賺取無風險利率

到期時投資組合價值折現回今天為:

因此目前投資組合的價值:



這個式子進一步整理,就可以得到一期二項樹的選擇權價格:




n-step Binomial Model

在風險中立世界中,以資本利得形式表示的預期報酬率為 r。

其期望值為:




定義 R 為資產價格在時間 Δt 內的百分比變動率。則:

  • 有機率 p,使得
  • 有機率 ,使得
根據上一個公式, 的變異數為:


將公式 (5.2) 的等號兩邊同時乘以 (u+d),再與公式 (5.3) 結合,可以得到:


根據Cox、Ross 與 Rubinstein(1979)提出的方法:

根據公式 (5.2)、(5.4) 與 (5.5),可以得到:
u、d分別是上漲跟下跌的比率。

底下是 Tow-Period Binomial Model

S₀ : 代表是今天(當下)的股價。
有p的機率股價變成S₀ * u
有1-p的機率股價變成S₀ * d

隔天則會根據上一個節點,又有二分可能。
有可能先漲再跌,也可能先跌再漲。
因此根據two-step由上至下四種路徑各自機率如下
S₀ * u² =>代表買了兩次都漲  ,機率: 
S₀ * ud =>代表買了先漲再跌  ,機率: p(1-p)
S₀ * ud =>代表買了  ,機率: (1-p)p
S₀ * d² =>代表買了兩次都跌  ,機率: (1-p)²


第一階段.第一棵股價樹矩陣的Pseudo Code

透過兩層迴圈,把整個 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




留言

這個網誌中的熱門文章

SAP物料主數據(Material Master Data)

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

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