【问题标题】:VBA: Run time error 13 type mismatchVBA:运行时错误 13 类型不匹配
【发布时间】:2016-04-09 21:26:04
【问题描述】:

我想使用牛顿法计算几个看涨期权的到期时间。我尝试在下面的代码中重新创建此方法。 我得到名为functionDerived 的变量的奇怪类型不匹配。该变量是变量function0 的派生形式。此时出现错误 13。

计算中的变量有以下几种:

opT integer;
S double;
sigma double;
K double;
rf double;
q double;
T integer;
optionbidprice double;

这是我的代码:

Public Function calculateOptionExpiration(opT, S, sigma, K, rf, q, T, optionBidPrice)

'************************************************************************
'Variables
'************************************************************************

Dim function0 As Double
Dim functionDerived As Double
Dim optionPrice As Double
Dim differenceZero As Double

Dim Tnext As Integer

Dim Pii As Double
Dim d1 As Double
Dim d2 As Double
Dim ND1 As Double    'Cumulative standard normal probability for value d1
Dim ND2 As Double    'Cumulative standard normal probability for value d2
Dim Nd1accent As Double  'Derivation, N'(x), see book page 456
Dim Nd2accent As Double




'************************************************************************
'Newton's method to calculate time to option expiration T
'************************************************************************

'theta formula page 456, use this in newton's method

'Step 1: f(T) = 0

    Pii = Application.WorksheetFunction.Pi


    d1 = BSD1(S, K, rf, q, T, sigma)

    d2 = BSD2(S, K, rf, q, T, sigma)


    ND1 = Application.NormSDist(d1)

    ND2 = Application.NormSDist(d2)

    Nd1accent = (1 / Sqr(2 * Pii)) * Exp(-d1 ^ 2 / 2)

    function0 = ((-S * Nd1accent * sigma * Exp(-q * T)) / (2 * Sqr(T))) + _
    (q * S * ND1 * Exp(-q * T)) - (rf * K * Exp(-rf * T) * ND2)


'Step 2 : f'(T)

    Nd2accent = (1 / Sqr(2 * Pii)) * Exp(-d2 ^ 2 / 2)

    functionDerived = (q / 2) * (S * Nd1accent * sigma * Exp(-q * T) * 2 ^  (-1) * T ^ (-3 / 2)) _
     - q * (q * S * Nd1accent * Exp(-q * T)) + rf(rf * K * Exp(-rf * T) + Nd2accent)



'step 3: Tnext = T - function0/functionderived, find the T so that option bid - optionprice = 0


Do Until differenceZero = 0

    optionPrice = BSMOptPrice(opT, S, sigma, K, rf, q, T)

    differenceZero = optionBidPrice - optionPrice

    Tnext = T - (function0 / functionDerived)

    T = Tnext

Loop

    calculateOptionExpiration = Tnext

【问题讨论】:

  • functionDerived 的分配中的这一部分真的正确吗:rf(rf * K * Exp(-rf * T) + Nd2accent)?看起来好像您正在尝试调用函数 rf() 而您在上面提到 rf 是双精度。
  • 这确实是问题所在。谢谢!
  • @bovender- 你可以让你的评论成为答案。
  • @Jolien.A 你会这么好心并接受我的回答,这样我就可以赢得一些声誉吗?谢谢。

标签: excel vba


【解决方案1】:

functionDerived 的赋值有误:

rf(rf * K * Exp(-rf * T) + Nd2accent)

rf(...)是一个函数调用,但是参数rf是一个double,所以是类型不匹配。

【讨论】:

    猜你喜欢
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多