Есть ли ошибка в FMStable :: ImpliedVol? - PullRequest
0 голосов
/ 05 июня 2018

Я новичок в R и работаю с функцией ImpliedVol в пакете «FMStable», чтобы вычислить подразумеваемую волатильность опций вызова европейского типа.Что меня беспокоит, так это то, что эта функция дает неправильные результаты.Я провел эксперимент, чтобы увидеть, так ли это, и вот что я сделал:

#using certain values to do the test
> ImpliedVol(spot=8,strike=10,expiry = 1,price = 2,intRate = 0.05,tol=1.e-9)
[1] 0.8643101
#use the B-S formula to obtain call option prices
> test=function(x){
+     s=8
+     X=10
+     T=1
+     r=0.05
+     d1=(log(s/X)+(r+x^2/2)*T)/(x*T^(1/2))
+     d2=d1-x*T^(1/2)
+     c=s*pnorm(d1)-X*exp(-r*T)*pnorm(d2)
+     return(c)
+ }
#testing list containing possible volatilities
> sig=seq(from=0.5,to=1,by=0.00001)
#test results
> calltest=test(sig)
> plot(sig,calltest)
> abline(h=2)
> abline(z=0.8643101)#the result from the ImpliedVol function
> abline(v=0.7919,col='blue')

enter image description here

Как вы можете видеть, истинная подразумеваемая волатильностьдолжно быть приблизительно 0,7919 вместо 0,8643101.

Я посмотрел коды, включенные в функцию ImpliedVol, и заметил, что автор использовал функцию uniroot для получения корня в f (ImpVol) = 0.Я не вижу, что здесь не так, и надеюсь, что кто-то может мне в этом помочь.

(Этот вопрос возник из-за того, что я не смог связаться с автором пакета R "FMStable" после того, какмного неудачных попыток.) ​​

1 Ответ

0 голосов
/ 05 июня 2018

Я не занимаюсь финансами, но я вижу, что функция ImpliedVol имеет аргумент carryCost, который имеет значение по умолчанию 0. Установка carryCost, равная intRate, дает вам то, что вы называете "истинно подразумеваемым"Волатильность. "

ImpliedVol(spot=8,strike=10,expiry = 1,price = 2,intRate = 0.05, carryCost = 0.05, 
           tol=1.e-9)
# [1] 0.7918341

См., Например, формулу здесь: http://help.cqg.com/cqgic/default.htm#!Documents/blackscholesgeneralizedextendedmodel.htm

...