[英]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.