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

msalese massimo.salese at gmail.com
Tue May 17 11:36:36 CEST 2011


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

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.



More information about the R-SIG-Finance mailing list