You are on page 1of 196

東吳大學

財務工程與精算數學系
金融計算
(Financial Calculation)
授課教師:鄭宏文 博士

Financial Calculation 1-1


參考書目
財務工程與Excel VBA的應用-選擇權評價理
論之實作/董夢雲/證基會出版

財務軟體應用- Excel VBA入門與在財務工程


的應用/張大成/雙葉書局

金融資訊管理 - 分析與系統設計/姜林杰祐/新
陸書局

Financial Calculation 1-2


內容
 VBA 介紹
 現金流量與折現
 常態分配與對數常態分配
 Black-Scholes 定價公式
 波動性的估計
 選擇權的敏感性與美式選擇權的定價
 異種選擇權(一)路徑無關選擇權
 異種選擇權(二)路徑相關選擇權
 樹狀模型
 蒙地卡羅模擬法
 結構型債券的應用

Financial Calculation 1-3


第一章

VBA 介紹

Financial Calculation 1-4


目錄
What is VBA?
VBA 的巨集錄製
試算表與VBA編輯器的切換
專案總管
程式碼視窗
屬性視窗

Financial Calculation 1-5


What is VBA?
 Visual Basic for Application (VBA)
微軟公司以程式開發語言『Visual Basic』為基
礎,在Excel之中引進應用程式的巨集語言。

 什麼是「巨集」(Macro) ?
一推指令的集合。

 運用VBA製作符合個人需求的巨集,代替我們執
行重複性的工作,提升工作效率。

Financial Calculation 1-6


VBA 的巨集錄製 (1/3)
1. 開啟Excel 2010再執行功能表指令『檢視/巨集/錄製巨集』。
2. 在快速鍵下方輸入『a』,按『確定』,在狀態列就會出現『錄製巨
集中』。
3. 點選B2輸入”1”, C2輸入”2”, D2輸入”3”, E2輸入”4”, F2輸入”5”,然後
『停止錄製』。

Financial Calculation 1-7


VBA 的巨集錄製 (2/3)
4. 執行『檔案/另存新檔』將檔案儲存為Book1.xls,再執行『檢視/巨集/
檢視巨集』就會出現『巨集』對話方塊 。
5. 選取方才錄製的『巨集1』,再按『編輯』,就進入Excel VBA編輯器
中,並顯示方才所選取的巨集內容。
6. 在上述的程式碼中,可看出操作步驟都已被錄製下來,並轉換為程式
碼,這些程式碼即為VBA的程式指令。

Financial Calculation 1-8


VBA 的巨集錄製 (3/3)
7. 在VBA的編輯環境中,執行『關閉』回到Excel視
窗。
8. 將『工作表1』中輸入的資料全部刪除,再按快速
鍵『Ctrl + a』發現之前刪除的資料又全部出現。
9. 也可由『檢視/巨集/檢視巨集』,選取『巨集1』,
再按『執行』來執行巨集。

Financial Calculation 1-9


試算表與VBA編輯器的切換
 啟動VBA編輯器的方法
 按快速鍵『Alt + F11』。
 執行功能表『檢視/巨集/檢視巨集』,再按『編輯』的方式進入
『VBA編輯器』。
 執行功能表『開發人員』的『Visual Basic 編輯器』。
• 你的Excel若沒有,請先新增『開發人員』 ,操作如下:『檔案/選項/
自訂功能區/開發人員/確定』。

 VBA編輯器回到試算表的方法
 按快速鍵『 Alt + F11』。
 點選功能表指令『檢視/Microsoft Excel』。
 可直接按工具列左上方有Excel圖示『檢視 Microsoft Excel 』。
 直接『關閉』。

Financial Calculation 1-10


專案總管
 專案總管視窗中放置了我們工作的活頁簿,Book1.xls。
 一個活頁簿就是一個專案《VBAProject (Book1.xls)》。
 Microsoft Excel 物件
• 工作表1、工作表2 、工作表3:一開啟Excel就自
動產生的試算表。
• ThisWorkbook:則不是一個我們直接可以看到的
成員。
 模組
• Module1:不是一個我們直接可以看到的成員。
但在VBA編輯環境下,我們是可看到它的存在。

 程式碼視窗中顯視的就是《Module1》的程式碼。
 《 Microsoft Excel 物件》下的成員,程式碼為空白。

Financial Calculation 1-11


程式碼視窗
 利用錄製方式產生的程式碼會放在模組中。
 至於我們自行撰寫的程式碼,則可按需要放在各個成員中。

Financial Calculation 1-12


屬性視窗
 紀錄各個活頁簿成員的一些特徵。
 《Module1》:並不是一個可看見的成員,其特徵只有一個名字。
 可改變其名字,專案總管中的名稱會一起改變。
 《工作表1 (工作表1)》:顯示所有特徵。
 可改變其中一些特徵,如:Standard Width,將8.38改成20,然後切換至試算表看是否
儲存格的欄寬變大了。

Financial Calculation 1-13


Homework
照投影片上的步驟操作一次。

Financial Calculation 1-14


第二章
現金流量與折現

Financial Calculation 2-1


目錄
現金流量與現值
Excel VBA 的計算
變數與資料型態
折現率與複利頻率
Excel VBA 的敘述與運算
Excel VBA 的程式編輯環境

Financial Calculation 2-2


現金流量與現值
 假設目前銀行一年期的存款為6%,如果你投資此定期存單
100元 ,則一年後可以收到本利和是106元,
100  (1  6%)  106. (2.1)

 換個角度看,此項投資一年後帶給你106元的現金流量,但
是目前的價值是100元,這是因為你可以在市場上用100元
購入此定期存單。因此,隱含的折現率為y,可由下式求得:
106
 100  y  6%. (2.2)
1 y
1 一般化
 可改寫成: 100  106  PV  DFt  CFt . (2.3)
1  6%

Financial Calculation 2-3


Excel VBA 的計算(1/3)
 將初步說明Excel VBA撰寫程式的步驟,並以 (2.3) 為例子。
 開啟Excel程式,按『Alt+F11』進入VBA的編輯環境,點選左上方
《專案總管》中的《工作表1 (工作表1)》兩下,右方出現《工作表1
(程式碼)》編輯區 ,如下圖。

Financial Calculation 2-4


Excel VBA 的計算(2/3)
 由功能選單中勾選『插入/程序』,在名稱中輸入”Test”,按『確定』,
自動產生程式碼。

Financial Calculation 2-5


Excel VBA 的計算(3/3)
 輸入下面的程式碼:
1. Public Sub Test()
2. CF = 106 '一年後的現金流量
3. y = 0.06 '一年期的折現率
4.
5. P = CF / (1+y) '目前的現值
6.
7. MsgBox P '將計算值以對話盒顯示
8. End Sub

 將游標放在,Public Sub Test() 至 End Sub


間, 勾選功能選單中『執行/執行 Sub 或
Userform』,或直接按『F5』快捷鍵。

 執行後,出現對話盒,顯示現值100元。

Financial Calculation 2-6


變數與資料型態(1/6)
 變數名稱的命名規則如下:
 變數名稱可以是中文字、英文字、或中英文混合,長度不
可超過255個字元(一個中文字佔2個字元)。
 變數名稱的字首不可以是0 ~ 9 + - * / @ ! $ % . 等特殊字元。
 變數名稱可以包含底線 “_”,但不可包含空白。
 變數名稱不可以使用關鍵字。所謂“關鍵字”就是程式語言
或作業系統內已經指定用途之字句,不可用來做為變數名
稱,否則將造成錯誤。
 變數名稱最好以能夠代表該資料意義文字來命名,如此可
提高變數的可讀性。
 如果變數名稱內包含英文字、字母的大小寫都是代表同一
個變數。

Financial Calculation 2-7


變數與資料型態(2/6)
 變數的宣告:
 Dim 變數名稱 [As 資料型態]
• 較常用
 Public 變數名稱 [As 資料型態]
 Static 變數名稱 [As 資料型態]
 Private 變數名稱 [As 資料型態]

 在[ ] 內的部份是可省略的,當省略時,變數會被
宣告成變量型態(Variant)的變數,其內容可以是數
值、文字、日期、物件等。

Financial Calculation 2-8


變數與資料型態(3/6)
 變數宣告、資料型態及有效範圍:
資料型態宣 佔記憶體大
資料型態名稱 變數宣告說明 資料內容有效範圍
告字元 小 (Bytes)
Boolean 布林值 Dim ExpFg As Boolean 2 Ture / False
Dim Connter As Integer
Integer 整數 % 2 -32,768 ~ 32,767
Dim Connter%
Dim Total As Long
Long 長整數 & 4 -2,147,483,648 ~ 2,147,483,647
Dim Total&
Dim Rate As Single 負值:-3.402823E38 ~ -1.401298E-45
Single 小數點 ! 4
Dim Rate! 正值:1.401298E-45 ~ 3.402823E38
負值:-1.79769313486232E308 ~
Dim DF As Double -4.94065645841247E-324
Double 長小數點 # 8
Dim DF# 正值:4.94065645841247E-324 ~
1.79769313486232E308
Dim NPA As Currency -922,337,203,685,477.5808 ~
Currency 貨幣單位 @ 8
Dim NPA@ 922,337,203,685,477.5807
Dim CallPutFg As String 固定長度 0 ~ 65,535 (2^16) Bytes
String 字串 $
Dim CallPutFg$ 可變動長度 0 ~ 2^31 Bytes
日期:Jan 1, 100 ~ Dec 31, 9999
Date 日期 Dim Maturity As Date 8
時間:0:00:00 ~ 23:59:59
視資料內容
Variant 變量 Dim Temp As Variant 其內容可是數值、字串、日期、物件
而定

Financial Calculation 2-9


變數與資料型態(4/6)
 由於不同的資料型態將佔用不同的記憶體大小,會影響記
憶體的分配及執行運算速度,所以在選用上必須明確且審
慎。
 當數值型態的資料被轉換成Boolean資料型態時,只有0被轉
換成False,其他非0的值將被轉換成True。
 當Boolean資料型態的資料被轉換成數值型態時,False 會被
轉換成0,True則被轉換成-1。
 Currency資料型態是一小數點之前最多可以顯示15位數字,
而小數點後面則只能顯示4位數字。
 固定長度的字串變數所佔記憶體的大小是根據該字串變數所
宣告的長度為準(1 Byte / 字元)。可變動長度的字串變數所
佔記憶體的大小是根據該字串變數內容的長度再加上10
Bytes。

Financial Calculation 2-10


變數與資料型態(5/6)
 VBA的常數:不同於變數,因變數的內容可能因程序的執
行而改變,但常數的內容並不會因程序執行而變。
 內建常數:
• Excel 內建常數:以”xl”開頭,例如:xlAverage、xlOn。
• VBA 內建常數:以”vb”開頭,例如:vbYes、vbYesNo。
• MsForm 內建常數:以”fm”開頭,例如:fmIMEModeOn。
 自訂常數:
• Public Const 常數名稱 [As 資料型態] = 常數值
• Public Const 常數名稱 [資料型態宣告字元] = 常數值
• Const 常數名稱 [As 資料型態] = 常數值
• Const 常數名稱 [資料型態宣告字元] = 常數值
– Const PI as Double = 3.1415926
• 若沒宣告資料型態,將會被視為與常數值最相近的資料型態。
– Const PI = 3.1415926 ‘PI屬於Double資料型態

Financial Calculation 2-11


變數與資料型態(6/6)
 程式註解:在程序或函數加上適當的說明文字,
可提高可讀性。Visual Basic 語言提供兩種註解方
式:
 Rem 註解文字內容:
• 以 Rem 做為註解文字內容的開端時,這些註解文字與Rem之間
必須空一格。
– Rem PI屬於Double資料型態
• 若註解文字加在指令敘述後面時,Rem與指令敘述之間必須要
用冒號(:) 隔開。
– Const PI = 3.1415926: Rem PI屬於Double資料型態
 ‘ 註解文字內容:
• 較常用且簡單
– Const PI = 3.1415926 ‘PI屬於Double資料型態
Financial Calculation 2-12
折現率與複利頻率(1/2)
 金融市場上計算利息的頻率,會因到期日的長短,以及適用的工具有
所不同。
 到期日為一年以內的市場,稱之為貨幣市場,以單利方式折現。
(2.3) 的折現因子將變成:
1
DFt  (2.4)
Act
1  yt 
365
其中 Act 表示實際天數。
 到期日為一年以上的市場,稱之為資本市場,以複利方式折現。

1
DFt  Act
(2.5)
1  yt  365

 (2.4)與(2.5) 針對新台幣的折現方式,並不適用於美元。因美元市場是
以一年360天來計息。

Financial Calculation 2-13


折現率與複利頻率(2/2)
 市場上針對一些商品,主要是衍生性商品,其折現採取連續複利。
 連續複利:將複利的週期由一般複利的一年,不斷的減少到一小時、
一分鐘至一秒鐘,以此概念可將折現因子表示為
1
DFt  lim Act
. (2.6)
n  n
 yt  365
 1  
 n
 根據數學的自然指數 e 的定義
bn
 a
e  lim 1   .
ab
(2.7)
n 
 n
 (2.6) 可表示為
Act
 yt 
DFt  e 365
. (2.8)

Financial Calculation 2-14


Excel VBA 的敘述與運算(1/8)
01 Public Sub Test()
02 Dim CF As Double
 VBA的敘述:
03 Dim y As Double  02, 03, 04:宣告敘述
04 Dim P As Double
 06, 07:指定運算
05
06 CF = 106  09:算數運算
07 y = 0.06  11:函數呼叫
08
09 P = CF / (1 + y)  運算子區分:
10
 數值運算子:針對數值作指定運算的符號或字組。
11 MsgBox P
12 End Sub • 算術運算子
• 比較運算子
• 邏輯運算子
 字串運算子:結合字串的運算。
• “&” 運算子

Financial Calculation 2-15


Excel VBA 的敘述與運算(2/8)
 算術運算子:
運算子 說明 表示方式 X = 15, Y = 2 結果
^ 指數 X^Y 15 ^ 2 225
* 乘法 X*Y 15 * 2 30
/ 除法 X/Y 15 / 2 7.5
\ 整數除法 X\Y 15 \ 2 7
Mod 餘數除法 X mod Y 15 mod 2 1
+ 加法 X+Y 15 + 2 17
- 減法 X-Y 15 - 2 13

 整數除法運算子 ( \ ):執行整數除法之前,會先將被除數及除數四
捨五入成 Integer 或 Long 的資料型態,運算結果的小數點部分將被
無條件捨去,所以傳回的結果是一個屬於 Integer 或 Long 資料型態
的數值。
 取餘數的算術運算子 ( mod ):運算結果是傳回整數除法所得到的
餘數。
Financial Calculation 2-16
Excel VBA 的敘述與運算(3/8)
 比較運算子:可用來比較數值或字串,結果有兩種情況:
 成立時,傳回真(True 或 -1)。
 不成立時,傳回偽(False 或 0)。

運算子 說明 表示方式 結果

= 等於 X=Y 10 = 10 True 或 -1

<> 不等於 X<>Y 10 < > 10 True 或 -1

< 小於 X<Y "Ab" < "AB" False 或 0

> 大於 X>Y "Ab" > "AB" True 或 -1

<= 小於等於 X<=Y 100 < = 10 False 或 0

>= 大於等於 X>=Y 100 > = 10 True 或 -1

Financial Calculation 2-17


Excel VBA 的敘述與運算(4/8)
 邏輯運算子:可用來做邏輯值的運算,常用的有NOT、
AND、OR 三種。
 F (False):表示變數內容是偽 (False, 0)、或邏輯運算的結果不成立。
 T (True):表示變數內容是真 (True, -1)、或邏輯運算的結果成立。
 非 (NOT):傳回與運算前相反的結果。
 且 (AND):各元素都是真 (True) 的情況下,傳回真 (True);只要有
一個元素是偽 (False) 時,傳回偽 (False) 。
 或 (OR):只要有一個元素是真 (True) 時,傳回真 (True)。

非 且 或
A B NOT A A AND B A OR B
F F T F F
F T T F T
T F F F T
T T F T T

Financial Calculation 2-18


Excel VBA 的敘述與運算(5/8)
 “&” 運算子:
 例如,宣告 tmp1, tmp2, tmp3, tmp4為變異數型態的變數

Dim tmp1, tmp2, tmp3, tmp4


tmp1 = "50"
tmp2 = 50
tmp3 = tmp1  tmp2
tmp4 = tmp1& tmp2

 執行結果:
• tmp3的內容是100,資料型態是”Double”。
• tmp4的內容是”5050”,資料型態是”String”。

Financial Calculation 2-19


Excel VBA 的敘述與運算(6/8)
 折現計算程式碼:使用輸入對話盒由程式外部取得資料
 InputBox 函數的引數會成為對話盒的提示文字。
 單利計算的程式碼:輸入金額100,折現率0.04,到期日數182,得
到現值98.0445。
單利計算的程式碼:
Public Sub Test_1()
Dim CF As Double
Dim y As Double
Dim T As Double
Dim P As Double

CF = InputBox("Input Cah Flow Amount: ")


y = InputBox("Input Discount Rate: ")
T = InputBox("Input Time to Maturity(in Days): ")

P = CF / (1 + y * T / 365)

MsgBox P
End Sub

Financial Calculation 2-20


Excel VBA 的敘述與運算(7/8)
 折現計算程式碼 (Cont.):
 複利計算的程式碼:輸入金額100,折現率0.04,到期日2年,得到
現值92.4556。
複利計算的程式碼:
Public Sub Test_2()
Dim CF As Double
Dim y As Double
Dim T As Double
Dim P As Double

CF = InputBox("Input Cah Flow Amount: ")


y = InputBox("Input Discount Rate: ")
T = InputBox("Input Time to Maturity(in Years): ")

P = CF / (1 + y ) ^ T

MsgBox P
End Sub

Financial Calculation 2-21


Excel VBA 的敘述與運算(8/8)
 折現計算程式碼 (Cont.):
 使用電腦計算能力,求得連續複利中使用的常數 – 自然指數e。
• 輸入不同N值,可看到逼近的現象。
N 10 100 1000 10^4 10^5 10^6 10^9
2.593742 2.704814 2.716924 2.718146 2.718268 2.718280 2.718282

連續複利計算的程式碼:
Public Sub ExpApproximate ()
Dim N As Double
Dim ans As Double

N = InputBox("Input N: ")

ans = (1 + 1 / N ) ^ N

MsgBox ans
End Sub

Financial Calculation 2-22


Excel VBA 的程式編輯環境
 要設定Excel VBA的程式編輯環境:可勾選功能表指令
『工具/選項』。
 編輯器選項
 撰寫風格選項
 一般選項
 停駐選項

 求助功能:功能表指令『說明/Micorsoft Visual Basic 說明』


或快速鍵『F1』。

Financial Calculation 2-23


Homework
照投影片上的步驟及程式操作一次。
使用 InputBox 函數寫下面程式:
CAPM: r  r   (r  r ).i f m f

D E
WACC: WACC 
V
r 
V
r. D E

2
C
NPV: NPV  C   (1  r ) . 0
t 1
t
t

 輸入不同 x 值,看逼近的現象。
X 0.1 0.01 0.001 10^-4 10^-5 10^-6 10^-9
1
 e  lim 1  x  .
x
x 0

Financial Calculation 2-24


第三章

常態分配與對數常態分配

Financial Calculation 3-1


目錄
常態分配的機率密度函數
VBA 的常用函數
VBA 的程序與函數
累積機率密度函數
條件敘述 If-Then-Else
Excel 的物件模型
VBA 試算表的讀寫
迴圈敘述 For-Next

Financial Calculation 3-2


常態分配的機率密度函數
 假設目前股票價格為S0,一個月後股價為ST,一個月後股
價在取對數後服從常態分配:
Ln(ST ) ~ N ( ,  2 ), (3.1)
其中𝜇:平均數;𝜎:標準差。

 𝑋~𝑁 𝜇, 𝜎 2 的機率密度函數:
( x   )2
1 
f ( X | X  x)  e 2 2
. (3.2)
2
 𝑋~𝑁 0, 1 為標準常態分配之機率密度函數:
x2
1 2
f ( X | X  x )  ( x)  e . (3.3)
2
Financial Calculation 3-3
VBA 的常用函數(1/3)
 區分四大類:數值函數、文字函數、日期函數及輸出、入
函數。
 數值函數:
數值函數 指令
ye x
Exp(x)
y  log( x) Log(x)
y x Sqr(x)
y  xz Pow(x, z)
y x Abs(x)
將字串轉換成數值 Val(x)
y  Round  數值 , 指定位置 
將數值根據指定位置進行四捨五入後值傳回 Round(x)
(i) 若未指定位置,以小數點位置進行四捨五入 Round(x, n)
(ii)若指定位置(n  1),表示將小數點之後n位數進行四捨五入
y   x ,高斯函數
 Int(x)
傳回小於或等於指定數值的整數

Financial Calculation 3-4


VBA 的常用函數(2/3)
 文字函數: 文字函數 指令
將數值型態的資料轉換成字串型態 Str(x)
根據指定的ASCII值傳回相對應的字元 Chr(x)
傳回字串變數內容的長度
Len(x)
一個字 1 Byte(不管中文或英文字都一樣)
傳回字串變數內容的長度
LenB(x)
一個字 2 Bytes(不管中文或英文字都一樣)

 日期函數:
日期函數 指令
傳回系統日期,也就是電腦今天的日期 Date
傳回系統現在的日期與時間 Now
將指定的日期的西元年份傳回 Year(Date)
將指定的日期的月份(1-12)傳回 Month(Date)
將指定的日期的日(1-31)傳回 Day(Date)

 輸出、入函數:
輸出、入函數 指令
將傳入的字串顯示在對話盒中, MsgBox
將傳入的字串為提示,顯示一對話盒等待使用者輸入文字,並傳回此輸入的字串 InputBox

Financial Calculation 3-5


ASCII 字元表

Financial Calculation 3-6


VBA 的常用函數(3/3)
 將標準常態分配機率密度函數寫成程式碼:
x2
1 
f ( X | X  x )  ( x)  e 2
. (3.3)
2
 Example 3.1:
Const Pi = 3.14159265358979
Public Sub PdfTest()
Dim x As Double
Dim pdf As Double

x = Val(InputBox("Input the point to calculate probability: "))

pdf = Exp(-x ^2 / 2) / Sqr(2 * Pi)

MsgBox "The probability at " + Str(x) + " is " + Str(pdf)


End Sub
(Book1.xls)
Financial Calculation 3-7
VBA 的程序與函數
 Sub 程序:由一些VBA 敘述組成,執行Excel某一
件特定的工作。
 Sub 程序允許在工作表中以巨集方式執行。
• 函數程序則不行。

 函數(Function)程序:由一些VBA 敘述組成,執行
計算工作並可傳回一個資料。
 函數程序在執行結束時,可以透過將資料指定函數名稱
的方式傳回資料。
• Sub 程序則沒有此功能。

Financial Calculation 3-8


Sub 程序
 程序的架構:
[Private|Public] Sub 函數名稱 (傳遞的參數) [As 資料型態]

變數宣告區段

指令敘述組合

函數名稱  運算式

End Sub

 [Private|Public]:
 Public(預設值):使用此宣告程序除了可被該模組內其他程序呼叫執行,
還可被專案內其他模組呼叫執行。
 Private:只能被該模組內其他程序呼叫執行。
 傳遞的參數:傳遞多個參數時,要用逗號 ”,” 隔開。
 傳值:(Passed by Value, ByVal)
 傳址(預設值):(Passed by Address, Passed by Reference, ByRef)

Financial Calculation 3-9


函數程序(1/3)
 函數的架構:
[Private|Public] Function 函數名稱 (傳遞的參數) [As 資料型態]

變數宣告區段

指令敘述組合

函數名稱  運算式

End Function

 傳遞的參數:傳值呼叫、傳址呼叫

 函數名稱:內容最後透過指定敘述 ”=”,將運算的結果指
定給函數名稱,然後再傳回給呼叫這個函數的程序或函數

Financial Calculation 3-10
函數程序(2/3)
 Example 3.2:一個用來計算圓面積的函數,另一個則用來
呼叫函數的Main程序。
Public Function CircleArea(radius As Double)
CircleArea = 3.1415 * radius ^ 2
End Function

Public Sub Main()


Dim r As Double

r = Val(InputBox("Input circle Radius:"))

MsgBox "The area of a circle with radius " & Str(r) & " is " & CircleArea(r)
End Sub
(Book4.xls)

Financial Calculation 3-11


函數程序(3/3)
 Example 3.3:將example 3.1程式用函數改寫。
Public Function NorPdf(d As Double) As Double
Const Pi = 3.14159265358979
NorPdf = Exp(- d * d / 2) / Sqr(2 * Pi)
End Function

Public Sub PdfTest_1()


Dim x As Double
Dim pdf As Double

x = Val(InputBox("Input the point to calculate probability: "))


pdf = NorPdf(x)

MsgBox "The probability at " + Str(x) + " is " + Str(pdf)


End Sub
(Book1.xls)

Financial Calculation 3-12


累積機率密度函數
 標準常態分配的累積機率密度函數:
x2
d1 1 
N (d1 )   e 2
dx. (3.4)

2

 對於𝑁(𝑥)可用多項式來求近似值:۞

1   a1k  a2 k  a3k   N '( x), x  0,


 2 3

N ( x)   (3.5)
1  N ( x),
 x  0.
1
其中𝑘 = ,𝛼 = 0.33267, 𝑎1 = 0.4361836,
1+𝛼𝑥
1 2 /2
𝑎2 = −0.1201676, 𝑎3 = 0.9372980, 且 𝑁′ 𝑥 = 𝑒 −𝑥 .
2𝜋

Financial Calculation 3-13


條件敘述 If-Then-Else (1/6)
 單一選擇:根據單一個條件的成立與否來決定程式的執行流程。
 單行敘述:If (測試條件) Then 敘述組合
 多行敘述:If (測試條件) Then
敘述組合
End If
 Example 3.4:用一個簡單的例子來說明單一選擇條件敘述。
Public Sub HelloTest()
If Time <= 0.5 Then
MsgBox "Good Morning”
MsgBox "Current Time is " + Str(Time)
End If
If Time > 0.5 Then
MsgBox "Good Afternoon"
MsgBox "Current Time is " + Str(Time)
End If
End Sub
(Book4.xls)
Financial Calculation 3-14
條件敘述 If-Then-Else (2/6)
 雙重選擇:
 單行敘述:If (測試條件) Then 敘述組合1 Else 敘述組合2
 多行敘述:If (測試條件) Then
敘述組合1
Else
敘述組合2
End If
 Example 3.5: 將example 3.4 修改成雙重選擇。
Public Sub HelloTest_1()
If Time <= 0.5 Then
MsgBox "Good Morning“
MsgBox "Current Time is " + Str(Time)
Else
MsgBox "Good Afternoon"
MsgBox "Current Time is " + Str(Time)
End If
End Sub
(Book4.xls)
Financial Calculation 3-15
條件敘述 If-Then-Else (3/6)
 多重選擇: If (測試條件1) Then
敘述組合1
Else
If (測試條件2) Then
敘述組合2
Else
敘述組合3
End If
敘述組合4
End If
 Example 3.6: 將example 3.5 修改成多重選擇。
Public Sub HelloTest_2()
If Time <= 0.5 Then
MsgBox "Good Morning"
MsgBox "Current Time is " + Str(Time)
Else
If Time <= 0.75 Then
MsgBox "Good Afternoon"
MsgBox "Current Time is " + Str(Time)
Else
MsgBox "Good Evening"
MsgBox "Current Time is " + Str(Time)
End If
End If
End Sub
(Book4.xls)
Financial Calculation 3-16
條件敘述 If-Then-Else (4/6)
 Example 3.7 (利息計算方式的判斷):寫一個由外部輸入現金流量的日
期後,根據此日期,判斷要用單利公式或是複利公式去計算。
Public Sub DiscountTest()
Dim CF As Double
Dim Maturity As Date
Dim Rate As Double
Dim Today As Date
Dim P As Double

CF = InputBox(“CF Amount”)
Maturity = InputBox(“CF Maturity (西元/月/日)”)
Rate = InputBox(“Discount Rate”)
Today = Date

If (Maturity < (Today + 365)) Then


P = CF / (1 + Rate * (Maturity - Today) / 365)
Else
P = CF / ( (1 + Rate) ^ ( (Maturity - Today) / 365) )
End If
MsgBox P
End Sub
(Book2.xls)

Financial Calculation 3-17


條件敘述 If-Then-Else (5/6)
 Example 3.8:將example 3.7的單利公式及複利公式單獨寫成函數,然
後主程式呼叫這些函數。
Public Sub DiscountTest_1()
Dim CF As Double
Dim Maturity As Date
Dim Rate As Double
Dim Today As Date
Dim P As Double

CF = InputBox(“CF Amount”)
Maturity = InputBox(“CF Maturity (西元/月/日)”)
Rate = InputBox(“Discount Rate”)
Today = Date

If (Maturity < (Today + 365)) Then


P = SimpInt(CF, Maturity - Today, Rate)
Else
P = CompInt(CF, Maturity - Today, Rate)
End If
MsgBox P
End Sub

Public Function SimpInt(CF As Double, T As Date, y As Double) As Double


SimpInt = CF / (1 + y * T / 365)
End Function

Public Function CompInt(CF As Double, T As Date, y As Double) As Double


CompInt = CF / (1 + y) ^( T / 365)
End Function
(Book2.xls)
Financial Calculation 3-18
條件敘述 If-Then-Else (6/6)
 Example 3.9:寫(3.4)累積機率密度函數。
Const Pi = 3.14159265358979
Public Sub DiscountTest_1()
Dim x As Double
Dim cdf As Double
x = Val(InputBox(“Input the point to calculate CDF:”))
cdf = NorCdf(x)
MsgBox “The CDF at ” + Str(x) + “ is ” + Str(cdf)
End Sub

Public Function NorPdf(d As Double) As Double


NorPdf = Exp(-d * d /2 ) / Sqr(2 * Pi)
End Function

Public Function NorCdf(d As Double) As Double


Dim g As Double, ans As Double
Const a1 = 0.4361836
Const a2 = -0.1201676
Const a3 = 0.937298
g = 1 / (1 + 0.33267 * d)
If d >= 0 Then
ans = 1 – (a1 * g + a2 * g ^2 + a3 * g ^3) * NorPdf(d)
Else
ans = 1 – NorCdf(-d)
End If
NorCdf = ans
End Function
(Book1.xls)
Financial Calculation 3-19
Excel 的物件模型
 由於 Excel 本身的設計概念,即是採取物件導向的
方法,因此,要先對物件導向的方法論有所認識,
才能容易的操弄 Excel Worksheet 上的資料。
物件模型
屬性
方法
事件
物件的語法

Financial Calculation 3-20


物件模型
 什麼是”物件”?
 代表現實世界中的一個實體
• 電腦、電視機、你、我等。
 一個物件也可包含其他物件
• 電腦的主機板、鍵盤、滑鼠等物件。
 物件也可代表一個抽象的實體
• 應用程式,如:Excel。
• 在VBA中以Application物件代表Excel應用程式。
 其中與工作表有關的物件,大約有100種。
• 包含代表活頁簿的Workbook物件、代表工作表的Worksheet物件、代
表圖表的Chart物件、代表儲存格範圍的Range物件等。
 有些物件並不是單獨一個存在
• 可以在Excel同時開啟許多活頁簿。
• 一個活頁簿中,也可以打開許多工作表。

Financial Calculation 3-21


屬性
 在Excel內的每一個物件都有它們自已的屬性,而
與工作表相關物件的屬性依名稱來計算,大約有
900種不同的屬性。
 工作表內的作用儲存格便是一個屬性(ActiveCell)。
 工作表指定儲存格的值也是一個屬性(Value)。
 代表工作表名稱的Name屬性。

 部份工作表的物件屬性可由VBA的屬性視窗中看
到。

Financial Calculation 3-22


方法
 物件完成一項處理的過程稱為方法,方法其實是
每一個物件本身具備的功能。

 如果用名稱來分類,Excel提供了大約300種與工作
表有關的物件所能使用的方法。
 代表工作簿內儲存格範圍的Range物件,便有常用的
『複製』、『剪下』、『貼上』、『插入』、『尋找』
等方法。

Financial Calculation 3-23


事件
 事件是指一個對物件本身特別需要關注的狀態或
訊息。

 如果用名稱來分類,Excel提供了大約48種與活頁
簿、工作表、圖表等物件所能使用的事件。
 代表選取工作表內不同儲存格範圍的SelectionChange事

 代表作用工作表被切換為非作用工作表的Deactivate事
件等。

Financial Calculation 3-24


物件的語法
 中間用 “.”來隔開。下面範例中,ActiveCell代表目
前被選定的儲存格。
 物件.屬性
• ActiveCell.Value
• ActiveCell.Font.Name
• ActiveCell.Font.Size
• ActiveCell.Font.Color
 物件.方法
• ActiveCell.Copy
• ActiveCell.Cut
• ActiveCell.Find

Financial Calculation 3-25


VBA 試算表的讀寫(1/11)
 Excel 的物件參照:指透過物件的從屬關係,涉出
欲處理的資料。
 處理Book1中Sheet1上A1格的資料
• Application.Workbooks(“Book1”).Worksheets(“Sheet1”).Range(“A1”)

 VBA code與工作表都在Excel應用程式內,可簡化:
• Workbooks(“Book1”).Worksheets(“Sheet1”).Range(“A1”)

 VBA code在Book1專案下,可簡化:
• Worksheets(“Sheet1”).Range(“A1”)

Financial Calculation 3-26


VBA 試算表的讀寫(2/11)
 Range 物件的Value屬性:
 Range 物件是操弄資料中最重要的基本物件,它的Value屬性就是
儲存格內資料的值。
Sub ChangeValue()
Dim Content As Single
Content = InputBox(“Enter a Value”)
Worksheets(“Sheet1”).Range(“A1”).Value = Content
End Sub
此時A1格出現我們輸入的值

Sub ShowValue()
Dim Content As Single
Content = Worksheets(“Sheet1”).Range(“A1”).Value
MsgBox Content
End Sub
將資料值由A1格Value的屬性讀出,以輸出盒顯示

Sub SetValue()
ChangeValue
ShowValue
End Sub
(Book5.xls)
Financial Calculation 將兩個程序合併執行 3-27
VBA 試算表的讀寫(3/11)
 常用範圍物件:
物件 格式 範例

Range Range(範圍區間) Range("A1:A5")


Range("PriceList")
整列:Range("3:3")
整行:Range("D:D")

Cells Cells(列, 行) C2儲存格:Cells(2,3)


Range(Cells(1,1), Cells(10,10)) = Range("A1:J10")

Offset Offset(列偏移量, 行偏移量) C2儲存格:Range("A1").Offset(1,2)


C2儲存格在A1儲存格下方一列,右方兩欄。
A1儲存格:Range("C2").Offset(-1,-2)
A1儲存格在C2儲存格上方一列,左方兩欄。

Rows Rows(範圍區間) Rows("1:5")


Columns Columns(範圍區間) Columns("A:C")

Financial Calculation 3-28


VBA 試算表的讀寫(4/11)
 常用範圍物件屬性:
屬性 說明 範例
MsgBox
Value 範圍物件的值 Worksheets("Sheet1").Range("A1").Value
Worksheets("Sheet1").Range("A1:C3").Value = 75
將儲存格之值以格式化方式顯示
Text MsgBox Worksheets("Sheet1").Range("A1").Text
Read Only,唯讀屬性,不可更改

MsgBox Range("A1:C3").Count
Count Read Only,顯示範圍內儲存格之數目
共有9個儲存格

MsgBox Sheets("Sheet1").Range("F3").Row
Column 或 Row Read Only,傳回儲存格所在之行或列
第3列

MsgBox Range(Cells(1,1), Cells(5,5)).Address


Address Read Only,顯示儲存格位置
位置為$A$1:$E$5
Font 字型物件 Range("A1").Font.Bold = True
Formula 設定一儲存格內的公式 Range("A13").Formula = "= Sqrt(100)"
NumberFormat 以字串方式顯示數值格式 Columns("A:A").NumberFormat = "0.00%"

Financial Calculation 3-29


VBA 試算表的讀寫(5/11)
 常用範圍物件方法:
方法 說明 範例
選取一個範圍物件,要先 Activate 工作表 Sheets("Sheet1").Activate
Select
選取 A1:C12 Range("A1:C12").Select

Sub copyRange()
Range("A1:A12").Select
Selection.copy
將A1:A12選取,並拷貝至C1格
Range("C1").Select
ActiveSheet.Paste
Copy & Paste End Sub

Sub copyRange1()
直接拷貝A1:A12到C1格 Range("A1:A12").copy Range("C1")
End Sub

Clear 清除 D 行內容 Columns("D:D").Clear


Delete 刪除第6列 Row("6:6").Delete

Financial Calculation 3-30


VBA 試算表的讀寫(6/11)
 Excel 物件之事件與訊息:
 當活頁簿被打開時,一個”Open”訊息變產生。
 點選程式碼視窗左上方選項為Workbook,右上方的下拉選項,便
出現所有可能訊息。

Financial Calculation 3-31


VBA 試算表的讀寫(7/11)
 Excel 物件之事件與訊息:
 同樣的,工作表物件的事件反應程式碼,也可如法炮製。
 點選 Activate 訊息,加入如下的程式碼。

Private Sub Worksheet_Activate()


MsgBox "I am activated!"
End Sub
 一但Sheet1被活化時,即成為目前處理的工作表,此一事件程序便
會被執行。
 回到工作表區,在工作表間切換,一但切換到Sheet1時,是否變出
現下面對話盒。

Financial Calculation 3-32


VBA 試算表的讀寫(8/11)
 Button(按鈕)的事件:
 除了活頁簿與工作表物件,Excel 還有其他物件可供我們使用,為
了後面測試需要,先在Sheet1的程式碼區,輸入下面的程式碼。
Public Sub ButtonTest()
MsgBox “Button is pressed!"
End Sub

 回到工作表區,點選『開發人員/插入/按鈕』,在工作表拖曳出一
個區塊,此時指定巨集的對話框自動出現。
 選取ButtonTest巨集,便將按鈕事件與巨集的執行連結起來。
 爾後,只要按Button便會執行該巨集。

Financial Calculation 3-33


VBA 試算表的讀寫(9/11)
 工作表資料讀寫練習:
 ReadTest與WriteTest 兩個程序使用儲存格的Value屬性,對試算表
上的資料進行讀、寫的操作。
Public Sub ReadTest()
Dim x As Double
x = Worksheets(“Sheet1”).Cells(2, 2).Value ‘由B2格中讀取數值,指定給x變數。
MsgBox Str(x) ‘透過MsgBox函數顯示出來。
End Sub

Public Sub WriteTest()


Dim x As Double
Dim ans As Double
x = Worksheets(“Sheet1”).Cells(2, 2).Value ‘由B2格中讀取數值,指定給x變數。
ans = NorPdf(x) ‘透過呼叫NorPdf函數傳入x值,計算傳回給ans變數。
Worksheets(“Sheet1”).Cells(2, 3).Value = ans ‘ans值寫到B3格中。
End Sub
Const Pi = 3.14159265358979
Public Function NorPdf(d As Double) As Double
Dim ans As Double
ans = Exp(-d * d / 2) / Sqr(2 * Pi)
NorPdf = ans
End Function
(Book2.xls)

Financial Calculation 3-34


VBA 試算表的讀寫(10/11)
 Excel VBA中工作表函數的使用:
 工作表函數物件(WorksheetFunction):在Excel應用程式內的物件。
• 有很多財務計算物件,在VBA中也可使用。
• 使用方式:Application.[WorksheetFunction.]FunctionName()
– 計算內部報酬率:使用 IRR 函數
– 計算隨機變數的標準差:使用 STDEV 函數
– 計算累積機率密度函數:使用 NormSDist 函數
 Application.WorksheetFunction.NormSDist()
 呼叫累積機率密度函數的程式:
Public Sub WorkSheetFcn()
Dim x As Double, y As Double

x = InputBox(“Input x value of CDF”)


y = Application.WorksheetFunction.NormSDist(x)

MsgBox y
End Sub
(Book6.xls/Sheet2)
Financial Calculation 3-35
VBA 試算表的讀寫(11/11)
 在VBA 中撰寫程式碼時,對函數的使用有三種選擇:
 優先,使用VBA函數
 其次,使用工作表函數
 最後,使用自行撰寫函數

 VBA的對數函數為Log(),工作表的對數函數為Ln()。在
VBA中呼叫Log()是最快的,因此不應使用Ln()。

 上面原則中,對於自行撰寫函數部分,可能有判斷空間。
有時Excel提供的函數較不精確,此時自行撰寫便有其必要
性。
 如,Excel 提供的累積機率密度函數 NormSDist,可能精確度上無
法滿足要求,便可以找更好的演算法來自行撰寫需要的函數。

Financial Calculation 3-36


迴圈敘述 For-Next (1/3)
 表示方式: For 計數變數 = 起始值 To 結束值 [Step 遞增量]

指令敘述組合

[Exit for]

Next [計數變數]
n
 累積加總計算的範例: Sum   k .
k 1

Public Sub AddTotal()


Dim k As Integer, N As Integer, Sum As Long
N = 10
Sum = 0
For k = 1 To N Step 1 ‘小到大
Sum = Sum + k
MsgBox Str(k) & “ / ” & Str(Sum)
Next k

MsgBox “Total Sum is : ” & Str(Sum)


End Sub
(Book6.xls)
Financial Calculation 3-37
迴圈敘述 For-Next (2/3)
n
 累積乘數計算的範例: n !   i.
i 1

Public Function Factorial(n As Long) As Long


Dim ans As Long
Dim i As Long
ans = 1
For i = n To 1 Step -1 ‘大到小
ans = ans * i
Next i
Factorial = ans
End Function

Public Sub FactorialTest()


Dim num As Long
num = InputBox("Input the number to calculate factorial:")
MsgBox Factorial(num)
End Sub
(Book3.xls)

Financial Calculation 3-38


迴圈敘述 For-Next (3/3)
 PDF函數工作表讀寫範例:
Public Sub ReadWriteTest()
Dim i As Integer, x As Double, pdf As Double, cdf As Double
For i = 2 To 10
x = Worksheets("Sheet1").Cells(i, 2).Value
pdf = NorPdf(x)
cdf = NorCdf(x)
Worksheets("Sheet1").Cells(i, 3).Value = pdf
Worksheets("Sheet1").Cells(i, 4).Value = cdf
Next i
End Sub
Public Function NorPdf(d As Double) As Double
Dim ans As Double
ans = Exp(-d * d / 2) / Sqr(2 * Pi)
NorPdf = ans
End Function
Public Function NorCdf(d As Double) As Double
Dim ans As Double, g As Double
Const a1 = 0.4361836
Const a2 = -0.1201676
Const a3 = 0.937298
g = 1 / (1 + 0.33267 * d)
If d >= 0 Then
ans = 1 - (a1 * g + a2 * g ^2 + a3 * g ^3) * NorPdf(d)
Else
ans = 1 - NorCdf(-d)
End If
NorCdf = ans
End Function
(Book2.xls)
Financial Calculation 3-39
Homework
 工作表1:照投影片上的步驟及程式操作一次,將
所有程式寫入。
n n
1
 工作表2:給定整數 n 及 m 計算: n 
S 
i 1
i and Sm
n  
k 1 k
.

利用Sub程序
利用Function程序

 工作表3:比照p.3-39的方式,將標準常態
𝑋~𝑁 0, 1 機率密度函數改成𝑋~𝑁 1, 4 的機率密度
函數,計算𝑋~𝑁 1, 4 的PDF及CDF函數工作表讀
寫。
Financial Calculation 3-40
第四章

Black-Scholes定價公式

Financial Calculation 4-1


目錄
歐式股票選擇權定價公式
Black-Scholes 程式與繪圖
發放股利的調整
一般化的選擇權定價公式

Financial Calculation 4-2


歐式股票選擇權定價公式(1/2)
 在Black-Scholes模型中,股票價格假設遵行擴散程序(Diffusion
process),又稱為幾何布朗運動(Geometric Brownian Motion, GBM):
dS
  dt   dW , (4.1)
S
𝑑𝑆 𝑆𝑡+1 −𝑆𝑡
其中 = : 股票的報酬率;
𝑆 𝑆𝑡
𝜇: 單位時間內預期的股價報酬率;
𝜎: 單位時間內預期的股價波動性;
𝑑𝑡: 單位時間;
𝑊~𝑁 0, 𝑡 : 一隨機變數 (Wiener process) ;
𝑑𝑊~𝑁 0, 𝑑𝑡 : 單位時間內,𝑊的變動量。

 衍生性金融商品的價格受到標的資產價格所影響,它的風險來自標的
資產。以股票選擇權為例,買權價格:
C  f ( S , t ). (4.2)
Financial Calculation 4-3
歐式股票選擇權定價公式(2/2)
 歐式買權 (C) 和賣權 (P) 價格公式:
C  SN (d1 )  Ke  rT N (d 2 ), (4.3)
P  Ke  rT N (d 2 )  SN (d1 ), (4.4)
其中
ln( S / K )  (r   2 / 2)T (4.5)
d1  ,
 T
ln( S / K )  (r   2 / 2)T
d2   d1   T ,
 T (4.6)
S:目前股票價格,
K:執行價格,
r:無風險利率,
T:距到期日的時間。
Financial Calculation 4-4
Black-Scholes 程式與繪圖(1/5)
 將之前撰寫的標準常態分配機率密度函數、累積機率密度函數等程式碼,放在Module1
中,以備其他程序的呼叫。
 並將買權及賣權公式寫成函數。
Const Pi = 3.14159265358979
Public Function NorPdf(d As Double) As Double
NorPdf = Exp(- d * d / 2) / Sqr(2 * Pi)
End Function
Public Function NorCdf(d As Double) As Double
Dim ans As Double, g As Double
Const a1 = 0.4361836
Const a2 = -0.1201676
Const a3 = 0.937298
g = 1 / (1 + 0.33267 * d)
If d >= 0 Then
ans = 1 - (a1 * g + a2 * g^2 + a3 * g^3) * NorPdf(d)
Else
ans = 1 - NorCdf(-d)
End If
NorCdf = ans
End Function
Public Function Op_Cvalue(S As Double, K As Double, T As Double, sig As Double, r As Double) As Double
Dim d1 As Double, d2 As Double
d1 = (Log(S / K) + (r + sig^2 / 2) * T) / (sig * Sqr(T))
d2 = d1 - sig * Sqr(T)
Op_Cvalue = S * NorCdf(d1) - K * Exp(-r * T) * NorCdf(d2)
End Function
Public Function Op_Pvalue(S As Double, K As Double, T As Double, sig As Double, r As Double) As Double
Dim d1 As Double, d2 As Double
d1 = (Log(S / K) + (r + sig^2 / 2) * T) / (sig * Sqr(T))
d2 = d1 - sig * Sqr(T)
Op_Pvalue = K * Exp(-r * T) * NorCdf(-d2) - S * NorCdf(-d1)
End Function
Financial Calculation 程式4.1 (Book1.xls/Module1)
4-5
Black-Scholes 程式與繪圖(2/5)
 在Sheet1程式碼區撰寫下面的程式碼,由工作表中讀取資料,並呼叫Module1
中的函數,將結果寫回工作表。
 並放置一個Button如圖,將Button與下面Op_Calculate程序連結。按Button執行
下面程序,計算出選擇權的權利金。

Public Sub OP_Calculate()


Dim S As Double
Dim K As Double
Dim T As Double
Dim sig As Double
Dim r As Double
Dim C_Value As Double
Dim P_Value As Double
S = Worksheets("Sheet1").Cells(2, 1).Value
K = Worksheets("Sheet1").Cells(2, 2).Value
T = Worksheets("Sheet1").Cells(2, 3).Value
sig = Worksheets("Sheet1").Cells(2, 4).Value
r = Worksheets("Sheet1").Cells(2, 5).Value
C_Value = Op_Cvalue(S, K, T, sig, r)
P_Value = Op_Pvalue(S, K, T, sig, r)
Worksheets("Sheet1").Cells(5, 2).Value = C_Value
Worksheets("Sheet1").Cells(5, 3).Value = P_Value
End Sub
程式4.2 (Book1.xls/Sheet1)

Financial Calculation 4-6


Black-Scholes 程式與繪圖(3/5)
合併 Put 與 Call 的計算
 將買權跟賣權的計算公式合併成一個函數,藉由控制變數 z,來決定
計算的是Put 或 Call 的權利金。
 當計算對象是 Call 則 z =1,是 Put 則z = -1。

Public Function BSOption(OpClass As String, S As Double, K As Double, T As Double, sig As Double, r As Double) As Double
Dim d1 As Double, d2 As Double
Dim z As Double
If OpClass = "C" Then
z=1
Else
z = -1
End If
d1 = (Log(S / K) + (r + sig^2 / 2) * T) / (sig * Sqr(T))
d2 = d1 - sig * Sqr(T)
BSOption = z * (S * NorCdf(z * d1) - K * Exp(-r * T) * NorCdf(z * d2))
End Function
程式4.3 (Book1.xls/Module1)

Financial Calculation 4-7


Black-Scholes 程式與繪圖(4/5)
合併 Put 與 Call 的計算 (Cont.)
 程式4.4中,為呼叫程式4.3,分別在計算 Call 與 Put 的第一個參數傳入
“C”或“P”,來決定計算的是Call 或 Put 的權利金。
Public Sub Op_Calculate_1()
Dim S As Double
Dim K As Double
Dim T As Double
Dim sig As Double
Dim r As Double
Dim C_Value As Double
Dim P_Value As Double
S = Worksheets("Sheet2").Cells(2, 1).Value
K = Worksheets("Sheet2").Cells(2, 2).Value
T = Worksheets("Sheet2").Cells(2, 3).Value
sig = Worksheets("Sheet2").Cells(2, 4).Value
r = Worksheets("Sheet2").Cells(2, 5).Value
C_Value = BSOption("C", S, K, T, sig, r)
P_Value = BSOption("P", S, K, T, sig, r)
Worksheets("Sheet2").Cells(5, 2).Value = C_Value
Worksheets("Sheet2").Cells(5, 3).Value = P_Value
End Sub
程式4.4 (Book1.xls/sheet2)
Financial Calculation 4-8
Black-Scholes 程式與繪圖(5/5)
 利用 For…Next 迴圈,連續計算在不同的資產價格下,買權與賣權的權利金,
並以 Excel 的繪圖功能,畫出Call 與 Put 的價格線圖。

Public Sub OP_Calculate()


Dim i As Integer
Dim S As Double
Dim K As Double
Dim T As Double
Dim sig As Double
Dim r As Double
Dim C_Value As Double
Dim P_Value As Double
K = Worksheets("Sheet1").Cells(1, 2).Value
T = Worksheets("Sheet1").Cells(2, 2).Value
sig = Worksheets("Sheet1").Cells(3, 2).Value
r = Worksheets("Sheet1").Cells(4, 2).Value
For i = 2 To 32
S = Worksheets("Sheet1").Cells(i, 3).Value
C_Value = BSOption("C", S, K, T, sig, r)
P_Value = BSOption("P", S, K, T, sig, r)
Worksheets("Sheet1").Cells(i, 5).Value = C_Value
Worksheets("Sheet1").Cells(i, 6).Value = P_Value
Next i
End Sub
程式4.5 (Book2.xls/sheet1)

Financial Calculation 4-9


發放股利的調整(1/3)
間斷股利形式
 如果在到期日前的 t 時 (t < T),股票發放一固定的股利 𝐷𝑡 ,
以無風險利率折現,並由目前股價中扣除此股利的現值,
股利調整過的目前資產價格:
𝑆𝐷 = 𝑆 − 𝐷𝑡 𝑒 −𝑟𝑡 . (4.7)

 考量股利後的選擇權價格:
𝐶 = 𝑆𝐷 𝑁 𝑑1 − 𝐾𝑒 −𝑟𝑇 𝑁 𝑑2 , (4.8)
𝑆𝐷 𝜎2
ln 𝐾
+ 𝑟+ 2 𝑇
𝑑1 = ,
𝜎 𝑇
𝑑2 = 𝑑1 − 𝜎 𝑇.

Financial Calculation 4-10


發放股利的調整(2/3)
間斷股利形式 (cont.)
 程式4.6為間斷股利選擇權計算範例。 Public Sub Op_Calculate_2()
Dim S As Double
Dim Sd As Double
Dim K As Double
Dim T As Double
Dim sig As Double
Dim r As Double
Dim D As Double
Dim td As Double
Dim C_Value As Double
Dim P_Value As Double
S = Worksheets("Sheet3").Cells(2, 1).Value
K = Worksheets("Sheet3").Cells(2, 2).Value
T = Worksheets("Sheet3").Cells(2, 3).Value
sig = Worksheets("Sheet3").Cells(2, 4).Value
r = Worksheets("Sheet3").Cells(2, 5).Value
D = Worksheets("Sheet3").Cells(2, 6).Value
td = Worksheets("Sheet3").Cells(2, 7).Value
Sd = S - Exp(-r * td)
C_Value = BSOption("C", Sd, K, T, sig, r)
P_Value = BSOption("P", Sd, K, T, sig, r)
Worksheets("Sheet3").Cells(5, 2).Value = C_Value
Worksheets("Sheet3").Cells(5, 3).Value = P_Value
End Sub
程式4.6 (Book1.xls/sheet3)

Financial Calculation 4-11


發放股利的調整(3/3)
連續股利形式 Public Sub Op_Calculate_3()
Dim S As Double
 對於一個發放連續固定股利比率 y Dim K As Double
的股票,可調整為: Dim T As Double
Dim sig As Double
𝑆𝑦 = 𝑆𝑒 −𝑦𝑇 . (4.9) Dim r As Double
Dim y As Double
Dim C_Value As Double
Dim P_Value As Double
 帶入 Black-Scholes 公式取代S, S = Worksheets("Sheet4").Cells(2, 1).Value
便可得連續股利的選擇權價格。 K = Worksheets("Sheet4").Cells(2, 2).Value
T = Worksheets("Sheet4").Cells(2, 3).Value
sig = Worksheets("Sheet4").Cells(2, 4).Value
r = Worksheets("Sheet4").Cells(2, 5).Value
 程式4.7為連續股利選擇權範例。 y = Worksheets("Sheet4").Cells(2, 6).Value

Sy = S * Exp(-y * T)

C_Value = BSOption("C", Sy, K, T, sig, r)


P_Value = BSOption("P", Sy, K, T, sig, r)

Worksheets("Sheet4").Cells(5, 2).Value = C_Value


Worksheets("Sheet4").Cells(5, 3).Value = P_Value
End Sub
程式4.7 (Book1.xls/sheet4)

Financial Calculation 4-12


一般化的選擇權定價公式(1/2)
 (4.9) 的連續固定股利比率 y,可以解釋為標的資產的收益
率,便可適用於外幣選擇權和債券選擇權,其選擇權價格:

𝐶 = 𝑆𝑦 𝑁 𝑑1 − 𝐾𝑒 −𝑟𝑇 𝑁 𝑑2 , (4.10)
𝑃 = 𝐾𝑒 −𝑟𝑇 𝑁 −𝑑2 − 𝑆𝑦 𝑁 −𝑑1 , (4.11)

𝑆𝑦 𝜎2 𝑆𝑒−𝑦𝑇 𝜎2 𝑆 𝜎2
ln 𝐾
+ 𝑟+ 2 𝑇 ln 𝐾
+ 𝑟+ 2 𝑇 ln 𝐾
+ 𝑟−𝑦+ 2 𝑇
𝑑1 = = = ,
𝜎 𝑇 𝜎 𝑇 𝜎 𝑇
𝑆 𝜎2
ln + 𝑟−𝑦− 𝑇
𝐾 2
𝑑2 = = 𝑑1 − 𝜎 𝑇.
𝜎 𝑇

Financial Calculation 4-13


一般化的選擇權定價公式(2/2)
 程式4.8為 (4.10) 與 (4.11) 一般化選擇權權利金的計算函數。
 當令 y = 0,便會回到不發放股利的 BSOption 計算函數。

Public Function GBSOption(OpClass As String, S As Double, K As Double, T As Double, sig As Double, r As Double, y As Double) As Double
Dim d1 As Double, d2 As Double
Dim z As Double
If OpClass = "C" Then
z = 1#
Else
z = -1#
End If
d1 = (Log(S / K) + (r - y + sig ^2 / 2) * T) / (sig * Sqr(T))
d2 = d1 - sig * Sqr(T)
GBSOption = z * (S * Exp(-y * T) * NorCdf(z * d1) - K * Exp(-r * T) * NorCdf(z * d2))
End Function
程式4.8 (Book1.xls/Module1)

Financial Calculation 4-14


Homework
 照投影片上的步驟及程式操作一次,將所有程式寫
入Book1.xls及Book2.xls。

Financial Calculation 4-15


第五章

波動性的估計

Financial Calculation 5-1


目錄
歷史波動性
VBA 的陣列資料
隱含波動性
迴圈敘述 Do-Loop
二分法尋根
牛頓法尋根

Financial Calculation 5-2


歷史波動性 (1/3)
 股票的波動性 (Volatility),𝜎:衡量一股票所能提供收益率的不
確定性。

 波動性的正確定義:一股票價格的波動性是該股票年收益率的
標準差,且此收益率以連續複利表示。

 𝜎 𝑇:股價在 T 時間內報酬率變動的粗估標準差。

 例如:𝜎 = 0.3或30%/每年,則一年內報酬率變動大約30%;6個
月內報酬率變動的標準差則大約為 30 0.5 = 21.2%;3個月內
報酬率變動的標準差則大約為 30 0.25 = 15%。

 波動性的估計可分為歷史波動性與隱含波動性兩種。
Financial Calculation 5-3
歷史波動性 (2/3)
 利用股票價格變動的紀錄來估計歷史波動性:
n  1: 觀察數目;Si : 第 i 期末之股價; : 每期時間長度(單位:年)。
Si 1
令 ui  , i  1, 2, , n ,ui 標準差的不偏估計 s ,
Si
2
1 n
1 n
1  n 
s  (u j  u )  n  1 
n  1 j 1
2
uj 
2


uj 
j 1 n ( n 1)  j 1 
其中 u 為 ui 的平均數。

由前述可知 ui 的標準差為  ,變數 s 為  之估計,


s
因此  則可由 s * 估計得到 s*  。

s*
 此估計之標準差可證明為大約 。
2n

Financial Calculation 5-4


歷史波動性 (3/3)
 Example: 表5.1.1顯示了一股票連續21天的交易價格。
由於 表5.1.1 股票連續21天的交易價格
20 20 天 收盤股價 相對價格 日報酬率
u
j 1
j  0.01844,  u  0.014425,
j 1
2
j Si+1/Si ui = ln(Si+1/Si)
0 120.875
則日報酬率的標準差可估計得 1 122.875 1.016546 0.016411
2 122.375 0.995931 -0.004077
0.01443 (0.01844) 2 3 127.000 1.037794 0.037097
  0.0275.
20  1 20 19 4
5
126.500
131.375
0.996063
1.038538
-0.003945
0.037814
假設每年有 250個交易日,則  1/ 250. 6 129.625 0.986679 -0.013410
7 134.125 1.034716 0.034127
因此每年之波動性可估得0.0275  250  0.4348. 8 136.875 1.020503 0.020296
9 140.375 1.025571 0.025249
0.4348
該估計之標準差為  0.0687. 10 139.000 0.990205 -0.009843
2  20 11 140.125 1.008094 0.008061
12 140.625 1.003568 0.003562
13 137.375 0.976889 -0.023382
14 130.500 0.949955 -0.051341
 若在一段時間內有發放股利,則報酬率修改為 15 129.750 0.994253 -0.005764
 S  Di  16 129.750 1.000000 0.000000
ui  ln  i 1 . 17 124.500 0.959538 -0.041304
 Si  18 118.000 0.947791 -0.053621
19 121.125 1.026483 0.026138
20 123.125 1.016512 0.016377
Financial Calculation 5-5
Excel 計算範例
 試算表中,B欄先計算資產價格的報酬,C欄在以Ln()函數計算對數報
酬,F7儲存格中用試算表函數STDEV(C5:C24) ,日波動性為2.7537%。
假設一年有250個交易日,乘上 250可得年波動性為43.54%。

Financial Calculation 5-6


VBA的陣列資料 (1/4)
 一維陣列:
 使用ClosePrice(0), ClosePrice(1), …, ClosePrice(20)來表示21個價格
資料。

 在VBA中,可用”(索引)”敘述宣告這21個相關的資料陣列:
• Dim ClosePrice(0 To 20) As Double
• Dim ClosePrice(20) As Double
– 在VBA中預設的索引是從0開始。

 在程式中,可將每一個陣列元素當成一個變數來使用,透過索引與
迴圈的合併應用,可將資料的處理大幅簡化。

Financial Calculation 5-7


VBA的陣列資料 (2/4)
01 Const DayOfYear = 250
 電腦範例: 02 Const NumOfObs = 21
03 Const IndexNum = NumOfObs - 1
 程式5.2.1利用陣列的資料型態, 04 Public Sub CalHisVol()
計算歷史波動性。 05 Dim ClosePrice(IndexNum) As Double
06 Dim LogReturn(IndexNum) As Double
 #05宣告價格陣列 07 Dim Sum As Double, Average As Double
08 Dim Variance As Double
 #06宣告報酬陣列 09 Dim VolDay As Double, VolYear As Double
10 Dim i As Integer
 #11至#13利用迴圈與陣列索引的 11 For i = 0 To IndexNum
變動,自試算表中讀取價格資料。 12 ClosePrice(i) = Worksheets("History Vol").Cells(i + 4, 1).value
13 Next i
 #14至#16利用迴圈與陣列索引的 14 For i = 1 To IndexNum
變動,計算對數報酬率。 15 LogReturn(i) = Log(ClosePrice(i) / ClosePrice(i - 1))
16 Next i
• 注意,對數報酬率的索引是由1 17 Sum = 0
開始,價格資料的索引是由0開 18 For i = 1 To IndexNum
始。 19 Sum = Sum + LogReturn(i)
20 Next i
 #17至#21利用迴圈與陣列索引的變動, 21 Average = Sum / (NumOfObs - 1)
計算對數報酬的平均數,以便於後面 22 Sum = 0
23 For i = 1 To 20
計算波動性。
24 Sum = Sum + (LogReturn(i) - Average) ^ 2
 #22至#26計算對數報酬的變異數。 25 Next i
26 Variance = Sum / (NumOfObs - 2)
• 注意, #26是除以19以得到不偏 27 VolDay = Sqr(Variance)
估計值。 28 VolYear = VolDay * Sqr(DayOfYear)
29 MsgBox "Daily Volatility is " + Str(VolDay)
30 MsgBox "Annual Volatility is " + Str(VolYear)
31 End Sub
程式5.1 (Black_Scholes.xls/Sheet2)
Financial Calculation 5-8
VBA的陣列資料 (3/4)
 一維陣列宣告:一組具有相同資料型態的資料,以矩陣方
式來儲存資料,每一筆資料都有獨一的索引可加以辨識。
 陣列宣告
• Dim ArrayName(num) As DataType
 範例
• Dim array_1(11) As Float
• Dim array_1!(11)
– 代表單精準度陣列,12筆資料,分別為array_1(0), array_1(1),…, array_1(11)。
 可以Option Base # 敘述改變基底為 #,預設索引基底為0。
• Option Base 1
• Dim array_2(12) As Float
 可以明確指定索引的上、下限。
• Dim array_3(10 To 21) As Float

Financial Calculation 5-9


VBA的陣列資料 (4/4)
 多維陣列宣告格式:多維陣列的宣告類似一維陣列,維度
之間以逗號隔開。
 陣列宣告
• Dim array_2D(2, 3) As Float
• 由於索引基底由0開始,因此共有12筆資料,分別為array_2D(0, 0),
array_2D(0, 1), …, array_2D(0, 3), array_2D(1, 0), …, array_2D(1, 3),
array_2D(2, 0),…, array_2D(2, 3) 。
 使用簡例
Dim i, j As Integer
Dim Array_2D(10, 10) As Double

For i = 1 To 10
For j = 1 To 10
Array_2D(i, j) = i * j
Next j
Next i
Financial Calculation 5-10
隱含波動性
 根據一般化的BSM公式,可將選擇權價格寫成函數形式:
𝐶 = 𝑓 𝑆, 𝐾, 𝑇, σ, 𝑟, 𝑦 . (5.1)

 只有一項參數無法直接得知,即股價的波動性,σ。

 雖然看不到股價的波動性,但市場上卻有選擇權權利金的交易價格。可將 (5.1)
式改寫成下面反函數形式:
σ = 𝑓 −1 𝐶, 𝑆, 𝐾, 𝑇, 𝑟, 𝑦 . (5.2)

 一但代入市場上均衡的選擇權價格,應可求得均衡的股價的波動性,此方法求
得的波動性稱之為隱含的波動性(Implied Volatility)。

 但在現實操作上,(5.2) 式的反函數不太可能求得,可以使用數值方法中求根
法去解決此問題。

 將(5.1) 式改寫如下,
𝐻 σ = 𝑓 𝑆, 𝐾, 𝑇, σ, 𝑟, 𝑦 − 𝐶 = 0. (5.3)

Financial Calculation 5-11


迴圈敘述 Do-Loop (1/2)
 若已知道迴圈所需執行的次數時,可用For-Next。若不知,則用Do-
Loop。

 Do-Loop 迴圈敘述有兩種形式:
 Do While … Loop:執行迴圈敘述前先行條件測試。
Do While 測試條件
迴圈敘述組合
[Exit Do]
Loop

 Do … Loop While:先執行迴圈敘述然後才進行條件測試。
Do
迴圈敘述組合
[Exit Do]
Loop While 測試條件

Financial Calculation 5-12


迴圈敘述 Do-Loop (2/2)
 Do While … Loop:
Public Function Factorial(n As Long) As Long
Dim ans As Long
Dim i As Long
ans = 1
Do While n >= 1 ‘設定測試條件 n >=1
ans = ans * n
n=n–1 ‘遞減n的數值
Loop
Factorial = ans
End Function
程式5.2(Book2.xls/Sheet1)

 Do … Loop While:
Public Function Factorial_1(n As Long) As Long
Dim ans As Long
Dim i As Long
ans = 1
Do
ans = ans * n
n=n-1
Loop While n > 0 ‘設定測試條件 n > 0
Factorial_1 = ans
End Function
程式5.3(Book2.xls/Sheet1)

Financial Calculation 5-13


二分法尋根 (1/4)
 (5.3) 式非線性方程式的求根問題:
𝐻 σ∗ = 𝑓 𝑆, 𝐾, 𝑇, σ∗ , 𝑟, 𝑦 − 𝐶 ∗ = 0. (5.4)

 由於選擇權的價格為波動性的嚴格遞增函數,𝑓 σ1 > 𝑓 σ2 if σ1 > σ2 .

 如果代入一個很大的波動性,σ𝑚𝑎𝑥 > σ∗ 使得 𝐻 σ𝑚𝑎𝑥 > 0;代入一個很小的


波動性,σ𝑚𝑖𝑛 < σ∗ 使得 𝐻 σ𝑚𝑖𝑛 < 0。

 由於 H 為 σ 的連續函數,則存在一個 σ∗ ∈ (σ𝑚𝑖𝑛 , σ𝑚𝑎𝑥 ) 使得 𝐻 σ∗ = 0。

σ𝐿 +σ𝑅
 二分法尋根:令 σ𝐿 = σ𝑚𝑖𝑛 及 σ𝑅 = σ𝑚𝑎𝑥 。考慮 σ1 = 2

 若𝐻 σ1 > 0,則令σ1 = σ𝑅 新的右界;
 若𝐻 σ1 < 0,則令σ1 = σ𝐿 新的左界;
 若𝐻 σ1 = 0,則真實的波動性 σ∗ = σ1 。
 假設 𝐻 σ1 ≠ 0 ,用同樣的方法,求得下一個新的界限 σ2 ,一直往下求得 σ3 , σ4 , …,
直到左界與右界間隔小於我們能接受的誤差容忍度𝜃為止, σ𝑅 − σ𝐿 ≤ 𝜃。

Financial Calculation 5-14


二分法尋根 (2/4)
 http://zh.wikipedia.org/wiki/File:Bisection_method.png
 圖5.1:

Financial Calculation 5-15


二分法尋根 (3/4)
 求隱含波動性的函數:
Public Function GBSImpliedVol(OpClass As String, P As Double, S As Double, K As Double, T As Double, r As Double, y As Double) As Double

Dim sigL As Double, sigR As Double


Dim err As Double, tol As Double, value As Double

tol = 0.0001
sigL = 0.0001
sigR = 2
err = Abs(sigR - sigL)
Do While (err > tol)
sig = (sigL + sigR) / 2
value = GBSOption(OpClass, S, K, T, sig, r, y)
If (value = P) Then GBSImpliedVol = sig
If (value > P) Then
sigR = sig
Else
sigL = sig
End If
err = Abs(sigR - sigL)
Loop
GBSImpliedVol = sig
End Function
程式5.3(Book1.xls/Module1)

Financial Calculation 5-16


二分法尋根 (4/4)
 程式5.4為測試二分法計算隱含波動性的程序:
Public Sub ImpVolTest()
Dim S As Double, K As Double, T As Double
Dim sig As Double, r As Double, y As Double
Dim OpClass As String, P As Double

S = Worksheets("Sheet1").Cells(2, 1).value
K = Worksheets("Sheet1").Cells(2, 2).value
T = Worksheets("Sheet1").Cells(2, 3).value
r = Worksheets("Sheet1").Cells(2, 5).value
y = Worksheets("Sheet1").Cells(2, 6).value
OpClass = Worksheets("Sheet1").Cells(5, 1).value
P = Worksheets("Sheet1").Cells(5, 2).value

sig = GBSImpliedVol(OpClass, P, S, K, T, r, y)

Worksheets("Sheet1").Cells(8, 1).value = sig


End Sub
程式5.4(Book1.xls/Sheet1)

 優點:簡單易學、對尋根函數沒有太多限制、只要是連續單調遞增(遞減)函數都行。
 缺點: 計算效率較差,要多次的計算才會收斂。

Financial Calculation 5-17


牛頓法尋根 (1/4)
 牛頓法也是運用反覆迭代(Iterative)的方法去求得一個近似根,求根
函數如下:
𝐻 σ∗ = 𝑓 𝑆, 𝐾, 𝑇, 𝑟𝑑 , 𝑟𝑓 , σ∗ − 𝐶 ∗ = 0.

 如圖5.2,在 σ𝑘 點上的函數斜率𝐻′ σ𝑘 ,可表示為


𝑑𝑦 𝐻 σ𝑘
𝐻′ σ𝑘 = =− . (5.5)
𝑑𝑥 σ𝑘+1 −σ𝑘

𝐻 σ𝑘
 (5.5) 式可改寫為σ𝑘+1 ≡ σ𝑘 − 。
𝐻′ σ𝑘

 函數斜率𝐻′ σ𝑘 可求得如下 :
𝜕𝐻 𝜕𝑓
𝐻′ σ = = = 𝑆 𝑇𝑒 −𝑦𝑇 Φ(𝑑1 ) =Vega. (5.6)
𝜕𝜎 𝜕𝜎

 (5.6) 式即為一般化歐式買權的Vega公式。

Financial Calculation 5-18
牛頓法尋根 (2/4)
 http://zh.wikipedia.org/wiki/File:NewtonIteration_Ani.gif
 圖5.2:

Financial Calculation 5-19


牛頓法尋根 (3/4)
 While 測試條件 Public Function GBSNewtonImpVolCall(C As Double, S As
迴圈敘述組合 Double, K As Double, T As Double, r As Double, y As Double) As
Wend Double
Dim sig As Double
 求隱含波動性的函數: Dim d1 As Double
Dim err As Double
Dim dv As Double
Dim price_err As Double
Dim vega As Double
sig = 0.2
err = 0.0001
dv = err + 1
While (Abs(dv) > err)
d1 = (Log(S / K) + (r - y + sig * sig / 2) * T) / (sig * Sqr(T))
price_err = GBSOption("C", S, K, T, sig, r, y) - C
vega = S * Sqr(T) * Exp(-y * T) * NorPdf(d1)
dv = price_err / vega
sig = sig - dv
Wend
GBSNewtonImpVolCall = sig
End Function
程式5.5(Book1.xls/Module1)
Financial Calculation 5-20
牛頓法尋根 (4/4)
 程式5.6為測試牛頓法計算隱含波動性的程序:
Public Sub ImpVolTest_1()
Dim S As Double, K As Double, T As Double
Dim sig As Double, r As Double, y As Double
Dim P As Double

S = Worksheets("Sheet2").Cells(2, 1).value
K = Worksheets("Sheet2").Cells(2, 2).value
T = Worksheets("Sheet2").Cells(2, 3).value
r = Worksheets("Sheet2").Cells(2, 5).value
y = Worksheets("Sheet2").Cells(2, 6).value
P = Worksheets("Sheet2").Cells(5, 2).value

sig = GBSNewtonImpVolCall(P, S, K, T, r, y)

Worksheets("Sheet2").Cells(8, 1).value = sig


End Sub
程式5.6(Book1.xls/Sheet2)

Financial Calculation 5-21


Homework
 照投影片上的步驟及程式操作一次,將所有程式存
檔。

 如何比較二分法及牛頓法的效率性?

Financial Calculation 5-22


第六章

選擇權的敏感性
與美式選擇權的定價

Financial Calculation 6-1


目錄
敏感性的定義
封閉解程式碼
差分與微分
美式選擇權定價公式

Financial Calculation 6-2


敏感性的定義 (1/2)
 根據BSM模型,選擇權的價格寫成函數關係:
𝑉 = 𝑓 𝑆, 𝐾, 𝑇, σ, 𝑟, 𝑦 . (6.1)

 所謂敏感性:相對於自變數的微小變動下,相對應的因變數變動量。

 Delta(避險比率):當投資人放空一單位買權時,需要買入避險的現貨數量。
𝜕𝑉 𝑁 𝑑1 , 𝐶𝑎𝑙𝑙
∆= = (6.2)
𝜕𝑆 𝑁 𝑑1 − 1, 𝑃𝑢𝑡

 Gamma:衡量股價變動下Delta的相對改變情形。由於投資人可由Delta值來決
定避險的數量,因此Delta的變動程度會影響到投資人調整避險部位的頻率。
𝜕Δ 𝜕2 𝑉 𝑁′ 𝑑1
Γ= = = (6.3)
𝜕𝑆 𝜕𝑆 2 𝑆𝜎 𝑇

 Vega:衡量選擇權價格相對股價波動性變動的改變情形。
𝜕𝑉
𝑉𝑒𝑔𝑎 = 𝜕𝜎 = 𝑆 𝑇𝑁 ′ 𝑑1 (6.4)
Financial Calculation 6-3
敏感性的定義 (2/2)
 Theta:隨契約到期時間的減少,對選擇權價值的影響。
𝑁 ′ 𝑑1
𝜕𝑉
−𝑆𝜎 − 𝑟𝐾𝑒 −𝑟𝑇 𝑁 𝑑2 , 𝐶𝑎𝑙𝑙
2 𝑇
Θ=− = ′
𝑁 𝑑1
(6.5)
𝜕𝑇
−𝑆𝜎 + 𝑟𝐾𝑒 −𝑟𝑇 𝑁 −𝑑2 , 𝑃𝑢𝑡
2 𝑇

 Rho of r:利率的增加,對選擇權價值的影響。
𝜕𝑉 𝐾𝑇𝑒 −𝑟𝑇 𝑁 𝑑2 , 𝐶𝑎𝑙𝑙
𝑅ℎ𝑜_𝑟 = = (6.6)
𝜕𝑟 −𝐾𝑇𝑒 −𝑟𝑇 𝑁 −𝑑2 , 𝑃𝑢𝑡

 Rho of y:資產收益率的增加,對選擇權價值的影響。
𝜕𝑉 −𝑆𝑇𝑒 −𝑦𝑇 𝑁 𝑑1 , 𝐶𝑎𝑙𝑙
𝑅ℎ𝑜_𝑦 = = (6.7)
𝜕𝑦 𝑆𝑇𝑒 −𝑦𝑇 𝑁 −𝑑1 , 𝑃𝑢𝑡

Financial Calculation 6-4


封閉解程式碼 (1/8)
 前一節的敏感性公式,為不發放股利的BSM模型公式,針對一般化的
BSM模型公式,列示於下,注意有兩個Rho值,一個是對融資成本的
利率,另一個是對標的資產收益率。

𝑒 −𝑦𝑇 𝑁 𝑑1 , 𝐶𝑎𝑙𝑙
 Delta:∆ = −𝑦𝑇
𝑒 𝑁 𝑑1 − 1 , 𝑃𝑢𝑡

Public Function GBSDelta(OpClass As String, S As Double, K As Double, T As Double, sig As Double,


r As Double, y As Double) As Double
Dim d1 As Double
d1 = (Log(S / K) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T))
If OpClass = "C" Then
GBSDelta = Exp(-y * T) * NorCdf(d1)
ElseIf OpClass = "P" Then
GBSDelta = Exp(-y * T) * (NorCdf(d1) - 1)
End If
End Function
程式6.1(Book1.xls/Module1)

Financial Calculation 6-5


封閉解程式碼 (2/8)
𝑒 −𝑦𝑇 𝑁′ 𝑑1
 Gamma:Γ =
𝑆𝜎 𝑇

Public Function GBSGamma(S As Double, K As Double, T As Double, sig As Double, r As Double, y


As Double) As Double
Dim d1 As Double
d1 = (Log(S / K) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T))
GBSGamma = Exp(-y * T) * NorPdf(d1) / (S * sig * Sqr(T))
End Function
程式6.2(Book1.xls/Module1)

 𝑉𝑒𝑔𝑎 = 𝑆𝑒 −𝑦𝑇 𝑇𝑁 ′ 𝑑1

Public Function GBSVega(S As Double, K As Double, T As Double, sig As Double, r As Double, y As


Double) As Double
Dim d1 As Double
d1 = (Log(S / K) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T))
GBSVega = S * Exp(-y * T) * NorPdf(d1) * Sqr(T)
End Function
程式6.3(Book1.xls/Module1)

Financial Calculation 6-6


封閉解程式碼 (3/8)
−𝑦𝑇𝑁′ 𝑑1
−𝑆𝑒 𝜎 2 𝑇 + 𝑦𝑆𝑒 −𝑦𝑇 𝑁 𝑑1 − 𝑟𝐾𝑒 −𝑟𝑇 𝑁 𝑑2 , 𝐶𝑎𝑙𝑙
 Theta: Θ = 𝑁′ 𝑑
−𝑆𝑒 −𝑦𝑇 𝜎 2 𝑇1 − 𝑦𝑆𝑒 −𝑦𝑇 𝑁 −𝑑1 + 𝑟𝐾𝑒 −𝑟𝑇 𝑁 −𝑑2 , 𝑃𝑢𝑡

Public Function GBSTheta(OpClass As String, S As Double, K As Double, T As Double, sig As Double, r As


Double, y As Double) As Double
Dim d1 As Double, d2 As Double
d1 = (Log(S / K) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T))
d2 = d1 - sig * Sqr(T)
If OpClass = "C" Then
GBSTheta = -S * Exp(-y * T) * NorPdf(d1) * sig / (2 * Sqr(T)) + y * S * Exp(-y * T) * NorCdf(d1)
- r * K * Exp(-r * T) * NorCdf(d2)
ElseIf OpClass = "P" Then
GBSTheta = -S * Exp(-y * T) * NorPdf(d1) * sig / (2 * Sqr(T)) - y * S * Exp(-y * T) * NorCdf(-d1)
+ r * K * Exp(-r * T) * NorCdf(-d2)
End If
End Function
程式6.4(Book1.xls/Module1)

Financial Calculation 6-7


封閉解程式碼 (4/8)
𝐾𝑇𝑒 −𝑟𝑇 𝑁 𝑑2 , 𝐶𝑎𝑙𝑙
 Rho of r:𝑅ℎ𝑜_𝑟 =
−𝐾𝑇𝑒 −𝑟𝑇 𝑁 −𝑑2 , 𝑃𝑢𝑡

Public Function GBSRho_r(OpClass As String, S As Double, K As Double, T As Double, sig As


Double, r As Double, y As Double) As Double
Dim d1 As Double, d2 As Double
d1 = (Log(S / K) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T))
d2 = d1 - sig * Sqr(T)
If OpClass = "C" Then
If (r - y) <> 0 Then
GBSRho_r = T * K * Exp(-r * T) * NorCdf(d2)
Else
GBSRho_r = -T * GBSOption(OpClass, S, K, T, sig, r, y)
End If
ElseIf OpClass = "P" Then
If (r - y) <> 0 Then
GBSRho_r = -T * K * Exp(-r * T) * NorCdf(-d2)
Else
GBSRho_r = -T * GBSOption(OpClass, S, K, T, sig, r, y)
End If
End If
End Function
程式6.5(Book1.xls/Module1)
Financial Calculation 6-8
封閉解程式碼 (5/8)
−𝑆𝑇𝑒 −𝑦𝑇 𝑁 𝑑1 , 𝐶𝑎𝑙𝑙
 Rho of y:𝑅ℎ𝑜_𝑦 =
𝑆𝑇𝑒 −𝑦𝑇 𝑁 −𝑑1 , 𝑃𝑢𝑡

Public Function GBSRho_y(OpClass As String, S As Double, K As Double, T As Double, sig As


Double, r As Double, y As Double) As Double
Dim d1 As Double
d1 = (Log(S / K) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T))
If OpClass = "C" Then
GBSRho_y = -T * S * Exp(-y * T) * NorCdf(d1)
ElseIf OpClass = "P" Then
GBSRho_y = T * S * Exp(-y * T) * NorCdf(-d1)
End If
End Function
程式6.6(Book1.xls/Module1)

Financial Calculation 6-9


封閉解程式碼 (6/8)
電腦程式範例:
 考慮 𝑆 = 100, 𝐾 = 100, 𝑇 = 1年, 𝜎 = 30%, 𝑟 =
8%, 𝑦 = 2%,可求得買權與賣權比較靜態的各個
數值,
100
ln + (8% − 2% + 0.5 × 0.32 ) × 1
𝑑1 = 100 = 0.35,
0.3 1
100
ln − (8% − 2% + 0.5 × 0.32 ) × 1
𝑑2 = 100 = 0.05.
0.3 1

Financial Calculation 6-10


封閉解程式碼 (7/8)
Public Sub Op_Calculate() C_Value = GBSOption("C", S, K, T, sig, r, y)
Dim S As Double P_Value = GBSOption("P", S, K, T, sig, r, y)
Dim K As Double Worksheets("Sheet1").Cells(5, 2).Value = C_Value
Dim T As Double Worksheets("Sheet1").Cells(5, 3).Value = P_Value
Dim sig As Double
Dim r As Double C_Value = GBSDelta("C", S, K, T, sig, r, y)
Dim y As Double P_Value = GBSDelta("P", S, K, T, sig, r, y)
Dim C_Value As Double Worksheets("Sheet1").Cells(6, 2).Value = C_Value
Dim P_Value As Double Worksheets("Sheet1").Cells(6, 3).Value = P_Value
Dim d1 As Double, d2 As Double
C_Value = GBSGamma(S, K, T, sig, r, y)
S = Worksheets("Sheet1").Cells(2, 1).Value P_Value = GBSGamma(S, K, T, sig, r, y)
K = Worksheets("Sheet1").Cells(2, 2).Value Worksheets("Sheet1").Cells(7, 2).Value = C_Value
T = Worksheets("Sheet1").Cells(2, 3).Value Worksheets("Sheet1").Cells(7, 3).Value = P_Value
sig = Worksheets("Sheet1").Cells(2, 4).Value C_Value = GBSVega(S, K, T, sig, r, y)
r = Worksheets("Sheet1").Cells(2, 5).Value P_Value = GBSVega(S, K, T, sig, r, y)
y = Worksheets("Sheet1").Cells(2, 6).Value Worksheets("Sheet1").Cells(8, 2).Value = C_Value
Worksheets("Sheet1").Cells(8, 3).Value = P_Value
d1 = (Log(S / K) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T))
d2 = d1 - sig * Sqr(T) C_Value = GBSTheta("C", S, K, T, sig, r, y)
Worksheets("Sheet1").Cells(5, 5).Value = d1 P_Value = GBSTheta("P", S, K, T, sig, r, y)
Worksheets("Sheet1").Cells(5, 6).Value = d2 Worksheets("Sheet1").Cells(9, 2).Value = C_Value
Worksheets("Sheet1").Cells(6, 5).Value = NorPdf(d1) Worksheets("Sheet1").Cells(9, 3).Value = P_Value
Worksheets("Sheet1").Cells(6, 6).Value = NorPdf(d2)
Worksheets("Sheet1").Cells(7, 5).Value = NorCdf(d1) C_Value = GBSRho_r("C", S, K, T, sig, r, y)
Worksheets("Sheet1").Cells(7, 6).Value = NorCdf(d2) P_Value = GBSRho_r("P", S, K, T, sig, r, y)
Worksheets("Sheet1").Cells(10, 2).Value = C_Value
Worksheets("Sheet1").Cells(9, 5).Value = -d1 Worksheets("Sheet1").Cells(10, 3).Value = P_Value
Worksheets("Sheet1").Cells(9, 6).Value = -d2
Worksheets("Sheet1").Cells(10, 5).Value = NorPdf(-d1) C_Value = GBSRho_y("C", S, K, T, sig, r, y)
Worksheets("Sheet1").Cells(10, 6).Value = NorPdf(-d2) P_Value = GBSRho_y("P", S, K, T, sig, r, y)
Worksheets("Sheet1").Cells(11, 5).Value = NorCdf(-d1) Worksheets("Sheet1").Cells(11, 2).Value = C_Value
Worksheets("Sheet1").Cells(11, 6).Value = NorCdf(-d2) Worksheets("Sheet1").Cells(11, 3).Value = P_Value
End Sub
程式6.7(Book1.xls/Sheet1)
Financial Calculation 6-11
封閉解程式碼 (8/8)

 分析買權 (Call):
 Delta = 0.6242,因此資產價格上漲$1元,買權上漲$1*0.6246 = $0.6246。
 Vega = 36.7810,波動性上漲1%,買權上漲0.01*36.7810 = $0.367810。
 Theta = -8.1085,隨到期日接近一日,買權下跌1/365*(-8.1085) = -$0.022215。
 Rho_r = 47.9971,利率上漲1%,買權上漲0.01*47.9971 = $0.479971。
 Rho_y = -62.4215,資產收益率上漲1%,買權上漲0.01*(-62.4215) = -$0.624215。
 對賣權 (Put) 一樣可以得到類似的推論結果。
Financial Calculation 6-12
差分與微分 (1/3)
差分的敏感性:
 現實的世界上,自變數(如股價、利率與波動性)的變動量是離散的,而不是
連續的,沒有辦法微分。可利用差分的方式,直接求得敏感性的數值。
𝜕𝑉 𝑉 𝑆+∆𝑆 −𝑉 𝑆−∆𝑆
 ∆= ≈
𝜕𝑆 2∆𝑆

通常令變動總量為百分之一的原價格,2∆𝑆 = 0.01𝑆 ⟺ ∆𝑆 = 0.01𝑆/2。


𝜕𝑉
𝑉 𝜎+∆𝜎 −𝑉 𝜎−∆𝜎
 Vega = 𝜕𝜎 ≈ 2∆𝜎
𝜕𝑉 𝑉 𝑇+∆𝑇 −𝑉 𝑇−∆𝑇
 Θ = − 𝜕𝑇 ≈ − 2∆𝑇
𝜕𝑉 𝑉 𝑟+∆𝑟 −𝑉 𝑟−∆𝑟
 Rho_r = 𝜕𝑟 ≈ 2∆𝑟
𝜕𝑉 𝑉 𝑦+∆𝑦 −𝑉 𝑦−∆𝑦
 Rho_y = 𝜕𝑦 ≈ 2∆𝑦

由於Gamma為二次微分,因此其差分與其他的不一樣。
𝜕2 𝑉 𝑉 𝑆+∆𝑆 −2𝑉(𝑆)+𝑉 𝑆−∆𝑆
 Γ= ≈
𝜕𝑆 2 ∆𝑆 2

Financial Calculation 6-13


差分與微分 (2/3)
電腦程式範例:
 考慮 𝑆 = 100, 𝐾 = 100, 𝑇 = 1年, 𝜎 = 30%, 𝑟 = 8%, 𝑦 = 2%,利用差分公式,可求得買權
與賣權比較靜態的各個數值。

Financial Calculation 6-14


差分與微分 (3/3)
Public Sub Op_Calculate() delta = 0.01 * T / 2
Dim S As Double V0 = GBSOption("C", S, K, T - delta, sig, r, y)
Dim K As Double V1 = GBSOption("C", S, K, T + delta, sig, r, y)
Dim T As Double Worksheets("Sheet1").Cells(9, 2).Value = -(V1 - V0) / (2 * delta)
Dim sig As Double
Dim r As Double delta = 0.01 * r / 2
Dim y As Double V0 = GBSOption("C", S, K, T, sig, r - delta, y)
Dim V As Double, V0 As Double, V1 As Double V1 = GBSOption("C", S, K, T, sig, r + delta, y)
Dim delta As Double Worksheets("Sheet1").Cells(10, 2).Value = (V1 - V0) / (2 * delta)

S = Worksheets("Sheet1").Cells(2, 1).Value delta = 0.01 * y / 2


K = Worksheets("Sheet1").Cells(2, 2).Value V0 = GBSOption("C", S, K, T, sig, r, y - delta)
T = Worksheets("Sheet1").Cells(2, 3).Value V1 = GBSOption("C", S, K, T, sig, r, y + delta)
sig = Worksheets("Sheet1").Cells(2, 4).Value Worksheets("Sheet1").Cells(11, 2).Value = (V1 - V0) / (2 * delta)
r = Worksheets("Sheet1").Cells(2, 5).Value
y = Worksheets("Sheet1").Cells(2, 6).Value End Sub
程式6.8(Book2.xls/Sheet1)
delta = 0.01 * S / 2
V0 = GBSOption("C", S - delta, K, T, sig, r, y)
V1 = GBSOption("C", S + delta, K, T, sig, r, y)
Worksheets("Sheet1").Cells(6, 2).Value = (V1 - V0) / (2 * delta)

V = GBSOption("C", S, K, T, sig, r, y)
Worksheets("Sheet1").Cells(7, 2).Value = (V1 - 2 * V + V0) / (delta ^ 2)

delta = 0.01 * sig / 2


V0 = GBSOption("C", S, K, T, sig - delta, r, y)
V1 = GBSOption("C", S, K, T, sig + delta, r, y)
Worksheets("Sheet1").Cells(8, 2).Value = (V1 - V0) / (2 * delta)

Financial Calculation 6-15


美式選擇權定價公式 (1/10)
標準雙元常態分配:
 兩隨機變數X、Y為標準雙元常態分配,其機率密
度函數(PDF):
(𝑥2 −2𝜌𝑥𝑦+𝑦2 )
1 −
Ψ(𝑥, 𝑦, 𝜌) = 𝑒 2(1−𝜌2 ) (6.8)
2𝜋 1−𝜌2

 其累積機率密度函數(CDF):
𝑎 𝑏
𝑀(𝑎, 𝑏, 𝜌) = −∞ −∞
Ψ 𝑢, 𝑣, 𝜌 𝑑𝑢𝑑𝑣 (6.9)

Financial Calculation 6-16


美式選擇權定價公式 (2/10)
 利用解析函數的近似方法,(6.9)式的近似式可表示為:
𝑎 𝑏
𝑎1 = , 𝑏1 = ,
2(1−𝜌2 ) 2(1−𝜌2 )
A1 = 0.24840615, A2 = 0.39233107, A3 = 0.21141819, A4 = 0.03324666, A5 = 0.00082485334,
B1 = 0.10024215, B2 = 0.48281397, B3 = 1.0609498, B4 = 1.7797294, B5 = 2.6697604
 a ≤ 0, 𝑏 ≤ 0, 𝜌 ≤ 0:

1−𝜌2 5 5
𝑀(𝑎, 𝑏, 𝜌) = × 𝑖=1 𝑗=1 A𝑖 A𝑗 𝑒 [𝑎1 2B𝑖 −𝑎1 +𝑏1 2B𝑗 −𝑏1 +2𝜌 B𝑖 −𝑎1 B𝑗 −𝑏1 ]
𝜋
 a ≤ 0, 𝑏 ≥ 0, 𝜌 ≥ 0:
𝑀 𝑎, 𝑏, 𝜌 = 𝑁 a − 𝑀 𝑎, −𝑏, −𝜌
 a ≥ 0, 𝑏 ≤ 0, 𝜌 ≥ 0:
𝑀 𝑎, 𝑏, 𝜌 = 𝑁 b − 𝑀 −𝑎, 𝑏, −𝜌
 a ≥ 0, 𝑏 ≥ 0, 𝜌 ≤ 0:
𝑀 𝑎, 𝑏, 𝜌 = 𝑁 a + 𝑁 b − 1 + 𝑀 −𝑎, −𝑏, 𝜌
 a × 𝑏 × 𝜌 > 0:
𝑀 𝑎, 𝑏, 𝜌 = 𝑀 𝑎, 0, 𝜌1 + 𝑀 b, 0, 𝜌2 − Θ
1, 𝑥 > 0
(𝜌𝑎−𝑏)×𝑆𝑔𝑛(𝑎) (𝜌𝑏−𝑎)×𝑆𝑔𝑛(𝑏) 1−𝑆𝑔𝑛(𝑎)×𝑠𝑔𝑛(𝑏)
𝜌1 = , 𝜌2 = ,Θ= , 𝑠𝑔𝑛 𝑥 = 0, 𝑥 = 0 .
𝑎2 −2𝜌𝑎𝑏+𝑏2 𝑎2 −2𝜌𝑎𝑏+𝑏2 4
−1, 𝑥 < 0

Financial Calculation 6-17


美式選擇權定價公式 (3/10)
程式6.9為此解析函數 Public Function BiNorCdf(A As Double, b As Double, rho As Double) As Double
近似方法的計算函數。 Dim X As Variant, y As Variant
Dim rho1 As Double, rho2 As Double, delta As Double
Dim a1 As Double, b1 As Double, Sum As Double
Dim I As Integer, j As Integer
X = Array(0.24840615, 0.39233107, 0.21141819, 0.03324666, 0.00082485334)
y = Array(0.10024215, 0.48281397, 1.0609498, 1.7797294, 2.6697604)
a1 = A / Sqr(2 * (1 - rho ^ 2))
b1 = b / Sqr(2 * (1 - rho ^ 2))
If A <= 0 And b <= 0 And rho <= 0 Then
Sum = 0
For I = 1 To 5
For j = 1 To 5
Sum = Sum + X(I) * X(j) * Exp(a1 * (2 * y(I) - a1) + b1 * (2 * y(j) - b1) + 2 * rho * (y(I) - a1) * (y(j) - b1))
Next
Next
BiNorCdf = Sqr(1 - rho ^ 2) / Pi * Sum
ElseIf A <= 0 And b >= 0 And rho >= 0 Then
BiNorCdf = NorCdf(A) - BiNorCdf(A, -b, -rho)
ElseIf A >= 0 And b <= 0 And rho >= 0 Then
BiNorCdf = NorCdf(b) - BiNorCdf(-A, b, -rho)
ElseIf A >= 0 And b >= 0 And rho <= 0 Then
BiNorCdf = NorCdf(A) + NorCdf(b) - 1 + BiNorCdf(-A, -b, rho)
ElseIf A * b * rho > 0 Then
rho1 = (rho * A - b) * Sgn(A) / Sqr(A ^ 2 - 2 * rho * A * b + b ^ 2)
rho2 = (rho * b - A) * Sgn(b) / Sqr(A ^ 2 - 2 * rho * A * b + b ^ 2)
delta = (1 - Sgn(A) * Sgn(b)) / 4
BiNorCdf = BiNorCdf(A, 0, rho1) + BiNorCdf(b, 0, rho2) - delta
End If
End Function
程式6.9(Book3.xls/Module1)

Financial Calculation 6-18


美式選擇權定價公式 (4/10)
間斷股利的買權:
 Roll (1977), Geske (1979), and Whaley (1981)發展出了間斷股利的美式買權價格公式。若
股利為Dt,則
𝑡
𝐶 = 𝑆 − 𝐷𝑡 𝑒 −𝑟𝑡 𝑁 𝑏1 + 𝑆 − 𝐷𝑡 𝑒 −𝑟𝑡 𝑀 𝑎1, −𝑏1, −
𝑇

𝑡
−𝐾𝑒 −𝑟𝑇 𝑀 𝑎2, −𝑏2, − − 𝐾 − 𝐷𝑡 𝑒 −𝑟𝑡 𝑁 𝑏2 (6.10)
𝑇

其中
𝑆−𝐷𝑡𝑒−𝑟𝑡 𝜎2
ln + 𝑟+ 𝑇
𝐾 2
𝑎1 = , 𝑎2 = 𝑎1 − 𝜎 𝑇,
𝜎 𝑇
𝑆−𝐷𝑡𝑒−𝑟𝑡 𝜎2
ln + 𝑟+ 𝑡
𝑆 2
𝑏1 = , 𝑏2 = 𝑏1 − 𝜎 𝑡
𝜎 𝑡
𝑆:方程式 𝐶𝐸 𝑆,t = 𝑆+𝐷𝑡 − 𝐾 的解,而𝐶𝐸 𝑆,t 為標的資產價格𝑆,到期日t 的歐式買權
價格。
 當價格高於𝑆時,提前執行為最佳。
 若提前執行不是最佳時,則𝑆 = ∞, 𝑏2 = ∞, 𝑏1 = ∞且(6.10)式會退化成(4.8)式。

Financial Calculation 6-19


美式選擇權定價公式 (5/10)
Public Function RollGeskeWhaley(S As Double, K As Double, t1 As LowS = 0
Double, T2 As Double, r As Double, D As Double, sig As Double) As I = HighS * 0.5
Double ci = BSOption("C", I, K, T2 - t1, sig, r)
't1 time to dividend payout
'T2 time to option expiration While ((Abs(ci - I - D + K) > epsilon) And (HighS - LowS > epsilon))
If (ci - I - D + K) < 0 Then
Dim Sx As Double, I As Double HighS = I
Dim a1 As Double, a2 As Double Else
Dim b1 As Double, b2 As Double LowS = I
Dim HighS As Double, LowS As Double End If
Dim epsilon As Double I = (HighS + LowS) / 2
Dim ci As Double, infinity As Double ci = BSOption("C", I, K, T2 - t1, sig, r)
Wend
infinity = 100000000 a1 = (Log(Sx / K) + (r + sig ^ 2 / 2) * T2) / (sig * Sqr(T2))
epsilon = 0.00001 a2 = a1 - sig * Sqr(T2)
Sx = S - D * Exp(-r * t1) b1 = (Log(Sx / I) + (r + sig ^ 2 / 2) * t1) / (sig * Sqr(t1))
If D <= K * (1 - Exp(-r * (T2 - t1))) Then b2 = b1 - sig * Sqr(t1)
RollGeskeWhaley = BSOption("C", Sx, K, T2, sig, r)
Exit Function RollGeskeWhaley = Sx * NorCdf(b1) + Sx * BiNorCdf(a1, -b1, -Sqr(t1
End If / T2)) - K * Exp(-r * T2) * BiNorCdf(a2, -b2, -Sqr(t1 / T2)) - (K - D) *
ci = BSOption("C", S, K, T2 - t1, sig, r) Exp(-r * t1) * NorCdf(b2)
HighS = S
While (ci - HighS - D + K) > 0 And HighS < infinity End Function
HighS = HighS * 2 程式6.10(Book3.xls/Module1)
ci = BSOption("C", HighS, K, T2 - t1, sig, r)
Wend
If HighS > infinity Then
RollGeskeWhaley = BSOption("C", Sx, K, T2, sig, r)
Exit Function
End If

Financial Calculation 6-20


美式選擇權定價公式 (6/10)
連續股利的買權:
 由於沒有正確的程序來評價連續股利的美式買權,因此只能使用數值方法去求得近似解。
Barone-Adesi and Whaley (1987) 提出下面方法:
𝑆
𝐶 𝐸 S, K, T + 𝐴2 ( )𝑞2 , 𝑆 < 𝑆
𝐶𝐴 = 𝑆 (6.11)
𝑆 − 𝐾, 𝑆 ≥ 𝑆
其中
𝑆
𝐴2 = 1 − 𝑒 − 𝑟−𝑦 𝑇 𝑁[𝑑1 𝑆 ]
𝑞2
2
𝑆 𝜎
ln + 𝑦+ 𝑇
𝐾 2
𝑑1 𝑆 = ,
𝜎 𝑇
− 𝑁−1 + 𝑁−1 2+4𝑀/𝐾
𝑞2 = ,
2
2𝑟 2𝑦
𝑀= ,𝑁 = , 𝐾 = 1 − 𝑒 −𝑟𝑇 ,
𝜎2 𝜎2
𝑆:可利用遞迴方式由 𝑆 − 𝐾 = 𝐶𝐸 𝑆 + 1 − 𝑒 − 𝑟−𝑦 𝑇 𝑁 𝑑1 𝑆 𝑆/𝑞2 求出,
𝐶𝐸 :相對應的歐式權利金。
𝑆
 若𝑆 < 𝑆,則美式買權 = 相對應歐式買權 + 提前執行的權利金 𝐴2 ( )𝑞2 。
𝑆
 若𝑆 ≥ 𝑆,則美式買權價格即為其內含價值。

Financial Calculation 6-21


美式選擇權定價公式 (7/10)
'// The Barone-Adesi and Whaley (1987) American approximation '// Newton Raphson algorithm to solve for the critical commodity price for a Call
Public Function BAWAmericanApprox(CallPutFlag As String, S As Double, K As Private Function Kc(K As Double, T As Double, r As Double, y As Double, sig As Double)
Double, T As Double, r As Double, y As Double, sig As Double) As Double As Double
If CallPutFlag = "c" Then Dim n As Double, m As Double
BAWAmericanApprox = BAWAmericanCallApprox(S, K, T, r, y, sig) Dim Su As Double, Si As Double
ElseIf CallPutFlag = "p" Then Dim h2 As Double, A As Double
BAWAmericanApprox = BAWAmericanPutApprox(S, K, T, r, y, sig) Dim d1 As Double, Q2 As Double, q2u As Double
End If Dim LHS As Double, RHS As Double
End Function Dim bi As Double, E As Double
'// American call '// Calculation of seed value, Si
Private Function BAWAmericanCallApprox(S As Double, K As Double, T As n = 2 * (r - y) / sig ^ 2
Double, r As Double, y As Double, sig As Double) As Double m = 2 * r / sig ^ 2
Dim Sk As Double, n As Double, CP As Double q2u = (-(n - 1) + Sqr((n - 1) ^ 2 + 4 * m)) / 2
Dim d1 As Double, Q2 As Double, a2 As Double Su = K / (1 - 1 / q2u)
If (r - y) >= r Then h2 = -((r - y) * T + 2 * sig * Sqr(T)) * K / (Su - K)
BAWAmericanCallApprox = GBSOption("c", S, K, T, sig, r, y) Si = K + (Su - K) * (1 - Exp(h2))
Else A = 2 * r / (sig ^ 2 * (1 - Exp(-r * T)))
Sk = Kc(K, T, r, y, sig) d1 = (Log(Si / K) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T))
n = 2 * (r - y) / sig ^ 2 ' Q2 = (-(n - 1) + Sqr((n - 1) ^ 2 + 4 * A)) / 2
CP = 2 * r / (sig ^ 2 * (1 - Exp(-r * T))) LHS = Si - K
d1 = (Log(Sk / K) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T)) RHS = GBSOption("c", Si, K, T, sig, r, y) + (1 - Exp(-y * T) * NorCdf(d1)) * Si / Q2
Q2 = (-(n - 1) + Sqr((n - 1) ^ 2 + 4 * CP)) / 2 bi = Exp(-y * T) * NorCdf(d1) * (1 - 1 / Q2) + (1 - Exp(-y * T) * NorCdf(d1) / (sig *
a2 = (Sk / Q2) * (1 - Exp(-y * T) * NorCdf(d1)) Sqr(T))) / Q2
If S < Sk Then E = 0.000001
BAWAmericanCallApprox = GBSOption("c", S, K, T, sig, r, y) + a2 * (S / '// Newton Raphson algorithm for finding critical price Si
Sk) ^ Q2 While Abs(LHS - RHS) / K > E
Else Si = (K + RHS - bi * Si) / (1 - bi)
BAWAmericanCallApprox = S - K d1 = (Log(Si / K) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T))
End If LHS = Si - K
End If RHS = GBSOption("c", Si, K, T, sig, r, y) + (1 - Exp(-y * T) * NorCdf(d1)) * Si / Q2
End Function bi = Exp(-y * T) * NorCdf(d1) * (1 - 1 / Q2) + (1 - Exp(-y * T) * NorPdf(d1) / (sig *
Sqr(T))) / Q2
Wend
Kc = Si
End Function
程式6.11(Book3.xls/Module1)

Financial Calculation 6-22


美式選擇權定價公式 (8/10)
連續與不發放股利的賣權:
 此法也是由Barone-Adesi and Whaley (1987) 提出,對發放連續股利的美式賣權:
𝑆
𝑃𝐸 S, K, T + 𝐴1 (𝑆)𝑞1 , 𝑆 > 𝑆
𝑃𝐴 = (6.12)
𝐾 − 𝑆, 𝑆 ≤ 𝑆
其中
𝑆
𝐴1 = − 1 − 𝑒− 𝑟−𝑦 𝑇 𝑁[−𝑑
1 𝑆 ]
𝑞1
𝑆 𝜎2
ln + 𝑦+ 𝑇
2
𝑑1 𝑆 = 𝐾
,
𝜎 𝑇
− 𝑁−1 − 𝑁−1 2+4𝑀/𝐾
𝑞1 = ,
2
2𝑟 2𝑦 −𝑟𝑇
𝑀= ,𝑁 = 2 ,𝐾 = 1 − 𝑒 ,
𝜎2 𝜎
𝑆 :可利用遞迴方式由 𝐾 − 𝑆 = 𝑃𝐸 𝑆 − 1 − 𝑒 − 𝑟−𝑦 𝑇 𝑁 −𝑑1 𝑆 𝑆/𝑞1 求出,
𝑃𝐸 :相對應的歐式權利金。

Financial Calculation 6-23


美式選擇權定價公式 (9/10)
'// American put '// Newton Raphson algorithm to solve for the critical commodity price for a Put
Private Function BAWAmericanPutApprox(S As Double, K As Double, T As Private Function Kp(K As Double, T As Double, r As Double, y As Double, sig As Double)
Double, r As Double, y As Double, sig As Double) As Double As Double
Dim n As Double, m As Double
Dim Sk As Double, n As Double, CP As Double Dim Su As Double, Si As Double
Dim d1 As Double, Q1 As Double, a1 As Double Dim h1 As Double, A As Double
Dim d1 As Double, q1u As Double, Q1 As Double
Sk = Kp(K, T, r, y, sig) Dim LHS As Double, RHS As Double
n = 2 * (r - y) / sig ^ 2 Dim bi As Double, E As Double
CP = 2 * r / (sig ^ 2 * (1 - Exp(-r * T)))
d1 = (Log(Sk / K) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T)) '// Calculation of seed value, Si
Q1 = (-(n - 1) - Sqr((n - 1) ^ 2 + 4 * CP)) / 2 n = 2 * (r - y) / sig ^ 2
a1 = -(Sk / Q1) * (1 - Exp(-y * T) * NorCdf(-d1)) m = 2 * r / sig ^ 2
q1u = (-(n - 1) - Sqr((n - 1) ^ 2 + 4 * m)) / 2
If S > Sk Then Su = K / (1 - 1 / q1u)
BAWAmericanPutApprox = GBSOption("p", S, K, T, sig, r, y) + a1 * (S / Sk) ^ h1 = ((r - y) * T - 2 * sig * Sqr(T)) * K / (K - Su)
Q1 Si = Su + (K - Su) * Exp(h1)
Else
BAWAmericanPutApprox = K - S A = 2 * r / (sig ^ 2 * (1 - Exp(-r * T)))
End If d1 = (Log(Si / K) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T))
End Function Q1 = (-(n - 1) - Sqr((n - 1) ^ 2 + 4 * A)) / 2
LHS = K - Si
RHS = GBSOption("p", Si, K, T, sig, r, y) - (1 - Exp(-y * T) * NorCdf(-d1)) * Si / Q1
bi = -Exp(-y * T) * NorCdf(-d1) * (1 - 1 / Q1) - (1 + Exp(-y * T) * NorPdf(-d1) / (sig *
Sqr(T))) / Q1
E = 0.000001
'// Newton Raphson algorithm for finding critical price Si
While Abs(LHS - RHS) / K > E
Si = (K - RHS + bi * Si) / (1 + bi)
d1 = (Log(Si / K) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T))
LHS = K - Si
RHS = GBSOption("p", Si, K, T, sig, r, y) - (1 - Exp(-y * T) * NorCdf(-d1)) * Si / Q1
bi = -Exp(-y * T) * NorCdf(-d1) * (1 - 1 / Q1) - (1 + Exp(-y * T) * NorCdf(-d1) / (sig *
Sqr(T))) / Q1
Wend
Kp = Si
End Function
程式6.12(Book3.xls/Module1)

Financial Calculation 6-24


美式選擇權定價公式 (10/10)
間斷股利的賣權:
 在此情況下,美式賣權的求解相當的複雜。

 Geske and Johnson (1984) 提供了一項近似的方法,


稱之為複合式選擇權 (Compound Options)。

 有興趣的可加以參考。

Financial Calculation 6-25


Homework
 照投影片上的步驟及程式操作一次,將所有程式存
檔。

Financial Calculation 6-26


第七章

異種選擇權(一)
路徑無關選擇權

Financial Calculation 7-1


目錄
Digital Options (數位選擇權 )
Rainbow Options (彩虹選擇權)
Options On Options (複合選擇權 )

Financial Calculation 7-2


Digital Options (1/5)
數位買權
 歐式數位買權由到期日的償付定義之。令 T 為到期日時間,K為執行
價格,則其到期日償付可表示:
𝑋, 𝑆𝑇 > 𝐾
𝐷𝐶𝑇 = (7.1)
0, 𝑆𝑇 ≤ 𝐾
其中 DCT :在 T 時,數位買權之權利金(償付額);
ST :到期日之標的資產價格;
 當到期日選擇權為價內時,買方可收到 X 的償付金額。
 與一般選擇權不同:即使在極端價內之下,償付也是固定不變。

數位賣權
 歐式數位賣權,其到期日的償付可表示如下:
𝑋, 𝑆𝑇 < 𝐾
𝐷𝐶𝑇 = (7.2)
0, 𝑆𝑇 ≥ 𝐾
Financial Calculation 7-3
Digital Options (2/5)
定價公式
 在連續模型下導出的數位買權定價公式:
𝐷𝐶 = 𝑋𝑒 −𝑟𝑇 𝑁(𝑑). (7.3)
其中
𝑆 𝜎2
ln 𝐾 + 𝑟−𝑦− 2 𝑇
𝑑=
𝜎 𝑇
T:到期日;
𝜎:即期匯率波動性;
𝑟:融資成本;
𝑦:標的資產持有收益率。

 數位賣權定價公式:
𝐷𝑃 = 𝑋𝑒 −𝑟𝑇 𝑁(−𝑑). (7.4)

Financial Calculation 7-4


Digital Options (3/5)
 程式碼
'// Digital options
Public Function Digital(ClassFlag As String, S As Double, K As
Double, X As Double, T As Double, sig As Double, r As Double, y
As Double) As Double
Dim D As Double
D = (Log(S / K) + (r - y - sig ^ 2 / 2) * T) / (sig * Sqr(T))
If ClassFlag = "C" Then
Digital = X * Exp(-r * T) * NorCdf(D)
ElseIf ClassFlag = "P" Then
Digital = X * Exp(-r * T) * NorCdf(-D)
End If
End Function
程式7.1(Book1.xls/Module1)

Financial Calculation 7-5


Digital Options (4/5)
 應用範例

Financial Calculation 7-6


Digital Options (5/5)
Public Sub Calc()
Dim S As Double
Dim K As Double
Dim T As Double
Dim sig As Double
Dim r As Double
Dim y As Double
Dim X As Double
Dim dS As Double
Dim CPrice As Double, PPrice As Double
Dim CDelta As Double, Pdelta As Double
S = Worksheets("Sheet1").Range("B2").value
dS = 0.01 * S
K = Worksheets("Sheet1").Range("C2").value
X = Worksheets("Sheet1").Range("D2").value
T = Worksheets("Sheet1").Range("E2").value
sig = Worksheets("Sheet1").Range("F2").value
r = Worksheets("Sheet1").Range("G2").value
y = Worksheets("Sheet1").Range("H2").value
CPrice = Digital("C", S, K, X, T, sig, r, y)
PPrice = Digital("P", S, K, X, T, sig, r, y)
Worksheets("Sheet1").Range("B7").value = CPrice
Worksheets("Sheet1").Range("C7").value = PPrice
CDelta = (Digital("C", S + dS, K, X, T, sig, r, y) - Digital("C", S - dS, K, X, T, sig, r, y)) / (2 * dS)
Pdelta = (Digital("P", S + dS, K, X, T, sig, r, y) - Digital("P", S - dS, K, X, T, sig, r, y)) / (2 * dS)
Worksheets("Sheet1").Range("B8").value = CDelta
Worksheets("Sheet1").Range("C8").value = Pdelta
End Sub
程式7.2(Book1.xls/Sheet1)
Financial Calculation 7-7
Rainbow Options (1/9)
 彩虹選擇權泛指連結兩種以上摽的資產的選擇權。
 兩資產相關選擇權 (Two-Asset Correlation Options)
 兩風險性資產最大或最小選擇權 (Options on the Maximum or the Minimum
of Two Risky Assets)

兩資產相關選擇權
 在這類產品中,判斷價內或價外的資產S1,與計算償付金額大小的資
產S2,分別為不一樣的兩種資產。這類產品與兩種資產的價格產生關
連。
 期末償付:
𝑆 − 𝐾2, 𝑆1 > 𝐾1
𝑇𝐴𝐶𝐶𝑇 = 2 (7.5)
0, 𝑆1 ≤ 𝐾1

𝐾2 − 𝑆2, 𝑆1 < 𝐾1
𝑇𝐴𝐶𝑃𝑇 = (7.6)
0, 𝑆1 ≥ 𝐾1
Financial Calculation 7-8
Rainbow Options (2/9)
 定價公式:

𝑇𝐴𝐶𝐶 = 𝑆2𝑒 −𝑦2𝑇 𝑀 𝑑2 + 𝜎2 𝑇, 𝑑1 + 𝜌𝜎2 𝑇, 𝜌 − 𝐾2𝑒 −𝑟𝑇 𝑀 𝑑2, 𝑑1, 𝜌 . (7.7)

𝑇𝐴𝐶𝑃 = 𝐾2𝑒 −𝑟𝑇 𝑀 −𝑑2, −𝑑1, 𝜌 − 𝑆2𝑒 −𝑦2𝑇 𝑀 −𝑑2 − 𝜎2 𝑇, −𝑑1 − 𝜌𝜎2 𝑇, 𝜌 . (7.8)

𝑆1 𝜎12
ln 𝐾 + 𝑟 − 𝑦1 − 2 𝑇
1
𝑑1 =
𝜎1 𝑇

𝑆2 𝜎22
ln 𝐾 + 𝑟 − 𝑦2 − 2 𝑇
2
𝑑2 =
𝜎2 𝑇

Financial Calculation 7-9


Rainbow Options (3/9)
 程式碼
'// Two asset correlation options
Public Function TwoAssetCorrelation(CallPutFlag As String, S1 As Double, S2 As Double, K1 As Double, K2 As
Double, T As Double, y1 As Double, y2 As Double, r As Double, sig1 As Double, sig2 As Double, rho As Double)
Dim d1 As Double, d2 As Double
d1 = (Log(S1 / K1) + (r - y1 - sig1 ^ 2 / 2) * T) / (sig1 * Sqr(T))
d2 = (Log(S2 / K2) + (r - y2 - sig2 ^ 2 / 2) * T) / (sig2 * Sqr(T))
If CallPutFlag = "c" Then
TwoAssetCorrelation = S2 * Exp(-y2 * T) * BiNorCdf(d2 + sig2 * Sqr(T), d1 + rho * sig2 * Sqr(T), rho)
- K2 * Exp(-r * T) * BiNorCdf(d2, d1, rho)
ElseIf CallPutFlag = "p" Then
TwoAssetCorrelation = K2 * Exp(-r * T) * BiNorCdf(-d2, -d1, rho)
- S2 * Exp(-y2 * T) * BiNorCdf(-d2 - sig2 * Sqr(T), -d1 - rho * sig2 * Sqr(T), rho)
End If
End Function
程式7.3(Book1.xls/Module1)

Financial Calculation 7-10


Rainbow Options (4/9)
 使用範例
 B10輸入 =TwoAssetCorrelation("c", B2,C2,D2,E2,F2,E5,F5,D5,B5,C5,G5)
 C10輸入 =TwoAssetCorrelation(“p", B2,C2,D2,E2,F2,E5,F5,D5,B5,C5,G5)

 在此,並沒有使用按鈕去執行巨
集,而是直接在儲存格中打上函
數名稱與參數的位置,就如同使
用一般的試算表函數。

 這是因為將定價函數放在模組中
之故,模組中的函數可在試算表
中直接引用。

Financial Calculation 7-11


Rainbow Options (5/9)
兩資產最小買權
 期末償付:
𝑀𝑖𝑛𝑇𝐴𝐶𝑇 = 𝑚𝑎𝑥 min 𝑆1, 𝑆2 − 𝐾, 0 (7.9)

 定價公式:
𝑀𝑖𝑛𝑇𝐴𝐶 𝑆1, 𝑆2, 𝐾, 𝑇 = 𝑆1𝑒 −𝑦1𝑇 𝑀 𝑑1, −𝑑, −𝜌1
+𝑆2𝑒 −𝑦2𝑇 𝑀 𝑑2, 𝑑 − 𝜎 𝑇, −𝜌2
−𝐾𝑒 −𝑟𝑇 𝑀 𝑑1 − 𝜎1 𝑇, 𝑑2 − 𝜎2 𝑇, 𝜌 . (7.10)

𝜎2 𝑆1 𝜎2 𝑆2 𝜎2
ln
𝑆1
+ 𝑟−𝑦1−𝑟+𝑦2+ 𝑇 ln 𝐾
+ 𝑟−𝑦1+ 21 𝑇 ln 𝐾
+ 𝑟−𝑦2+ 22 𝑇
𝑆2 2
𝑑= , 𝑑1 = , 𝑑2 =
𝜎 𝑇 𝜎1 𝑇 𝜎2 𝑇

𝜎1 −𝜌𝜎2 𝜎2 −𝜌𝜎1
𝜎= 𝜎12 + 𝜎22 − 2𝜌𝜎1 𝜎2 , 𝜌1 = , 𝜌2 =
𝜎 𝜎

Financial Calculation 7-12


Rainbow Options (6/9)
兩資產最大買權
 期末償付:
𝑀𝑎𝑥𝑇𝐴𝐶𝑇 = 𝑚𝑎𝑥 m𝑎𝑥 𝑆1, 𝑆2 − 𝐾, 0 (7.11)
 定價公式:
𝑀𝑎𝑥𝑇𝐴𝐶 𝑆1, 𝑆2, 𝐾, 𝑇 = 𝑆1𝑒 −𝑦1𝑇 𝑀 𝑑1, 𝑑, 𝜌1
+𝑆2𝑒 −𝑦2𝑇 𝑀 𝑑2, −𝑑 + 𝜎 𝑇, 𝜌2
−𝐾𝑒 −𝑟𝑇 1 − 𝑀 −𝑑1 + 𝜎1 𝑇, −𝑑2 + 𝜎2 𝑇, 𝜌 . (7.12)

兩資產最小賣權
 期末償付:
𝑀𝑖𝑛𝑇𝐴𝑃𝑇 = 𝑚𝑎𝑥 𝐾 − m𝑖𝑛 𝑆1, 𝑆2 , 0 (7.13)
 定價公式:
𝑀𝑖𝑛𝑇𝐴𝑃 𝑆1, 𝑆2, 𝐾, 𝑇 = 𝐾𝑒 −𝑟𝑇 − 𝑀𝑖𝑛𝑇𝐴𝐶 𝑆1, 𝑆2,0, 𝑇 + 𝑀𝑖𝑛𝑇𝐴𝐶 𝑆1, 𝑆2, 𝐾, 𝑇 (7.14)

𝑀𝑖𝑛𝑇𝐴𝐶 𝑆1, 𝑆2,0, 𝑇 = 𝑆1𝑒 −𝑦1𝑇 − 𝑆1𝑒 −𝑦1𝑇 𝑁(𝑑) + 𝑆2𝑒 −𝑦2𝑇 𝑁 𝑑 − 𝜎 𝑇

Financial Calculation 7-13


Rainbow Options (7/9)
兩資產最大賣權
 期末償付:
𝑀𝑎𝑥𝑇𝐴𝑃𝑇 = 𝑚𝑎𝑥 𝐾 − m𝑎𝑥 𝑆1, 𝑆2 , 0 (7.15)

 定價公式:
𝑀𝑎𝑥𝑇𝐴𝑃 𝑆1, 𝑆2, 𝐾, 𝑇 = 𝐾𝑒 −𝑟𝑇 − 𝑀𝑎𝑥𝑇𝐴𝐶 𝑆1, 𝑆2,0, 𝑇 + 𝑀𝑎𝑥𝑇𝐴𝐶 𝑆1, 𝑆2, 𝐾, 𝑇 (7.16)

𝑀𝑎𝑥𝑇𝐴𝐶 𝑆1, 𝑆2,0, 𝑇 = 𝑆2𝑒 −𝑦2𝑇 + 𝑆1𝑒 −𝑦1𝑇 𝑁 𝑑 − 𝑆2𝑒 −𝑦2𝑇 𝑁 𝑑 − 𝜎 𝑇

Financial Calculation 7-14


Rainbow Options (8/9)
 程式碼:
'// Options on the maximum or minimum of two risky assets
Public Function OptionsOnTheMaxMin(TypeFlag As String, S1 As Double, S2 As Double, K As Double, T As Double, r As
Double, y1 As Double, y2 As Double, sig1 As Double, sig2 As Double, rho As Double) As Double
Dim sig As Double, rho1 As Double, rho2 As Double
Dim D As Double, d1 As Double, d2 As Double
sig = Sqr(sig1 ^ 2 + sig2 ^ 2 - 2 * rho * sig1 * sig2)
rho1 = (sig1 - rho * sig2) / sig
rho2 = (sig2 - rho * sig1) / sig
D = (Log(S1 / S2) + (r - y1 - r + y2 + sig ^ 2 / 2) * T) / (sig * Sqr(T))
d1 = (Log(S1 / K) + (r - y1 + sig1 ^ 2 / 2) * T) / (sig1 * Sqr(T))
d2 = (Log(S2 / K) + (r - y2 + sig2 ^ 2 / 2) * T) / (sig2 * Sqr(T))
If TypeFlag = "cmin" Then
OptionsOnTheMaxMin = S1 * Exp(-y1 * T) * BiNorCdf(d1, -D, -rho1) + S2 * Exp(-y2 * T) * BiNorCdf(d2, D - sig * Sqr(T),
-rho2) - K * Exp(-r * T) * BiNorCdf(d1 - sig1 * Sqr(T), d2 - sig2 * Sqr(T), rho)
ElseIf TypeFlag = "cmax" Then
OptionsOnTheMaxMin = S1 * Exp(-y1 * T) * BiNorCdf(d1, D, rho1) + S2 * Exp(-y2 * T) * BiNorCdf(d2, -D + sig * Sqr(T),
rho2) - K * Exp(-r * T) * (1 - BiNorCdf(-d1 + sig1 * Sqr(T), -d2 + sig2 * Sqr(T), rho))
ElseIf TypeFlag = "pmin" Then
OptionsOnTheMaxMin = K * Exp(-r * T) - S1 * Exp(-y1 * T) + S1 * Exp(-y1 * T) * NorCdf(D) - S2 * Exp(-y2 * T) *
NorCdf(D - sig * Sqr(T)) + OptionsOnTheMaxMin("cmin", S1, S2, K, T, r, y1, y2, sig1, sig2, rho)
ElseIf TypeFlag = "pmax" Then
OptionsOnTheMaxMin = K * Exp(-r * T) – (S2 * Exp(-y2 * T) + S1 * Exp(-y1 * T) * NorCdf(D) - S2 * Exp(-y2 * T) *
NorCdf(D - sig * Sqr(T))) + OptionsOnTheMaxMin("cmax", S1, S2, K, T, r, y1, y2, sig1, sig2, rho)
End If
End Function
程式7.4(Book1.xls/Module1)

Financial Calculation 7-15


Rainbow Options (9/9)
使用範例
 六個月後到期之兩資產最大賣權(MaxPut)其價格
 B10輸入 =OptionsOnTheMaxMin(“pmax", B2,C2,D2,E2,D5,E5,F5,B5,C5,G5)

Financial Calculation 7-16


Options on Options (1/7)
 複合選擇權既是標的物為另一個選擇權的選擇權。

買權的選擇權
 複合選擇權的標的選擇權之到期日為 T2,執行價格為K1;而複合選擇權本身之到
期日為T1,執行價格為K2 。

 買權的買入選擇權:買權的買入選擇權之擁有者在到期日 T1 時,有權利以 K2 的價
格,買入到期日為T2,且執行價格為 K1 之買權。其到期日T1 時之償付如下:
𝐺𝐵𝑆𝐶 𝑆𝑇1 , 𝐾1 , 𝑇2 − 𝑇1 − 𝐾2 , 𝐺𝐵𝑆𝐶𝑇1 − 𝐾2 ≥ 0
𝐶𝐶𝑇1 = (7.17)
0 , 𝐺𝐵𝑆𝐶𝑇1 − 𝐾2 < 0
其中 𝐺𝐵𝑆𝐶 𝑆𝑇1 , 𝐾1 , 𝑇2 − 𝑇1 :執行價格K1,到期日時間還有𝑇2 − 𝑇1 ,之歐式買權在
𝑇1 時點的價值。

 買權的賣出選擇權:買權的賣出選擇權在到期日 T1 時之償付如下:
𝐾2 − 𝐺𝐵𝑆𝐶 𝑆𝑇1 , 𝐾1 , 𝑇2 − 𝑇1 , 𝐾2 − 𝐺𝐵𝑆𝐶𝑇1 ≥ 0
𝑃𝐶𝑇1 = (7.18)
0 , 𝐾2 − 𝐺𝐵𝑆𝐶𝑇1 < 0

Financial Calculation 7-17


Options on Options (2/7)
賣權的選擇權
 賣權的買入選擇權:賣權的買入選擇權在到期日之償付如下:
𝐺𝐵𝑆𝑃 𝑆𝑇1 , 𝐾1 , 𝑇2 − 𝑇1 − 𝐾2 , 𝐺𝐵𝑆𝑃𝑇1 − 𝐾2 ≥ 0
𝐶𝑃𝑇1 = (7.19)
0 , 𝐺𝐵𝑆𝑃𝑇1 − 𝐾2 < 0

其中 𝐺𝐵𝑆𝑃 𝑆𝑇1 , 𝐾1 , 𝑇2 − 𝑇1 :執行價格K1,到期日時間還有𝑇2 − 𝑇1 ,


之歐式賣權在 𝑇1 時點的價值。

 賣權的賣出選擇權:賣權的賣出選擇權在到期日之償付如下:
𝐾2 − 𝐺𝐵𝑆𝑃 𝑆𝑇1 , 𝐾1 , 𝑇2 − 𝑇1 , 𝐾2 − 𝐺𝐵𝑆𝑃𝑇1 ≥ 0
𝑃𝑃𝑇1 = (7.20)
0 , 𝐾2 − 𝐺𝐵𝑆𝑃𝑇1 < 0

Financial Calculation 7-18


Options on Options (3/7)
定價公式:
 買權的選擇權:
 首先,要求出關鍵價值𝑆 ∗ , 𝑆 ∗ 滿足下式
𝐺𝐵𝑆𝐶 𝑆 ∗ , 𝐾1 , 𝑇2 − 𝑇1 = 𝐾2

 然後,分別代入下面公式:
𝐶𝐶 = 𝑆𝑒 −𝑦𝑇2 𝑀 𝑧1, 𝑑1, 𝜌 − 𝐾1 𝑒 −𝑟𝑇2 𝑀 𝑧2, 𝑑2, 𝜌 − 𝐾2 𝑒 −𝑟𝑇1 𝑁 𝑑2 (7.21)
𝑃𝐶 = 𝐾1 𝑒 −𝑟𝑇2 𝑀 𝑧2, −𝑑2, −𝜌 − 𝑆𝑒 −𝑦𝑇2 𝑀 𝑧1, −𝑑1, −𝜌 + 𝐾2 𝑒 −𝑟𝑇1 𝑁 −𝑑2 (7.22)
其中
𝑆 𝜎2
ln ∗ + 𝑟−𝑦+ 𝑇1
𝑆 2
𝑑1 = , 𝑑2 = 𝑑1 − 𝜎 𝑇1
𝜎 𝑇1

𝑆 𝜎2
ln + 𝑟−𝑦+ 𝑇2 𝑇1
𝐾1 2
𝑧1 = , 𝑧2 = 𝑧1 − 𝜎 𝑇2 , 𝜌 =
𝜎 𝑇2 𝑇2

Financial Calculation 7-19


Options on Options (4/7)
定價公式:
 賣權的選擇權:
 同樣,先求出關鍵價值𝑆 ∗ , 𝑆 ∗ 滿足下式
𝐺𝐵𝑆𝑃 𝑆 ∗ , 𝐾1 , 𝑇2 − 𝑇1 = 𝐾2

 然後,分別代入下面公式:
𝑃𝑃 = 𝑆𝑒 −𝑦𝑇2 𝑀 −𝑧1, 𝑑1, −𝜌 − 𝐾1 𝑒 −𝑟𝑇2 𝑀 −𝑧2, 𝑑2, −𝜌 + 𝐾2 𝑒 −𝑟𝑇1 𝑁 𝑑2 (7.23)
𝐶𝑃 = 𝐾1 𝑒 −𝑟𝑇2 𝑀 −𝑧2, −𝑑2, 𝜌 − 𝑆𝑒 −𝑦𝑇2 𝑀 −𝑧1, −𝑑1, 𝜌 − 𝐾2 𝑒 −𝑟𝑇1 𝑁 −𝑑2 (7.24)
其中
𝑆 𝜎2
ln ∗ + 𝑟−𝑦+ 𝑇1
𝑆 2
𝑑1 = , 𝑑2 = 𝑑1 − 𝜎 𝑇1
𝜎 𝑇1

𝑆 𝜎2
ln + 𝑟−𝑦+ 𝑇2 𝑇1
𝐾1 2
𝑧1 = , 𝑧2 = 𝑧1 − 𝜎 𝑇2 , 𝜌 =
𝜎 𝑇2 𝑇2

Financial Calculation 7-20


Options on Options (5/7)
 程式碼:將四種選擇權定價公式寫在一起,用輸入參數TypeFlag來決定計算的種類,分
別以”cc”、”pc”、”cp”、”pp”來表示Call on Call、Put on Call、Call on Put、Put on Put。
'// Options on options
Public Function OptionsOnOptions(TypeFlag As String, S As Double, K1 As Double, K2 As Double, t1 As Double, T2 As Double, r As Double, y As
Double, sig As Double) As Double
Dim d1 As Double, d2 As Double, z1 As Double, z2 As Double
Dim I As Double, rho As Double, CallPutFlag As String
If TypeFlag = "cc" Or TypeFlag = "pc" Then
CallPutFlag = "c"
Else
CallPutFlag = "p"
End If
I = CVOptionsOnOptions(CallPutFlag, K1, K2, T2 - t1, r, y, sig)
rho = Sqr(t1 / T2)
d1 = (Log(S / I) + (r - y + sig ^ 2 / 2) * t1) / (sig * Sqr(t1))
d2 = d1 - sig * Sqr(t1)
z1 = (Log(S / K1) + (r - y + sig ^ 2 / 2) * T2) / (sig * Sqr(T2))
z2 = z1 - sig * Sqr(T2)
If TypeFlag = "cc" Then
OptionsOnOptions = S * Exp(-y * T2) * BiNorCdf(z1, d1, rho) - K1 * Exp(-r * T2) * BiNorCdf(z2, d2, rho) - K2 * Exp(-r * t1) * NorCdf(d2)
ElseIf TypeFlag = "pc" Then
OptionsOnOptions = K1 * Exp(-r * T2) * BiNorCdf(z2, -d2, -rho) - S * Exp(-y * T2) * BiNorCdf(z1, -d1, -rho) + K2 * Exp(-r * t1) * NorCdf(-d2)
ElseIf TypeFlag = "cp" Then
OptionsOnOptions = K1 * Exp(-r * T2) * BiNorCdf(-z2, -d2, rho) - S * Exp(-y * T2) * BiNorCdf(-z1, -d1, rho) - K2 * Exp(-r * t1) * NorCdf(-d2)
ElseIf TypeFlag = "pp" Then
OptionsOnOptions = S * Exp(-y * T2) * BiNorCdf(-z1, d1, -rho) - K1 * Exp(-r * T2) * BiNorCdf(-z2, d2, -rho) + Exp(-r * t1) * K2 * NorCdf(d2)
End If
End Function
程式7.5(Book1.xls/Module1)

Financial Calculation 7-21


Options on Options (6/7)
'// Calculation of critical price options on options
Private Function CVOptionsOnOptions(CallPutFlag As String, K1 As Double, K2 As Double, T
As Double, r As Double, y As Double, sig As Double) As Double

Dim Si As Double, ci As Double, di As Double, epsilon As Double


Si = K1
ci = GBSOption(CallPutFlag, Si, K1, T, sig, r, y)
di = GBSDelta(CallPutFlag, Si, K1, T, sig, r, y)
epsilon = 0.0001

'// Newton-Raphson algorithm


While Abs(ci - K2) > epsilon
Si = Si - (ci - K2) / di
ci = GBSOption(CallPutFlag, Si, K1, T, sig, r, y)
di = GBSDelta(CallPutFlag, Si, K1, T, sig, r, y)
Wend

CVOptionsOnOptions = Si

End Function
程式7.6(Book1.xls/Module1)
Financial Calculation 7-22
Options on Options (7/7)
應用範例
 下面為一個 Put-on-Call 選擇權範例:
 B10輸入 = OptionsOnOptions (“pc", B2,C2,D2,E2,F2,C5,D5,B5)

Financial Calculation 7-23


Homework
 照投影片上的步驟及程式操作一次,將所有程式存
檔。

 仿照7-16相同數據,計算MaxCall, MinCall, MinPut


的值。

 仿照7-23相同數據,計算Call-on-Call, Put-on-Put,
Call-on-Put的值。

Financial Calculation 7-24


第八章

異種選擇權(二)
路徑相關選擇權

Financial Calculation 8-1


目錄
Barrier Options (阻隔選擇權 )
Lookback Options (回顧選擇權)
Asian Options (亞式選擇權 )

Financial Calculation 8-2


Barrier Options (1/11)
 在阻隔選擇權中,預先設定了上限與下限的阻隔,一旦標的資產價格
越過這些界限,阻隔選擇權變可能成為有效或無效。
 共有四種類別:下限無效選擇權 (down-and-out)、下限有效選擇權 (down-and-in)、
上限有效選擇權 (up-and-in)及上限無效選擇權 (up-and-out) 。

下限無效選擇權 (down-and-out)
 在下限無效選擇權中,下限阻隔已被確定,如果標的資產價格在選擇
權的有效期間落於此下限阻隔之下,則此選擇權變無效停止。
 此時選擇權的持有者可以根據契約條件,由賣方得到一定數量的償金。

 從目前到標的資產價格第一次越過阻隔的時間,稱之為停止時間,𝜏。
 𝜏是一個隨機變數,因無法事前知道資產價格越界的正確時間。

 令 T 為選擇權的到期日,定義下面的指標函數:
1, 𝜏 > 𝑇 阻隔沒有被穿越
𝜄(𝜏, 𝑇) = (8.1)
0, 𝜏 ≤ 𝑇 阻隔在時間𝑇以前被穿越
Financial Calculation 8-3
Barrier Options (2/11)
下限無效的買權
 令 H 為下限阻隔,到期日為 T,則執行價格為 K 之下限無效買權,在
到期日的償付:
𝐷𝑂𝐶(𝑆𝑇 , 0, 𝐾, 𝐻) = 𝜄 𝜏, 𝑇 𝑚𝑎𝑥 𝑆𝑇 − 𝐾, 0 (8.2)

 如果下限沒有被穿越(𝜏 > 𝑇),則𝜄 𝜏, 𝑇 = 1,期末償付如同一般買權。


 如果下限被穿越( 𝜏 ≤ 𝑇 ),則 𝜄 𝜏, 𝑇 = 0 ,故償付為零,即選擇權消失了。

下限無效的賣權
 令 H 為下限阻隔,到期日為 T,則執行價格為 K 之下限無效賣權,在
到期日的償付:
𝐷𝑂𝑃(𝑆𝑇 , 0, 𝐾, 𝐻) = 𝜄 𝜏, 𝑇 𝑚𝑎𝑥 𝐾 − 𝑆𝑇 , 0 (8.3)

 如果下限沒有被穿越(𝜏 > 𝑇),則𝜄 𝜏, 𝑇 = 1,和一般賣權無異。


 如果下限被穿越(𝜏 ≤ 𝑇),則𝜄 𝜏, 𝑇 = 0,下限無效賣權便失效停止。

Financial Calculation 8-4


Barrier Options (3/11)
下限有效選擇權 (down-and-in)
 下限有效選擇權只有在資產價格低於下限阻隔 H,該選擇權才有作用,
也因此下限有效選擇權之權利金不會高於一般選擇權。

買權
 定義下面的指標函數:
1, 𝜏 ≤ 𝑇 阻隔被穿越
𝜅(𝜏, 𝑇) = (8.4)
0, 𝜏 > 𝑇 阻隔到期前沒被穿越

 到期日之償付:
𝐷𝐼𝐶(𝑆𝑇 , 0, 𝐾, 𝐻) = 𝜅 𝜏, 𝑇 𝑚𝑎𝑥 𝑆𝑇 − 𝐾, 0 (8.5)

 如果 𝜅 𝜏, 𝑇 = 1,則與一般買權無異。反之 𝜅 𝜏, 𝑇 = 0,故償付為零。

Financial Calculation 8-5


Barrier Options (4/11)
 由前面定義可知:
𝜄 𝜏, 𝑇 + 𝜅(𝜏, 𝑇) = 1
(8.5)可改寫為:
DIC ( ST ,0, K , H )   ( , T ) max[ ST  K ,0]
 1   ( , T )  max  ST  K ,0
 max  ST  K ,0   ( , T ) max  ST  K ,0
 C ( ST ,0, K )  DOC ( ST ,0, K , H )
 因此,下限有效買權價值 = 一般歐式買權價值 – 下限無效買權價值。

賣權
 到期日之償付:
𝐷𝐼𝑃(𝑆𝑇 , 0, 𝐾, 𝐻) = 𝜅 𝜏, 𝑇 𝑚𝑎𝑥 𝐾 − 𝑆𝑇 , 0
= 𝑃 𝑆𝑇 , 0, 𝐾 − 𝐷𝑂𝑃(𝑆𝑇 , 0, 𝐾, 𝐻) (8.6)
 所以,下限有效賣權價值 = 一般歐式賣權價值 – 下限無效賣權價值。
Financial Calculation 8-6
Barrier Options (5/11)
上限無效選擇權 (up-and-out)
 在上限無效選擇權中,上限阻隔已被確定,如果標的資產價格在選擇
權的有效期間落於此上限阻隔之上,則此選擇權變無效停止。
買權
 令 H 為上限阻隔,到期日為 T,則執行價格為 K 之上限無效買權,在
到期日的償付:
𝑈𝑂𝐶(𝑆𝑇 , 0, 𝐾, 𝐻) = 𝜄 𝜏, 𝑇 𝑚𝑎𝑥 𝑆𝑇 − 𝐾, 0 (8.7)
 如果上限沒有被穿越(𝜏 > 𝑇),則𝜄 𝜏, 𝑇 = 1,期末償付如同一般買權。
 如果上限被穿越( 𝜏 ≤ 𝑇 ),則 𝜄 𝜏, 𝑇 = 0 ,故償付為零,即選擇權消失了。
賣權
 到期日的償付:
𝑈𝑂𝑃(𝑆𝑇 , 0, 𝐾, 𝐻) = 𝜄 𝜏, 𝑇 𝑚𝑎𝑥 𝐾 − 𝑆𝑇 , 0 (8.8)
 如果上限沒有被穿越(𝜏 > 𝑇),則𝜄 𝜏, 𝑇 = 1,和一般賣權無異。
 如果上限被穿越(𝜏 ≤ 𝑇),則𝜄 𝜏, 𝑇 = 0,上限無效賣權便失效停止。
Financial Calculation 8-7
Barrier Options (6/11)
上限有效選擇權 (up-and-in)
 上限有效選擇權只有在資產價格高於上限阻隔 H,該選擇權才有作用,
也因此上限有效選擇權之權利金不會高於一般選擇權。

買權
 到期日的償付:
𝑈𝐼𝐶(𝑆𝑇 , 0, 𝐾, 𝐻) = 𝜅 𝜏, 𝑇 𝑚𝑎𝑥 𝑆𝑇 − 𝐾, 0 (8.9)
 如果 𝜅 𝜏, 𝑇 = 1,則與一般買權無異。反之 𝜅 𝜏, 𝑇 = 0,故償付為零。

賣權
 到期日的償付:

𝑈𝐼𝑃(𝑆𝑇 , 0, 𝐾, 𝐻) = 𝜅 𝜏, 𝑇 𝑚𝑎𝑥 𝐾 − 𝑆𝑇 , 0
= 𝑃 𝑆𝑇 , 0, 𝐾 − 𝑈𝑂𝑃(𝑆𝑇 , 0, 𝐾, 𝐻) (8.10)

 所以,上限有效賣權價值 = 一般歐式賣權價值 – 上限無效賣權價值。


Financial Calculation 8-8
Barrier Options (7/11)
定價公式
 Reiner & Rubinstein (1991) 導出了下面標準阻隔選擇權的定價公式所需的一般化公式,
藉由這些公式的排列組合與參數符號的調整,便可得到標準阻隔選擇權的定價公式。

A   Se  yT N ( x1 )   Ke  rT N ( x1   T ),
B   Se  yT N ( x2 )   Ke  rT N ( x2   T ),
2(  1) 2
H H
C   Se  yT
S  N ( y1 )   Ke  rT
S  N ( y1   T ),
   
2(  1) 2
H H
D   Se  yT
S  N ( y2 )   Ke  rT
S  N ( y2   T ),
   
 H
2

E  Xe  N ( x2   T )    N ( y2   T )  ,
 rT

 S  
 H     H
 

F  X   N ( z )    N ( z  2 T )  ,
 S  S  
ln( S / K ) ln( S / H ) ln( H 2 / SK )
x1   (1   ) T , x2   (1   ) T , y1   (1   ) T ,
 T  T  T
ln( H / S ) ln( H / S ) r  y  2 / 2 2r
y2   (1   ) T , z    T ,   ,   2  2 .
 T  T  2

Financial Calculation 8-9
Barrier Options (8/11)
定價公式 (Continued)
(i) If DIC or DOC , then   1 and   1,
(ii) If UIC or UOC , then   1 and   1,
(iii) If DIP or DOP, then   1 and   1,
(iv) If UIP or UOP, then   1 and   1.

(1) If K  H , then (2) If K  H , then


DIC  C  E , DIC  A  B  D  E ,
UIC  A  E , UIC  B  C  D  E ,
DIP  B  C  D  E , DIP  A  E ,
UIP  A  B  D  E , UIP  C  E ,
DOC  A  C  F , DOC  B  D  F ,
UOC  F , UOC  A  B  C  D  F ,
DOP  A  B  C  D  F , DOP  F ,
UOP  B  D  F . UOP  A  C  F .
Financial Calculation 8-10
Barrier Options (9/11)
'// Standard barrier options f5 = A * Exp(-r * T) * (NorCdf(eta * x2 - eta * sig * Sqr(T)) - (H / S) ^ (2 * mu) *
Function StandardBarrier(TypeFlag As String, S As Double, K As Double, H As Double, NorCdf(eta * y2 - eta * sig * Sqr(T)))
A As Double, T As Double, r As Double, y As Double, sig As Double) f6 = A * ((H / S) ^ (mu + lambda) * NorCdf(eta * z) + (H / S) ^ (mu - lambda) *
Dim mu As Double NorCdf(eta * z - 2 * eta * lambda * sig * Sqr(T)))
Dim lambda As Double If K > H Then
Dim x1 As Double, x2 As Double Select Case TypeFlag
Dim y1 As Double, y2 As Double Case Is = "dic"
Dim z As Double StandardBarrier = f3 + f5
Dim eta As Integer 'Binary variable that can take the value of 1 or -1 Case Is = "uic"
Dim phi As Integer 'Binary variable that can take the value of 1 or -1 StandardBarrier = f1 + f5
Dim f1 As Double 'Equal to formula "A" in the book Case Is = "dip"
Dim f2 As Double 'Equal to formula "B" in the book StandardBarrier = f2 - f3 + f4 + f5
Dim f3 As Double 'Equal to formula "C" in the book Case Is = "uip"
Dim f4 As Double 'Equal to formula "D" in the book StandardBarrier = f1 - f2 + f4 + f5
Dim f5 As Double 'Equal to formula "E" in the book Case Is = "doc"
Dim f6 As Double 'Equal to formula "F" in the book StandardBarrier = f1 - f3 + f6
mu = (r - y - sig ^ 2 / 2) / sig ^ 2 Case Is = "uoc"
lambda = Sqr(mu ^ 2 + 2 * r / sig ^ 2) StandardBarrier = f6
x1 = Log(S / K) / (sig * Sqr(T)) + (1 + mu) * sig * Sqr(T) Case Is = "dop"
x2 = Log(S / H) / (sig * Sqr(T)) + (1 + mu) * sig * Sqr(T) StandardBarrier = f1 - f2 + f3 - f4 + f6
y1 = Log(H ^ 2 / (S * K)) / (sig * Sqr(T)) + (1 + mu) * sig * Sqr(T) Case Is = "uop"
y2 = Log(H / S) / (sig * Sqr(T)) + (1 + mu) * sig * Sqr(T) StandardBarrier = f2 - f4 + f6
z = Log(H / S) / (sig * Sqr(T)) + lambda * sig * Sqr(T) End Select
If TypeFlag = "dic" Or TypeFlag = "doc" Then ElseIf K < H Then
eta = 1 Select Case TypeFlag
phi = 1 Case Is = "dic"
ElseIf TypeFlag = "uic" Or TypeFlag = "uoc" Then StandardBarrier = f1 - f2 + f4 + f5
eta = -1 Case Is = "uic"
phi = 1 StandardBarrier = f2 - f3 + f4 + f5
ElseIf TypeFlag = "dip" Or TypeFlag = "dop" Then Case Is = "dip"
eta = 1 StandardBarrier = f1 + f5
phi = -1 Case Is = "uip"
ElseIf TypeFlag = "uip" Or TypeFlag = "uop" Then StandardBarrier = f3 + f5
eta = -1 Case Is = "doc"
phi = -1 StandardBarrier = f2 + f6 - f4
End If Case Is = "uoc"
f1 = phi * S * Exp(-y * T) * NorCdf(phi * x1) - phi * K * Exp(-r * T) * NorCdf(phi * x1 StandardBarrier = f1 - f2 + f3 - f4 + f6
- phi * sig * Sqr(T)) Case Is = "dop"
f2 = phi * S * Exp(-y * T) * NorCdf(phi * x2) - phi * K * Exp(-r * T) * NorCdf(phi * x2 StandardBarrier = f6
- phi * sig * Sqr(T)) Case Is = "uop"
f3 = phi * S * Exp(-y * T) * (H / S) ^ (2 * (mu + 1)) * NorCdf(eta * y1) - phi * K * StandardBarrier = f1 - f3 + f6
Exp(-r * T) * (H / S) ^ (2 * mu) * NorCdf(eta * y1 - eta * sig * Sqr(T)) End Select
f4 = phi * S * Exp(-y * T) * (H / S) ^ (2 * (mu + 1)) * NorCdf(eta * y2) - phi * K * End If
Exp(-r * T) * (H / S) ^ (2 * mu) * NorCdf(eta * y2 - eta * sig * Sqr(T)) End Function
程式8.1(Book1.xls/Module1)
Financial Calculation 8-11
Barrier Options (10/11)
使用範例
 考慮標的股價 S 目前為100,S之波動性為30%,股利收益
率為4%,無風險利率為8%,則上限價格為105,下限價格
為95,執行價格為100,償金 (Rebate) 數量為3,半年後到
期之阻隔選擇權,其價格為何?
 B9輸入 =StandardBarrier(B8,$B$2,$C$2,C5,$D$5,$D$2,$F$2,$G$2,$E$2)
 C9輸入 =StandardBarrier(C8,$B$2,$C$2,B5,$D$5,$D$2,$F$2,$G$2,$E$2)
 D9輸入 =StandardBarrier(D8,$B$2,$C$2,C5,$D$5,$D$2,$F$2,$G$2,$E$2)
 E9輸入 =StandardBarrier(E8,$B$2,$C$2,B5,$D$5,$D$2,$F$2,$G$2,$E$2)
 B12輸入=StandardBarrier(B11,$B$2,$C$2,C5,$D$5,$D$2,$F$2,$G$2,$E$2)
 C12輸入=StandardBarrier(C11,$B$2,$C$2,B5,$D$5,$D$2,$F$2,$G$2,$E$2)
 D12輸入=StandardBarrier(D11,$B$2,$C$2,C5,$D$5,$D$2,$F$2,$G$2,$E$2)
 E12輸入=StandardBarrier(E11,$B$2,$C$2,B5,$D$5,$D$2,$F$2,$G$2,$E$2)

Financial Calculation 8-12


Barrier Options (11/11)

Financial Calculation 8-13


Lookback Options (1/10)
 回顧選擇權有兩種基本的類型:
 標準(Standard)回顧選擇權
 極值 (Extrema)回顧選擇權

標準回顧選擇權
 指選擇權的執行價格並不是固定不變的,而是參考在選擇權的
生命週期中,標的資產價格的最大值或最小值來決定執行價格。
 必需要到選擇權到期時,往回頭看,才能得知正確的執行價格。
 生命週期是由選擇權契約產生後,一直到契約到期消失為止。
 令Smax(Smin)為生命週期內,最高(低)的標的資產價格。

Financial Calculation 8-14


Lookback Options (2/10)
標準回顧買權
 以生命週期中,最低的標的資產價格為執行價格,在到期日的償付:
𝑆𝐿𝐵𝐶𝑇 = 𝑆𝑇 − 𝑆𝑚𝑖𝑛 . (8.11)

 除非到期日的資產價格剛好是最小資產價格,否則此選擇權一定為價內的。

 定價公式:
SLBC  Se  yT N (d1 )  S min e  rT N (d 2 )
 
2( r  y )

 2
   2
  
T   e( r  y )T N (d1 )  ,
S 2( r y )
 Se  rT   N  d1 
2(r  y )  S min     
 
其中
ln( S / S min )  (r  y   2 / 2)T
d1  ,
 T
d 2  d1   T .
Financial Calculation 8-15
Lookback Options (3/10)
標準回顧賣權
 在到期日的償付:
𝑆𝐿𝐵𝑃𝑇 = 𝑆𝑚𝑎𝑥 − 𝑆𝑇 . (8.12)

 此償付不會小於零,只有當期末資產價格剛好是最大值時,償付才會為零。

 定價公式:
SLBP  S max e  rT N (d 2 )  Se  yT N (d1 )
 
2( r  y )

 2
   2
  
T   e( r  y )T N (d1 )  ,
S 2( r y )
 Se  rT   N  d1 
2(r  y )   S max     
 
其中
ln( S / S max )  (r  y   2 / 2)T
d1  ,
 T
d 2  d1   T .
Financial Calculation 8-16
Lookback Options (4/10)
'// Floating strike lookback options
Function FloatingStrikeLookback(CPFlag As String, S As Double, SMin As Double, SMax As Double, T As
Double, r As Double, y As Double, sig As Double) As Double
Dim d1 As Double, d2 As Double, m As Double

If CPFlag = "c" Then


m = SMin
ElseIf CPFlag = "p" Then
m = SMax
End If

d1 = (Log(S / m) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T))


d2 = d1 - sig * Sqr(T)

If CPFlag = "c" Then


FloatingStrikeLookback = S * Exp(-y * T) * NorCdf(d1) - m * Exp(-r * T) * NorCdf(d2) + Exp(-r * T) *
sig ^ 2 / (2 * (r - y)) * S * ((S / m) ^ (-2 * (r - y) / sig ^ 2) * NorCdf(-d1 + 2 * (r - y) / sig * Sqr(T)) - Exp((r - y) *
T) * NorCdf(-d1))
ElseIf CPFlag = "p" Then
FloatingStrikeLookback = m * Exp(-r * T) * NorCdf(-d2) - S * Exp(-y * T) * NorCdf(-d1) + Exp(-r * T) *
sig ^ 2 / (2 * (r - y)) * S * (-(S / m) ^ (-2 * (r - y) / sig ^ 2) * NorCdf(d1 - 2 * (r - y) / sig * Sqr(T)) + Exp((r - y) *
T) * NorCdf(d1))
End If
End Function
程式8.2(Book1.xls/Module1)
Financial Calculation 8-17
Lookback Options (5/10)
 考慮半年後到期之標準回顧選擇權,買權的買方有權以其生命週期中最低的價
格買入標的指數。到目前為止,最低的標的股票指數為100,標的股票指數S
為120,股票指數之波動性為30%,股利收益率為4%,無風險利率為8%,其價
格如下圖。

Financial Calculation 8-18


Lookback Options (6/10)
極值回顧選擇權
 指選擇權的執行價格為固定不變,但是計算期末償付的資產價格,則
必須參考選擇權的生命週期中,標的資產價格的最大值或最小值。
買權
 以生命週期中,最高的標的資產價格𝑆𝑚𝑎𝑥 來計算期末償付:
𝐸𝐿𝐵𝐶𝑇 = 𝑚𝑎𝑥 𝑆𝑚𝑎𝑥 − 𝐾, 0 . (8.13)
 定價公式:依據𝑆𝑚𝑎𝑥 與𝐾之間的關係,分兩種情況討論:
(i) S max  K ,
ELBC  Se  yT N (d1 )  Ke  rT N (d 2 )
 
2( r  y )

 2
  S  2  2( r  y ) 
 Se  rT   N  d1  T e ( r  y ) T
N (d1 )  ,
2(r  y )   K     
 
其中
ln( S / K )  (r  y   2 / 2)T
d1  , d 2  d1   T .
 T
Financial Calculation 8-19
Lookback Options (7/10)
(ii) S max  K ,
ELBC  ( S max  K )e  rT  Se  yT N (d1 )  S max e  rT N (d 2 )
 
2( r  y )

 2
   2
  
T   e( r  y )T N (d1 )  ,
S 2( r y )
 Se  rT   N  d1 
2(r  y )   S max     
 
其中
ln( S / S max )  (r  y   2 / 2)T
d1  , d 2  d1   T .
 T

賣權
 以生命週期中,最低的標的資產價格𝑆𝑚𝑖𝑛 來計算期末償付:
𝐸𝐿𝐵𝑃𝑇 = 𝑚𝑎𝑥 𝐾 − 𝑆𝑚𝑖𝑛 , 0 . (8.14)

Financial Calculation 8-20


Lookback Options (8/10)
 定價公式:依據𝑆𝑚𝑖𝑛 與𝐾之間的關係,分兩種情況討論:
(i) S min  K ,
ELBP  Ke  rT N (d 2 )  Se  yT N (d1 )
 
2( r  y )

 2
  S  2  2( r  y ) 
 Se  rT   N  d1  T e ( r  y ) T
N (d1 )  ,
2(r  y )  K     
 
其中
ln( S / K )  (r  y   2 / 2)T
d1  , d 2  d1   T .
 T
(ii) S min  K ,
ELBP  ( K  S min )e  rT  Se  yT N (d1 )  S min e  rT N (d 2 )
 
2( r  y )

  S   N  d  2(r  y ) T   e( r  y )T N (d )  ,
2 2

 Se  rT    1 
2(r  y )  S min 
1 
  
 
其中
ln( S / S min )  (r  y   2 / 2)T
d1  , d 2  d1   T .
 T
Financial Calculation 8-21
Lookback Options (9/10)
'// Fixed strike lookback options
Public Function FixedStrikeLookback(CPFlag As String, S As Double, SMin As Double, SMax As Double, K As Double, T As Double, r As
Double, y As Double, sig As Double) As Double
Dim d1 As Double, d2 As Double
Dim e1 As Double, e2 As Double, m As Double
If CPFlag = "c" Then
m = SMax
ElseIf CPFlag = "p" Then
m = SMin
End If
d1 = (Log(S / K) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T))
d2 = d1 - sig * Sqr(T)
e1 = (Log(S / m) + (r - y + sig ^ 2 / 2) * T) / (sig * Sqr(T))
e2 = e1 - sig * Sqr(T)
If CPFlag = "c" And K > m Then
FixedStrikeLookback = S * Exp(-y * T) * NorCdf(d1) - K * Exp(-r * T) * NorCdf(d2) + S * Exp(-r * T) * sig ^ 2 / (2 * (r - y)) * (-(S / K)
^ (-2 * (r - y) / sig ^ 2) * NorCdf(d1 - 2 * (r - y) / sig * Sqr(T)) + Exp((r - y) * T) * NorCdf(d1))
ElseIf CPFlag = "c" And K <= m Then
FixedStrikeLookback = Exp(-r * T) * (m - K) + S * Exp(-y * T) * NorCdf(e1) - Exp(-r * T) * m * NorCdf(e2) + S * Exp(-r * T) * sig ^ 2 /
(2 * (r - y)) * (-(S / m) ^ (-2 * (r - y) / sig ^ 2) * NorCdf(e1 - 2 * (r - y) / sig * Sqr(T)) + Exp((r - y) * T) * NorCdf(e1))
ElseIf CPFlag = "p" And K < m Then
FixedStrikeLookback = -S * Exp(-y * T) * NorCdf(-d1) + K * Exp(-r * T) * NorCdf(-d1 + sig * Sqr(T)) + S * Exp(-r * T) * sig ^ 2 / (2 *
(r - y)) * ((S / K) ^ (-2 * (r - y) / sig ^ 2) * NorCdf(-d1 + 2 * (r - y) / sig * Sqr(T)) - Exp((r - y) * T) * NorCdf(-d1))
ElseIf CPFlag = "p" And K >= m Then
FixedStrikeLookback = Exp(-r * T) * (K - m) - S * Exp(-y * T) * NorCdf(-e1) + Exp(-r * T) * m * NorCdf(-e1 + sig * Sqr(T)) + Exp(-r *
T) * sig ^ 2 / (2 * (r - y)) * S * ((S / m) ^ (-2 * (r - y) / sig ^ 2) * NorCdf(-e1 + 2 * (r - y) / sig * Sqr(T)) - Exp((r - y) * T) * NorCdf(-e1))
End If
End Function
程式8.3(Book1.xls/Module1)

Financial Calculation 8-22


Lookback Options (10/10)
 考慮半年後到期之極值回顧選擇權,買權選擇權執行價格為100。到目前為止,
選擇權生命週期中最高的標的資產價格為100,目前標的資產價格S亦為100,
資產波動性為30%,股利收益率為0%,無風險利率為10%,其價格如下圖。

Financial Calculation 8-23


Asian Options (1/7)
 平均選擇權又稱為亞式選擇權,它的期末償付視其標的資產在一段特
定期間之內平均價格而定。
 浮動執行價格
 固定執行價格:目前最為普及,因此我們注重於固定執行價格的探討。

幾何平均選擇權
 如果標的資產之對數報酬為常態分配,則其幾何平均也會是常態分配
的形式。Kemma & Vorst (1990) 導出下面的定價公式。

GAC  Se(   r )T N (d1 )  Ke  rT N (d 2 ),


GAP  Ke  rT N (d 2 )  Se(   r )T N (d1 ),
其中
ln( S / K )  (   A2 / 2)T  1 2 
d1  , d 2  d1   A T , A  ,   r  y  .
A T 3 2 6 

Financial Calculation 8-24


Asian Options (2/7)
'// Geometric average rate option
Public Function GeoAvgRateOption(CPFlag As String, S As Double, K As Double, T As Double,
r As Double, y As Double, sig As Double) As Double

Dim bA As Double, sigA As Double, yA As Double

bA = 1 / 2 * (r - y - sig ^ 2 / 6)
sigA = sig / Sqr(3)
yA = r – bA

GeoAvgRateOption = GBSOption(CPFlag, S, K, T, sigA, r, yA)


End Function
程式8.4(Book1.xls/Module1)

Financial Calculation 8-25


Asian Options (3/7)
 考慮三個月後到期之下述條件之幾何平均賣權,執行價格為85,標的資產價格
為80,股價波動性為20%,收益率為3%,無風險利率為5%,其價格如下圖。

Financial Calculation 8-26


Asian Options (4/7)
算術平均選擇權
 我們無法求得其封閉解,因為如果我們假設標的資產之對數報酬為常態分配,則其算術
平均便不會是常態分配的形式。
 然而,我們可以用解析的近似方式去定價。Turnbull & Wakeman (1991) 提供下面的定價
公式。
Turnbull & Wakeman Approximation
 T為原契約的到期時間,T2為目前距到期時間, T1為已開始計算平均的時間(T1 = T –T2),
𝜏為目前到開始計算平均的時間。下面公式適用於在開始計算平均之前:
AAC  Se(   r )T2 N (d1 )  Ke  rT2 N (d 2 ),
AAP  Ke  rT2 N (d 2 )  Se(   r )T2 N (d1 ),
其中
ln( S / K )  (   A2 / 2)T2 ln( M 2 ) ln( M 1 )
d1  , d 2  d1   A T2 ,  A   2 ,   , b  r  y,
 A T2 T T
e( r  y )T  e( r  y )
M1 
(r  y )(T   )
2e(2b  )T 2e(2b  )  1 eb (T  ) 
2 2

M2     
(b   2 )(2b   2 )(T   ) 2 b(T   ) 2  2b   2
b  2 
Financial Calculation 8-27
Asian Options (5/7)
 一旦進入開始計算平均的時間,上式中的執行價格調整如下:

T T
Kˆ  K  1 S A
T2 T2
其中S A為在計算的平均時間內,平均的資產價格。
且計算出的選擇權價格要乘以T2 / T。

Financial Calculation 8-28


Asian Options (6/7)
'// Arithmetic average rate option
Public Function TWAriAvgAsian(CPFlag As String, S As Double, SA As Double, K As Double, T As Double,
T2 As Double, tau As Double, r As Double, y As Double, sig As Double) As Double
Dim m1 As Double, m2 As Double, t1 As Double
Dim bA As Double, sigA As Double, yA As Double

m1 = (Exp((r - y) * T) - Exp((r - y) * tau)) / ((r - y) * (T - tau))


m2 = 2 * Exp((2 * (r - y) + sig ^ 2) * T) / ((r - y + sig ^ 2) * (2 * (r - y) + sig ^ 2) * (T - tau) ^ 2) + 2 * Exp((2
* (r - y) + sig ^ 2) * tau) / ((r - y) * (T - tau) ^ 2) * (1 / (2 * (r - y) + sig ^ 2) - Exp((r - y) * (T - tau)) / ((r - y) +
sig ^ 2))

bA = Log(m1) / T
sigA = Sqr(Log(m2) / T - 2 * bA)
yA = r - bA
t1 = T - T2

If t1 > 0 Then
K = T / T2 * K - t1 / T2 * SA
TWAriAvgAsian = GBSOption(CPFlag, S, K, T2, sigA, r, yA) * T2 / T
Else
TWAriAvgAsian = GBSOption(CPFlag, S, K, T2, sigA, r, yA)
End If
End Function
程式8.5(Book1.xls/Module1)

Financial Calculation 8-29


Asian Options (7/7)
 考慮三個月後到期之下述條件之算術平均買權,執行價格為100,目前標的資產價格為
100,契約的原始到期日為九個月,六個月後到期,契約已進入計算平均價格的期間之
中,目前標的資產的平均價格亦為100。股價波動性為35%,收益率為5%,無風險利率
為10%,其價格如下圖。

Financial Calculation 8-30


Homework
 照投影片上的步驟及程式操作一次,將所有程式存
檔。

Financial Calculation 8-31

You might also like