I am currently working with some options OHLC data (30 minute bars) from IBKR for a range of strike prices, maturities and for both calls/puts. For each bar, I am trying to back out the IV (crudely using the 3m treasury as a proxy for the risk-free rate and pyvollib/scipy's optimize.brentq method for the actual IV calculation), but however I am running into an issue.

I have noticed that whenever the IV calculation breaks down - it usually breaks down for ITM options and/or options that are close to expiration (1~10 days), by break down I mean it either returns an abnormally small number or throws an exception (something like: The volatility is below the intrinsic value.)

Why is this happening and are there any other methods/approximations I can use to successfully calculate the IV for ITM/deep ITM options, how do options data providers deal with this? This link (https://github.com/vollib/py_vollib/issues/5) provides some insight but I still cannot fully grasp the numerical instability issues, would appreciate any pointers!

  • 1
    $\begingroup$ Difficult to say the exact reason without a specific example but it's not uncommon for (illiquid) listed options to not have an IV (according to black scholes) due to reasons like being quoted below intrinsic value etc. Providers like Bloomberg simply don't compute (display) an IV in this case. $\endgroup$
    – AKdemy
    Commented Dec 9, 2021 at 18:35
  • $\begingroup$ A simple solution would be to compute the IV from OTM option (instead of using ITM call you use the put of the same strike).. $\endgroup$
    – MainCom
    Commented Dec 10, 2021 at 4:31

1 Answer 1


I noticed this with my data (options on Indexes and Commodities futures). When option is Deep ITM and close to expiration, there is not enough extrinsic value to compensate for the lower intrinsic value and option may have a price below price - strike. As this is not actually true (Dealers can buy below that price but they will always sell above), I believe it's safe to assume the option price must be greater or equal to (price - strike) + interest (or (strike - price) + interest, for DITM Puts).

My solution was to increase the price of the option until further that level and the I didn't have this problem anymore.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.