I am building a little Excel file that take some option prices in input and plots the volatility smile/surface. I have a script that reads market prices from the option chain for 3 different maturities and save the option prices in an Excel file. Each time I save option prices I also save the price of the underlying (in this case the DAX index).

I have two problem. The first should be easy to solve, but I just ask you if I'm right. Basically when maturity approaches, the B&S IV that I get applying the Newton-Raphson algorithm is very very low. Roughly, for an ATM position I get something around 5%. Is it because I have to scale up this figure by square root of time to have an annualized value? Or the IV is already annualized and i just have to see for some other error somewhere else?

The second problem is more tricky to me. When I extract the prices from the chain I have noticed that when I then calculate the IV for some strike I always get error (the numerical algorithm fails to converge to the solution). As said, I always use the underlying price at the moment the chain has been extracted so that data should be fine.

Is it possible that is just because for some strikes the option prices weren't updated? Weirdly this happens also for some strike that are not deep OTM. But, if this is the case, what would be the best way to proceed? My goal is plot an updated volatility smile for each maturity.

Should I calculate the price for those strike that I suspect weren't up to date at the moment of the download (I would identify these strikes by looking at those contract for which I'm not able to calculate the IV)?

But to calculate the theoretical price I still need an IV to input in the B&S formula... So should I interpolate the volatilities that I already have and the use the interpolated IV to calculate the missing prices?

For example, this morning with EuroStoxx trading at 3100.94 I recorded for the Call striking at 2825 a bid price of 273.6 and an ask price of 276.8. The time to maturity of the contract is 0.37534246575342467 and if I use r=0.01 I cannot find a solution for the IV. I think it's just because the price wasn't updated to basically these bid/ask call prices are not in sync with the underlying. But it's just a guess.

  • $\begingroup$ Can you give some example data that lead to the two problems you've encountered? $\endgroup$ Commented Jan 9, 2015 at 15:52
  • 1
    $\begingroup$ @opt, just a simple check about your example: the B&S call price $C(3100.94, 2825, r=0.01, 0.37534246575342467, \sigma=0.001)=286.5235 > 276.8$. I'd say you won't get an implied volatility. $\endgroup$
    – Arrigo
    Commented Jan 9, 2015 at 20:50
  • $\begingroup$ So those prices cannot be the right ones for underlying at 3100.94. How do you suggest to proceed to have consistent data and be able to plot a realistic smile? If I use only few prices for which I'm sure I have updated price I can use Vanna-Volga to find the remaining. But what if I don't have updated prices at 25 delta? $\endgroup$
    – opt
    Commented Jan 9, 2015 at 20:55
  • $\begingroup$ @opt, David Durrleman gave you a nice suggestion about put-call parity. If you can get both call and put quotes, I'd start with that. I don't know the Vanna-Volga method, I'll try to look into it. $\endgroup$
    – Arrigo
    Commented Jan 10, 2015 at 14:18

1 Answer 1


Based on the example you gave, it seems that indeed your inputs are inconsistent. The intrinsic call value is $S-e^{-rT}K = 286.52355\dots$, which is higher than the market value, implying that there exists an arbitrage.

Instead, one of your inputs is probably wrong. Even if the interest rate is set to $0$, the intrinsic call value is still above your bid, so I can probably safely assume that the problem is not with the interest rate.

So it has to be with the spot price, or at least the consistency between the spot and call price as you've identified. One of the reasons could indeed be that you've sampled both values at different times.

It can be quite hard to find consistent price feeds for both option and spot prices. One alternative when you have a good enough option feed, is to look at both call and put prices at a given strike, and imply the spot from put-call parity $S = C - P + e^{-rT}K$, where $C$ is the price of the call, and $P$ is the price of the put. The spot price obtained from this method is guaranteed to yield a valid implied vol for these option prices.

As an aside, to improve the accuracy of your implied vol calculation a little bit further if there is a chance of inconsistency between your spot and option price (either when your read the spot directly or you obtain it from put-call parity), I would make sure to use the instrument whose implied vol is least sensitive to the spot. For an instrument with value $V$, it is easy to get $$\frac{\partial\sigma(S)}{\partial S} = -\frac{\partial V}{\partial S}/\frac{\partial V}{\partial\sigma} = -\frac{\Delta}{\nu}$$ So in order to minimize the error in implied volatility due to the error in spot price, you want to use a calibration instrument with the smallest absolute value for the above. When close to the money, straddles minimize this quantity with their delta being close to 0, whereas out-of-the-money instruments should be used when the spot is further above or below the strike.

I can't really comment on your first issue (is your implied vol annualised or not) because it depends on the specific computation you are using to obtain it. However, what you can do to make sure your computation is correct, is to plug the implied vol in the black scholes formula and check that you can back out the price you started with. If the value you used for $T$ in that formula is expressed in years, and you can accurately get back your starting value, then you can rest assured that the implied vol you obtained is indeed annualised.

  • $\begingroup$ Thanks David. Unfortunately I cannot be sure that put & call at the same strike have been updated at the same time so I cannot imply the spot from the P-C parity. What do you mean when you say: "to improve the accuracy of your implied vol calculation a little bit further if there is a chance that your call and put prices could be sampled at slightly different times, I would then imply the vol from the price of the straddle C+P"? If I don't have prices for both Call and Put at the same strike (when OTM and ITM) how can your suggestion help? Thanks again. $\endgroup$
    – opt
    Commented Jan 10, 2015 at 16:13
  • $\begingroup$ @opt I rewrote my original about the straddles, explaining a bit more what I meant, and also pointing out that straddles are only better when you're close to the money. An out of the money call or put should be used to imply the vol when the spot price is far from the strike. $\endgroup$ Commented Jan 10, 2015 at 20:13
  • $\begingroup$ @opt To your first point, being what to do if you are no more able to get accurate prices for call and puts at the same strike and at the same time than to get accurate spot prices at the same time as your option quotes, I would say that you are in a tough spot. What other type of data do you have? If you can only ever get inconsistent call, put and spot prices, I'm afraid you'll have no sensible way to imply market volatilities. $\endgroup$ Commented Jan 10, 2015 at 20:18
  • $\begingroup$ I programmatically extract all the information available in the books exactly at the same time. The problem is that the bid/ask may not be updated for some strikes. Just because market makers are not quoting them for some reasons. I think this problem is common to all data feeds. Since market maker have obligation to quote continuously prices for a sufficient number of strikes (at least up to 25 delta) I was considering Vanna-Volga to extrapolate smile-consistent prices for the wings (DOTM contracts). $\endgroup$
    – opt
    Commented Jan 10, 2015 at 20:53
  • $\begingroup$ Well if you have good data for a sufficiently large number of strikes you can calibrate a stochastic volatility model such as SABR or Heston to known points on the smile and use that to extrapolate to other prices. You only need three points to calibrate a standard SABR model (the wider they are spaced the better of course), for example. But note that extrapolation (as opposed to interpolation) can be dangerous: without market information about the smile of high and low strikes, you're really just guessing. $\endgroup$ Commented Jan 10, 2015 at 21:57

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.