On 5/16/16 AXP stock closed with a price of 64.07. Yahoo Finance reports an implied volatility of 20.58% for this out of the money call option:
--------------------------------------------------------------------------------
Strike Contract Last Bid Ask Change %Change Volume Open Implied
Name Intrst Voltlty
--------------------------------------------------------------------------------
65.00 AXP161021C00065000 2.85 2.96 3.05 -0.15 -5.00% 9 1773 20.58%
--------------------------------------------------------------------------------
Tried to see if I could get an implied volatility close to what Yahoo Finance got using this RQuantLib call:
AmericanOptionImpliedVolatility(type="call", value=3.05, underlying=64.07,
strike=65, dividendYield=0.02189756, riskFreeRate=0.3070664,
maturity=0.4308695, volatility=0.1817867)
Instead of getting an implied volatility, I got this error:
Error in americanOptionImpliedVolatilityEngine(type, value, underlying, :
root not bracketed: f[1e-07,4] -> [3.468527e+00,4.929779e+01]
Pricing this option using RQuantLib with Yahoo suggested volatility of 0.2058 produces a higher option price of 7.48:
AmericanOption(type="call", underlying=64.07, strike=65,
dividendYield=0.02189756, riskFreeRate=0.3070664,
maturity=0.4308695, volatility=0.2058, engine="CrankNicolson")
value delta gamma vega theta rho divRho
7.4888 0.8003 0.0313 NA NA NA NA
RQuantLib's call to compute implied volatility fails because the option price of 3.05 if far less than 7.48. I don't have a choice on what option price I enter to compute implied volatility. I have to use the market price. The market price reported by Yahoo could be wrong. Checking with Google Finance and CBOE option quote for this option shows that the Ask price of 3.05 is correct.
With a market price of 3.05, how does Yahoo Finance manage to compute implied volatility of 20.58%? Is it possibly using a different model than what is used by QuantLib? Or, is there something wrong in my input to RQuantLib?