首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Excel中,我需要两个写入公式,用于Black方法,欧洲期权定价;案例

在Excel中,我需要两个写入公式,用于Black方法,欧洲期权定价;案例
EN

Stack Overflow用户
提问于 2017-03-26 14:57:18
回答 1查看 1.3K关注 0票数 1

怎么样。我再次需要你的帮助--问题就在这个话题上--以下是我所拥有的:

第一个看涨期权定价公式:

代码语言:javascript
复制
Function CallBS(Spot As Double, Strike As Double, Maturity As Double, Vol As Double, Rf As Double, Dividend As Double) As Double

Dim D1 As Double
Dim D2 As Double

    D1 = (Application.WorksheetFunction.Ln(Spot / Strike) + (Rf - Dividend + Vol * Vol / 2) * Maturity) / (Vol * Sqr(Maturity))
    D2 = D1 - Vol * Sqr(Maturity)

    CallBS = Spot * Application.WorksheetFunction.NormSDist(D1) * Exp(-Dividend * Maturity) _
    - Application.WorksheetFunction.NormSDist(D2) * Strike * Exp(-Rf * Maturity)

End Function

这部分工作得很好。

第二个看跌期权定价公式:

代码语言:javascript
复制
Function PutBS(Spot As Double, Strike As Double, Maturity As Double, Vol As Double, Rf As Double, Dividend As Double) As Double

Dim D1 As Double
Dim D2 As Double

    D1 = (Application.WorksheetFunction.Ln(Spot / Strike) + (Rf - Dividend + Vol * Vol / 2) * Maturity) / (Vol * Sqr(Maturity))
    D2 = D1 - Vol * Sqr(Maturity)
    
    PutBS = Strike * Application.WorksheetFunction.NormSDist(-D2) * Exp(-Rf * Maturity) _
    - Application.WorksheetFunction.NormSDist(-D1) * Spot * Exp(-Dividend * Maturity)

    End Function

这部分也运作得很好。

现在,我需要编写另一个函数,并增加参数:选项类型:"c“或"p”,对于看涨期权和看跌期权,选项类型(公式)都是通用的。我是这样开始的:

代码语言:javascript
复制
Function OptnPrcng(OType As String, Spot As Double, Strike As Double, Maturity As Double, Vol As Double, Rf As Double, Dividend As Double) As Double

Dim D1 As Double
Dim D2 As Double
Dim CallBS As Double
Dim PutBS As Double

    D1 = (Application.WorksheetFunction.Ln(Spot / Strike) + (Rf - Dividend + Vol * Vol / 2) * Maturity) / (Vol * Sqr(Maturity))
    D2 = D1 - Vol * Sqr(Maturity)
    
    Select Case OType
        Case "c" Or "C"
            OptnPrcng = Spot * Application.WorksheetFunction.NormSDist(D1) * Exp(-Dividend * Maturity) _
            - Application.WorksheetFunction.NormSDist(D2) * Strike * Exp(-Rf * Maturity)
        Case "p" Or "P"
            OptnPrcng = Strike * Application.WorksheetFunction.NormSDist(-D2) * Exp(-Rf * Maturity) _
            - Application.WorksheetFunction.NormSDist(-D1) * Spot * Exp(-Dividend * Maturity)
        Case Else: MsgBox "Choose |c| for call option or |p| for put option valuation"
    End Select


End Function

但不起作用。它给了我一个#ARG错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-26 15:04:06

像这样试试。我真的不知道公式的作用,但它给出了一些结果:)

代码语言:javascript
复制
Option Explicit

Function OptnPrcng(OType As String, _
                Spot As Double, _
                Strike As Double, _
                Maturity As Double, _
                Vol As Double, _
                Rf As Double, _
                Dividend As Double) As Double

Dim D1 As Double
Dim D2 As Double
Dim CallBS As Double
Dim PutBS As Double

    D1 = (Application.WorksheetFunction.Ln(Spot / Strike) + (Rf - Dividend + Vol * Vol / 2) * Maturity) / (Vol * Sqr(Maturity))
    D2 = D1 - Vol * Sqr(Maturity)

    Select Case LCase(OType)
        Case "c":
            OptnPrcng = Spot * Application.WorksheetFunction.NormSDist(D1) * Exp(-Dividend * Maturity) _
            - Application.WorksheetFunction.NormSDist(D2) * Strike * Exp(-Rf * Maturity)
        Case "p":
            OptnPrcng = Strike * Application.WorksheetFunction.NormSDist(-D2) * Exp(-Rf * Maturity) _
            - Application.WorksheetFunction.NormSDist(-D1) * Spot * Exp(-Dividend * Maturity)
        Case Else: MsgBox "Choose |c| for call option or |p| for put option valuation"
    End Select

End Function

我使用Select CaseLCase做了一些修改。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43030337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档