COCO研究院

 找回密碼
 註冊
搜索
查看: 2081|回復: 0

为什么fb的put call算出隐含波动率相差这么大?

[複製鏈接]
發表於 13-3-9 22:14 | 顯示全部樓層 |閱讀模式
 我用两分法计算的隐含波动率,取4月13日到期的,利率用的10年期国债,股息率把上四个季度的股息相加除以前收盘,时间是距离4月13日天数收盘的天数除以365,结果如下,fb 和 c 的call put算出来相差很多,aapl比较接近,谁能告诉我为什么?



Parameters
fb
fb
c
c
aapl
aapl
Stock Price
28.58
28.58
45
45
430.58
430.58
Strike Price
28.5
29
44
46
430
435
Time to maturity
0.09863
0.09863
Risk Free Rate
2.00E-02
Dividend Yield
0
0
8.89E-04
8.89E-04
0.0187
0.0187
Option Price
1.1
1.28
2.26
1.85
18.38
15.95
Result
Implied       Volatility
0.288569
0.403835
0.298672
0.400219
0.335815
0.333568


程序帖在这里,这是我从维基百科上下载的,只修改了参数输入部分,

Public TargetColume As Integer

  Function BlackScholesCall( _
     ByVal S As Double, _
     ByVal X As Double, _
     ByVal T As Double, _
     ByVal r As Double, _
     ByVal d As Double, _
     ByVal v As Double) As Double
     Dim d1 As Double
     Dim d2 As Double
     d1 = (Log(S / X) + (r - d + v ^ 2 / 2) * T) / v / Sqr(T)
     d2 = d1 - v * Sqr(T)
     BlackScholesCall = Exp(-d * T) * S * Application.NormSDist(d1) - X * Exp(-r * T) * Application.NormSDist(d2)
   End Function

  Function ImpliedVolatility( _
     ByVal S As Double, _
     ByVal X As Double, _
     ByVal T As Double, _
     ByVal r As Double, _
     ByVal d As Double, _
     ByVal Price As Double) As Double

    Dim epsilonABS As Double
     Dim epsilonSTEP As Double
     Dim volMid As Double
     Dim niter As Integer
     Dim volLower As Double
     Dim volUpper As Double

    epsilonABS = 0.0000001
     epsilonSTEP = 0.0000001
     niter = 0
     volLower = 0.001
     volUpper = 1

    Do While volUpper - volLower >= epsilonSTEP Or Abs(BlackScholesCall(S, X, T, r, d, volLower) - Price) >= epsilonABS And epsilonABS <= Abs(BlackScholesCall(S, X, T, r, d, volUpper) - Price) >= epsilonABS
       volMid = (volLower + volUpper) / 2
       If Abs(BlackScholesCall(S, X, T, r, d, volMid) - Price) <= epsilonABS Then
         Exit Do
       ElseIf ((BlackScholesCall(S, X, T, r, d, volLower) - Price) * (BlackScholesCall(S, X, T, r, d, volMid) - Price) < 0) Then
         volUpper = volMid
       Else
        volLower = volMid
       End If
       niter = niter + 1
     Loop

    ImpliedVolatility = volLower

  End Function

  Function CalcImpliedVolatility()

  Dim S, X, T, r, d, Price As Double
   Dim volatility As Double

  S = ActiveSheet.Cells(6, TargetColume).Value
   X = ActiveSheet.Cells(7, TargetColume).Value
   T = ActiveSheet.Cells(8, "B").Value
   r = ActiveSheet.Cells(9, "B").Value
   d = ActiveSheet.Cells(10, TargetColume).Value
   Price = ActiveSheet.Cells(11, TargetColume).Value

  volatility = ImpliedVolatility(S, X, T, r, d, Price)

  ActiveSheet.Cells(14, TargetColume).Value = volatility

  End Function

Private Sub CommandButton1_Click()

  CalcImpliedVolatility

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
TargetColume = Target.Column
End Sub

評分

參與人數 1金錢 +1 收起 理由
sentinels + 1 大大那麼厲害,有在研究美股選擇權,我只知道.

查看全部評分

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-12-2 16:46

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |