vollib/py_vollib

Deep ITM European Options

MagicEthan opened this issue · 4 comments

Is this package available for computing European options' IV and Greeks???

Sometimes for deep ITM European options, the market price can be smaller than the intrinsic value. This raises the error:

py_lets_be_rational.exceptions.BelowIntrinsicException: The volatility is below the intrinsic value.

But such data do exist in practical trading

I found some useful reference:

https://quant.stackexchange.com/questions/10210/lower-bound-of-itm-calls-when-computing-implied-volatility

https://quant.stackexchange.com/questions/2678/true-or-false-an-options-price-will-always-be-greater-than-or-equal-to-its-int

So this is not a bug, but perhaps we'd better write an exception, return some message or an extreme value. This does happen in the real world.

If you look at it analytically, there is no implied volatility that matches an option price below the intrinsic value, hence the exception. An option price is increasing in volatility and equal to the intrinsic value for zero volatility (the stock doesn't move at all, so value of the option is equal to its intrinsic value), so a price below the intrinsic value corresponds to a negative volatility which is a contradiction.

I also ran into this problem when trying to get Black-Scholes implied volatilities of European call options under Heston dynamics. In my case this could be traced back to numerical instabilities causing the calculated Heston price to be marginally smaller than the intrinsic value. So what I did was to catch the exception with "try except" and set implied vol equal to 0.

Thank you.

Adding to @bstemper I set de iv value to just above 0, i.e 0.1, when handling de BelowIntrinsicException. The impact on the black sholes price will be negligible but it will avoid divide by zero warning when calculating greeks.