[R-SIG-Finance] fOptions American options Implied Volatility

stefano iacus stefano.iacus at unimi.it
Tue May 17 18:09:15 CEST 2011


On 17 May 2011, at 11:36, msalese wrote:

> Hi guys,
> working with RMetrics/fOptions library I see there isn't a function to
> compute iv on American Options so I've build this function to do the job:
> 
> library(fOptions)
> 
> impVolAmCall<-function(pmkPrice,Und,Strike,expTime,rInt,pb){
> auxAmCall<-function(pVol,pmkPrice,pUnd,pStrike,pexpTime,prInt){
>   at<-CRRBinomialTreeOption(TypeFlag = "ca", S = pUnd, X=pStrike,Time
> =pexpTime, r = prInt, b = pb, sigma = pVol, n = 15)
>   return(pmkPrice-at at price)
> }
> 
> limpVol<-uniroot(f=auxAmCall,lower=0.05,upper=2,tol=0.001,pmkPrice=pmkPrice,pUnd=Und,pStrike=Strike,pexpTime=expTime,prInt=rInt)
> return(limpVol$root)
> } 
> 
> After that I downloaded options price from Italian IDEM on G.MI (Generali
> Assurance) and loaded all in the obsPrice3 data.frame:
> 
> str(obsPrice3)
> 'data.frame':	12 obs. of  6 variables:
> $ expDays : num  59 59 59 59 59 59 59 59 59 59 ...
> $ YExpDays: num  0.234 0.234 0.234 0.234 0.234 ...
> $ Bid     : num  2.219 1.726 1.249 0.845 0.544 ...
> $ Ask     : num  2.266 1.769 1.293 0.883 0.579 ...
> $ Strike  : num  13.5 14 14.5 15 15.5 16 16.5 17 17.5 18 ...
> $ MidPrice: num  2.242 1.747 1.271 0.864 0.561 ...
> 
> 
> expDays YExpDays    Bid    Ask Strike MidPrice
> 1       59 0.234127 2.2190 2.2660   13.5  2.24250
> 2       59 0.234127 1.7255 1.7690   14.0  1.74725
> 3       59 0.234127 1.2490 1.2930   14.5  1.27100
> 4       59 0.234127 0.8450 0.8830   15.0  0.86400
> 5       59 0.234127 0.5445 0.5785   15.5  0.56150
> 6       59 0.234127 0.3325 0.3670   16.0  0.34975
> 7       59 0.234127 0.1895 0.2180   16.5  0.20375
> 8       59 0.234127 0.1010 0.1280   17.0  0.11450
> 9       59 0.234127 0.0485 0.0760   17.5  0.06225
> 10      59 0.234127 0.0115 0.0445   18.0  0.02800
> 11      59 0.234127 0.0005 0.0830   18.5  0.04175
> 12      59 0.234127 0.0005 0.0775   19.0  0.03900
> 
> Now I'd like to compute the iv for all the chain so I've used mapply:
> 
> mapply(FUN=impVolAmCall,obsPrice3$MidPrice,obsPrice3$Strike,Und=15.75,expTime=59/252,rInt=0.01,pb=0.01)
> but R replay with:
> 
> Error in uniroot(f = auxAmCall, lower = 0.05, upper = 2, tol = 0.001,  : 
> f() values at end points not of opposite sign

this means that f() never crosses zero, either always negative or always positive. This happens a bunch of times when you try to estimate IV from, say, a "wrong" model or if market prices are way too off the theoretical (up to the wrong model for these data) price.

no real clue, just some experience

stefano


> 
> The point is that for otm options I'm not able to find zero in auxAmCall
> (auxiliary function) coded inside impVolAmCall function. 
> I'm new to R so I think that something is wrong in my code, can someone help
> me ? 
> 
> Thanks
> Massimo
> http://r.789695.n4.nabble.com/file/n3528629/obsPrice3.rda obsPrice3.rda 
> 
> --
> View this message in context: http://r.789695.n4.nabble.com/fOptions-American-options-Implied-Volatility-tp3528629p3528629.html
> Sent from the Rmetrics mailing list archive at Nabble.com.
> 
> _______________________________________________
> R-SIG-Finance at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only. If you want to post, subscribe first.
> -- Also note that this is not the r-help list where general R questions should go.


-----------------------------------
Stefano M. Iacus
Department of Economics,
Business and Statistics
University of Milan
Via Conservatorio, 7
I-20123 Milan - Italy
Ph.: +39 02 50321 461
Fax: +39 02 50321 505
http://www.economia.unimi.it/iacus
------------------------------------------------------------------------------------
Please don't send me Word or PowerPoint attachments if not 
absolutely necessary. See:
http://www.gnu.org/philosophy/no-word-attachments.html



More information about the R-SIG-Finance mailing list