選擇權評價模型/Black-Scholes/二元樹-附程式碼(Option Pricing ...

文章推薦指數: 80 %
投票人數:10人

Black-Scholes Model 財金手札FinanceNote 彙集財務金融領域中歷久不衰的經典主題,包含了評價模型、時間序列...等,也提供投資和程式實作文章。

選擇權評價模型/Black-Scholes/二元樹-附程式碼(OptionPricingModel/Black-Scholes/BinaryTree) tags: python , Finance , pricingmodel , option , black-scholes , binarytree 日期:2021-07-23 瀏覽:374 資產訂價 Black-ScholesModel Black-ScholesModel程式碼 二元樹(BinaryTree) 二元樹(BinaryTree)程式碼 台指選擇權評價 參考資料 資產訂價 所謂的資產訂價就是利用數學模型計算金融商品價格的動作,資產訂價一直是個令人著迷的議題,透過模型搭配參數計算價格,捕捉金融商品的價格變化,除了交易本身的魅力外,背後帶來的利潤也是原因之一,金融市場中大量運用數學最著名的例子就是文藝復興了,而他們的出名和低調,也為財務工程增添了不少神秘的色彩。

在臺灣眾多的衍生性金融商品當中,台指選擇權一直以來穩坐期交所交易量的第一名。

主要的原因有幾個,像是因為標的資產為台灣加權股價指數的關係,台指選能夠更直接反映市況,讓投資人可以有感參與市場,再來1點50元的權利金,也降低了參與投資的門檻…等 今天我們將透過Python實做兩個基礎的選擇權評價模型-Black-Scholes和二元樹來對台指選擇權價格進行評價,看看效果如何。

Black-ScholesModel 其實Python在實作一般的評價模型上並不會特別困難,主要原因就是最困難的部份(提出模型)已經有人完成了,我們需要做的是理解和使用。

$$d_1=\frac{ln\frac{S}{K}+(r+\frac{\sigma^{2}}{2})T}{\sigma\sqrt{T}}$$ $$d_2=\frac{ln\frac{S}{K}+(r-\frac{\sigma^{2}}{2})T}{\sigma\sqrt{T}}=d_1-\sigma\sqrt{T}$$ $$c=S_0N(d_1)-Ke^{-rT}N(d_2)$$ $$p=Ke^{-rT}N(-d_2)-S_0N(-d_1)$$ 模型中假設股價報酬率為對數常態分配(Lognormaldistribution),而至於在計算call和price中使用到的$N(d_1)$和$N(d_2)$,皆為累積機率密度函數,代表的意義根據JohnHull的財工聖經中是這麼解釋的 $N(d_1)$為在風險中立的世界中,資產價格相不低於K的機率 $N(d_2)$為執行選擇權的機率 更多的細節推導可以參考財工的專書,我們來用程式把模型實作出來。

下面是一個已經完成的Black-Scholes的function,所需要給定的參數就如同平常看到的B-SModel無異,代表的意義分別如下: c_p:買權或賣權,輸入'call'或是'put' s:資產價格 k:履約價格 r:無風險利率 v:波動度 q:殖利率 t:到期日(年) Black-ScholesModel程式碼 二元樹(BinaryTree) 在二元樹模型中,每個節點(node)的股價都會有兩個結果,上升(up)或下降(down),如同模型名稱般,結果為Binary的形式。

從這樣的表示方式應該也能明顯感受出二元樹相對B-SModel來得淺顯好懂許多。

在使用模型時,我們會設定要將現在(now)至到期日(maturity)間切分為多少節點(n),例如預估半年後到期的選擇權,T=6/12=1/2,而切成10期的話,每期時間變動將會是0.5/10=0.05,也就是公式中的$\Deltat$。

而每個節點上升和下降的幅度是這麼計算的 $$u=e^{\sigma\sqrt{\Deltat}}d=e^{-\sigma\sqrt{\Deltat}}$$ $\Deltat$即為每期的時間變動,利用資產價格的波動度呈上微小時間變動,計算出每個節點可能出現的上升和下降價格。

至於每個節點上升和下降機率,計算公式如下 $$P^{*}=\frac{e^{\mu\Deltat}-d}{u-d}$$ 如同B-SModel和許多的財務模型,二元樹模型也是假設投資人為風險中立的情況,因為這樣的假設也代表風險增加的情況下,投資人不要求更高的預期報酬。

JohnHull的財工聖經中寫到兩點為何許多模型都以風險中立假設 對於資產價格的預期報酬率能以無風險利率表示 資產價格也就能用無風險利率進行折現 有了預期價格和機率,也就能夠算出期望值,每一期的資產價格參考下圖 假設總共有N期,第N期中各節點的選擇權價格,以代數表示可以寫成 $$f_{N,j}=max(S_0u^{j}d^{N-j}-K,0),j=0,1,...N$$ 這是call的計算,如果put的話便是把資產價格和執行價格對調即可,而每一節點選擇權價格相當於下一期上升和下降價格取期望值後折現。

$$f_{i,j}=e^{-r\Deltat}[pf_{t+1,j+1}+(1-p)f_{i+1,j}]]$$ 簡單來說,用二元樹評價用法就是 先算出到期日各個節點的選擇權價格 再用到期日的價格回推當前的選擇權價格 台指選是屬於歐式選擇權,和美式選擇權最大不同在於無法提前履約。

也因此程式中就沒刻意計算各節點中的預期資產價格,不然評價美式選擇權的工序其實又更多了。

如果寫成程式就像這樣(直接寫歐式其實比較簡易些),和B-S模型需要的參數大致相同,唯獨多了一樣期數(n)。

二元樹(BinaryTree)程式碼 台指選擇權評價 接著我們會用模型來對選擇權進行評價,使用的資料為2021/5/24臺指選16600的Call和加權指數,資料頻率皆為1分鐘。

即便選擇權開盤時間為8:45至13:45,但我們還是配合大盤開盤時間從9:00開始計算,而選擇權資料有些殘缺,但還堪用。

而模型中需要的波動度,則是用2001年2月至今的加權指數日資料計算後年化(其實波動度為影響選擇權六大因子中最難估計的),有些更複雜的作法會用預測的波動餵入模型當作參數,我們先用歷史波動度簡化評價作業。

程式碼在讀取資料後,隨即進行價格的估算,模型參數設定如下 s:加權指數每分鐘收盤價 k:16600 r:臺灣銀行三個月定存牌告利率(機動) v:加權指數歷史波動度 t:到六月的第三個禮拜三前還有22個交易日,故設定22/252 q:0 n:設定100期(僅二元樹模型須設定) 出來的結果如下圖 綠色的二元樹和橘紅色的B-SModel兩者的結果幾乎一樣,走勢重疊,令人驚奇的是代入了日內的加權指數價格後,在評價上和實際價格的吻合度好高。

我也嘗試用過同樣的方法計算週選,結果並不是很理想,週選的波動度應該是大上許多,用長期計算的數據跑出來的評價都普遍偏低。

但沒想到月選的結果會如此貼合,不過畢竟這邊示範的月選資料只有一天,要下結論需要更多的資料驗證。

參考資料 Options,Futures,andOtherDerivatives.JohnC.Hull 類似主題 選擇權評價模型/蒙地卡羅模擬/三元樹-附程式碼(OptionPricing/MonteCarlo/TrinomialTree) Fama-French五因子模型實作-附程式碼(Five-factorassetpricingmodelconstructingprocess) 爬取公開資訊觀測站財務報表(GettheFinancialStatement)-附程式碼 0050/0056/ETF定期定額績效回測(BacktestingforDollar-AveragingStrategy) 證交所股票價格爬蟲實作教學(Let’scrawlstockprice)-附程式碼 猜你喜歡 觀察美國聯邦資金利率的升降(FedFundRateCutorHike) 利用Excel進行股票評價模型實作-股利折現模型(StockValuationbyDividendDiscountModel) 認識迴歸模型(Thingsshouldknowaboutregressionmodel) 留言討論 搜尋文章 搜尋 熱門文章 1 證交所股票價格爬蟲實作教學(Let’scrawlstockprice)-附程式碼 2 Fama-French五因子模型實作-附程式碼(Five-factorassetpricingmodelconstructingprocess) 3 爬取公開資訊觀測站財務報表(GettheFinancialStatement)-附程式碼 4 Python與效率前緣(EfficientFrontier) 5 選擇權評價模型/Black-Scholes/二元樹-附程式碼(OptionPricingModel/Black-Scholes/BinaryTree) 熱門標籤 Finance 20 python 16 stock 5 pricingmodel 5 model 5 requests 3 option 3 investing 3 xirr 2 r 2 無情工商 關於我 楊育晟 NTNUMBAFinanceProgram-分享財務金融知識、財金主題搭配程式實作相關文章。

封面圖:upsplash  [email protected]



請為這篇文章評分?