簡體   English   中英

VBA:運行時錯誤13類型不匹配

[英]VBA: Run time error 13 type mismatch

我想使用牛頓方法計算一些看漲期權的到期時間。 我嘗試在下面的代碼中重新創建此方法。 我收到一個奇怪的類型不匹配的變量,稱為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是雙rf型,因此是類型不匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM