2016-07-18 2 views
1

Я пытаюсь написать функцию BS значение опции вызова с помощью VBA:VBA BS функция Опции ошибка синтаксиса

Function BSCallValue(S, K, r, q, tyr, Sigma) 
' returns black-scholes call value (allowing for q=div yld) 
Dim ert, qrt 
Dim DOne, DTwo, NDOne, NDTwo 
ert = Exp(-r * tyr) 
qrt = Exp(-q * tyr) 

DOne = (Log(S/K) + (r - q + 0.5 * Sigma^2) * tyr)/(Sigma * Sqr(tyr)) 
DTwo = (Log(S/K) + (r - q - 0.5 * Sigma^2) * tyr)/(Sigma * Sqr(tyr)) 
NDOne = Application.Norm_S_Dist(DOne) 
NDTwo = Application.Norm_S_Dist(DTwo) 

BSCallValue = (S * qrt * NDOne - K * ert * NDTwo) 


End Function 

Однако проделанный и DTwo линии продолжает давать мне «ошибку синтаксиса».

Что не так с этим?

+0

Какие переменные являются 'S, K, r, q, tyr, Sigma'? почему вы не объявляете типы переменных? для instacne, 'Dim ert, qrt As Double'' –

+0

@ShaiRado - Это должно быть' Dim ert As Double, qrt As Double'. Без второго «двойного» ert будет вариант. – Jeeped

ответ

0

Norm_S_Dist ожидает два параметра. Использование,

NDOne = Application.Norm_S_Dist(DOne, true) 
NDTwo = Application.Norm_S_Dist(DTwo, false) 

NORM.S.DIST (г, кумулятивная)

Синтаксис функции NORM.S.DIST имеет следующие аргументы:

Z (обязательно) Значение, для которого вы хотите распространение.
Кумулятивное (обязательно) Кумулятивное - это логическое значение, определяющее форму функции. Если кумулятивный TRUE, NORMS.DIST возвращает кумулятивную функцию распределения; если FALSE, он возвращает функцию массы вероятности.

+0

Спасибо! Это сработало:) – Luna

Смежные вопросы