期交所在 https://www.taifex.com.tw/cht/9/calOptPrice 提供了一個選擇權理論價計算機, 6個必要輸入參數裡, 波動率的輸入部分建議使用歷史波動率; 又 https://individual-trader.blogspot.com/2013/09/blog-post_1638.html 說明其實該輸入的是 [未來] 波動率, 大家都沒有水晶球來預知這未來波動率, 是故期交所好心建議我們用歷史波動率來做估計而已; 以今天 (2021/08/12) 來說, 歷史期間改取 cycle period = 35 天(不取一般的20天), 根據 https://individual-trader.blogspot.com/2015/08/blog-post_25.html 的算法可得歷史波動率為 11.86
https://individual-trader.blogspot.com/2021/04/vix.html 提到: 期交所公布的舊制VIX, 乃每個選擇權契約(不管價平,價外, 價內或是近月, 次近月...等)都有自己當時的市價, 全部算出來他們的隱含波動率後, 給予他們不同的權重(ex: 近月或價平權重較大...等), 最後可以算出一個加權值去公布出來; 國外也有研究指出新制與舊制算出的VIX, 雖然計算方法差異很大, 但是答案卻差距很小! 以今天 (2021/08/12) 來說, 新制VIX是如下圖的 19.28
比較歷史波動率(11.86)和VIX(19.28)兩者, 相差不可謂不大, 分別代入期交所的計算機, 算出來的理論價更是驚人地不同; 有些人是乾脆不理期交所的建議, 改用VIX當歷史波動率去做輸入參數, 畢竟它算出的理論價答案會比較接近目前的市價
我用的是自稱 [VIX逼近法] 估計值, 主要邏輯是去把VIX做校正回歸(哈哈)! 此校正回歸法和上段形容的某些人相同, 也是不理期交所的建議, 先改用VIX當歷史波動率去做輸入參數, 自寫的程式算出較接近市價的理論價後, 既然前面提到舊制VIX取隱含波動率的權重時價平最大, 我們的程式便在VIX上做連續的加減並且每次都代回計算, 直至價平的理論價與市價之間, 去互相逼近到一個很小的自設值後才停止, 此時會得到這VIX校正回歸(逼近)法的新波動率估計值. 以今天 (2021/08/12) 來說, VIX逼近法算出的波動率是 14.70, 剛好介於前述兩者(11.86 和 19.28)之間!
在大波動VIX飆高的時候, 逼近法算出的答案有時甚至會比VIX更高, 且絕大多數時候, 比其他我所知的波動率估計法, 都來得更可信 + 有效, 還可以和VIX每15秒公布1次一樣去動態地重新計算最新值! 就算期交所在夜盤時不公布VIX, 程式就把日盤VIX的最後值當最新值代入, 仍然可以動態地去計算想要估計的波動率, 夜盤使用下來的經驗也不錯
VBA部分程式如下: (沒有editor的排版很奇怪, 可讀性不高 哈)
' 校正回歸(逼近) manipulate VIX for volatility estimation
Underly_Strike = Worksheets("DailyCheck").Range("B9").Value - Worksheets("DailyCheck").Range("C9").Value
If Worksheets("Expectation").Range("L6").Value = "Y" Then
If Abs(Underly_Strike) < 8 Then
GapCriteria = 0.5
Else
GapCriteria = 1
End If
Else
If Abs(Underly_Strike) < 25 Then
GapCriteria = 1
Else
GapCriteria = 2
End If
End If
MminusB = Worksheets("DailyCheck").Range("G9").Value - Worksheets("DailyCheck").Range("H9").Value
Do While Abs(MminusB) > (GapCriteria)
If MminusB < 0 Then
Worksheets("Expectation").Range("L17").Value = Worksheets("Expectation").Range("L17").Value + 0.0001
MminusB = Worksheets("DailyCheck").Range("G9").Value - Worksheets("DailyCheck").Range("H9").Value
Else
Worksheets("Expectation").Range("L17").Value = Worksheets("Expectation").Range("L17").Value - 0.0001
MminusB = Worksheets("DailyCheck").Range("G9").Value - Worksheets("DailyCheck").Range("H9").Value
End If
Loop
If Underly_Strike <= 0 Then
Do While (MminusB) > -(GapCriteria)
Worksheets("Expectation").Range("L17").Value = Worksheets("Expectation").Range("L17").Value - 0.0001
MminusB = Worksheets("DailyCheck").Range("G9").Value - Worksheets("DailyCheck").Range("H9").Value
Loop
Else
Do While (MminusB) < (GapCriteria)
Worksheets("Expectation").Range("L17").Value = Worksheets("Expectation").Range("L17").Value + 0.0001
MminusB = Worksheets("DailyCheck").Range("G9").Value - Worksheets("DailyCheck").Range("H9").Value
Loop
End If
0 意見 :
張貼留言