[R-SIG-Finance] Implied Probability Distribution
Ravi S. Shankar
ravis at ambaresearch.com
Thu Aug 30 10:42:36 CEST 2007
Hi R users,
First let me thank Krishna and Anup.
Based on the suggestions I have given the r code along with the sample
data.
Sample data of the nifty index call options that I am using.
Date Expiry Strike Price spot InterestRate Time_Mat
6/28/2002 25/07/2002 1090 7.5 1057.8 0.0698
0.075396825
6/28/2002 25/07/2002 1120 2.25 1057.8 0.0698
0.075396825
6/28/2002 25/07/2002 1110 3.5 1057.8 0.0698
0.075396825
6/28/2002 25/07/2002 1100 5.65 1057.8 0.0698
0.075396825
6/28/2002 25/07/2002 1080 9.55 1057.8 0.0698
0.075396825
6/28/2002 25/07/2002 1070 13 1057.8 0.0698
0.075396825
6/28/2002 25/07/2002 1060 17.7 1057.8 0.0698
0.075396825
6/28/2002 25/07/2002 1050 23.35 1057.8 0.0698
0.075396825
6/28/2002 25/07/2002 1040 28.1 1057.8 0.0698
0.075396825
6/28/2002 25/07/2002 1020 45 1057.8 0.0698
0.075396825
6/28/2002 25/07/2002 1030 38.5 1057.8 0.0698
0.075396825
And the sample code that I am using.
indexdata<-read.table("clipboard",header=T)
n<-length(indexdata[,6])
impvol=delta=0
for(i in 1:n)
{
impvol[i]<-GBSVolatility(indexdata[i,4],"c",indexdata[i,5],indexdata[i,3
],indexdata[i,7],indexdata[i,6],0,0.0001,10000)
}
indexdata<-data.frame(indexdata,impvol)
for(i in 1:n)
{
delta[i]<-GBSGreeks("delta","c",indexdata[i,5],indexdata[i,3],indexdata[
i,7],indexdata[i,6],0,indexdata[i,8])
}
indexdata<-data.frame(indexdata,delta)
tt<-splinefun(indexdata$delta,indexdata$impvol,method="natural",ties="me
an")
splinecoef <- get("z", envir = environment(tt))
k<-indexdata$spot*exp(((indexdata$InterestRate)+0.5*(splinecoef$y)^2)*(i
ndexdata$Time_Mat)-(qnorm(splinecoef$x)*(splinecoef$y)*sqrt(indexdata$Ti
me_Mat)))
call_price<-GBSOption(TypeFlag = "c", S = indexdata[1,5], X =k, Time
=indexdata[1,7], r =indexdata[1,6], b = 0, sigma =splinecoef$y)
hh<-data.frame(indexdata$Strike,indexdata$Price,indexdata$spot)
mm<-data.frame(k,call_price at price,indexdata$spot)
final_data<-data.frame(rbind(as.matrix(hh),as.matrix(mm)))
final_data1<-final_data[order(final_data$indexdata.Strike),]
i=final_data1$indexdata.spot-final_data1$indexdata.Strike
final_data1<-data.frame(final_data1,i)
c2<-final_data1[(order(abs(final_data1[,4]))[1]),2]
c3<-final_data1[((order(abs(final_data1[,4]))[1])+1),2]
c1<-final_data1[((order(abs(final_data1[,4]))[1])-1),2]
imp_prob<-exp(indexdata[1,6]*indexdata[1,7])*((c1+c3-(2*c2))/16)
Now I have the following question:
The differences between the strikes are not even. I have used (4)^2 in
computing imp_prob.
Please tell me if I am proceeding in the correct direction in my
computing of implied probability.
Thank you in advance for your response.
Regards,
Ravi Shankar S
-----Original Message-----
From: Krishna Kumar [mailto:kriskumar at earthlink.net]
Sent: Wednesday, August 22, 2007 7:37 AM
To: Ravi S. Shankar
Cc: r-sig-finance at stat.math.ethz.ch
Subject: Re: [R-SIG-Finance] Implied Probability Distribution
> Using non overlapping data of one month call option I have estimated
the
> implied volatility using the GBSVolatility of fOptions. Using these
> implied volatilities I have obtained delta using GBSGreeks of the same
> package.
>
> Using the natural splines I have plotted the implied volatility and
> delta.
>
>
>
> I have two questions (this might be trivial but would be glad for
> insight):
>
> 1) How do I extrapolate to obtain the tail?
>
I am afraid there is no easy answer to this either you could flat
forward extrapolate or use your fitted functional form/spline to
extrapolate and obtain the vols for those strikes in the wings.
Stability is the key and using something that is too flexible could
sometimes hurt in this case.
> 2) How do I back out the option price? (We can use the Black- Scholes
> model (GBSOption of fOptions), however my understanding is it requires
> implied volatility and strike, but we have implied volatility and
delta)
>
>
>
I couldn't find a version of the Breeden & Litzenberger paper but here
is an easy read on this use eqn 3 on Page-4.
http://www.bcb.gov.br/ingles/estabilidade/2002_nov/ref200201c62i.pdf
In essence you use a continuum of Call prices and take the 2nd
derivative with respect to Strike(K) and for this take the centered
difference
for starters there are some higher order differences that you can mess
with later.
Also if you have the delta you can always map that to a strike K using
the formula in http://www.mathfinance.org/formulas_u/Vanilla/node20.html
If you need further help it would help if you provide further
information and possibly the data that you are using for this list to be
of further help.
Best
Krishna
>
>
> Thank you in advance for the help.
>
> Regards,
>
> Ravi
>
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-SIG-Finance at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only.
> -- If you want to post, subscribe first.
>
>
More information about the R-SIG-Finance
mailing list