I am trying to build a prototype equity volatility surface for pricing european call options, as a way of learning a new programming language that I am looking at.

Is there anything wrong with the following method which I have put together from research:

  1. back out Black Scholes vols from quoted options prices (solve BS formula for volatility)
  2. fit = do a polynomial regression between BS vols versus vols from a local volatility model
  3. apply cubic splines (in two directions) to fitted vols to allow for interpolation where we don't have a vol point


  1. Does my approach sound reasonable or is it completely stupid?
  2. Should i interpolate missing market data before doing this procedure, for missing options quotes? Or should i interpolate the surface vols instead, once I have fitted the IVs? This I see as building the surface. I anticipate further interpolation will be needed for the days between contract expiries, on an adhoc basis if a user requests an IV for a date we don't have on the built surface.
  3. Is this volatility surface only good for one day? Tomorrow, do i need to create a new surface to account for the changed inputs (eg. spot)? Or can i somehow roll forward todays surface tomorrow? Or can i simply use todays surface tomorrow?
  4. How and when do you apply the no-arbitrage constraints that i have read about. Is it done during the fitting, somehow the fitting must consider the constraints?

Thanks in advance for all pointers. I have not built a volatility surface from scratch before and would appreciate any useful tips.

  • 1
    $\begingroup$ Question 2, no. If you were to trade on this, the more frequent you update, the better, as the more accurate representation of the current state of the market you will have. Of course, there needs to be a balance between accuracy and speed. $\endgroup$ Nov 10, 2020 at 13:13
  • $\begingroup$ Not sure what you are actually doing in your second point. Can you be more specific? $\endgroup$ Nov 10, 2020 at 14:44
  • $\begingroup$ @Daneel - I am using Dupire vol model to calculate an IV. First i calibrate that model (calculate the coefficients of the quadratic equation) by doing a regression against the black scholes IV numbers backed out from market. Then with the calibrated model i get a new bunch of IVs that are different from the BS ones. This is what i think is called "fitting". Those fitted IVs are the vol surface, the BS ones are discarded. $\endgroup$
    – brownie74
    Nov 10, 2020 at 16:43
  • $\begingroup$ What do you mean by 'vols from a local volatility model' in your 2nd step? Note that Dupire's formula tells you the instantaneous volatility of the asset at spot S and time t, it is not a implied volatility for an option. $\endgroup$
    – ryc
    Nov 12, 2020 at 12:53
  • $\begingroup$ @ryc I am thinking that I could sort of minimise the distance between the implied volatility curve and the instantaneous volatility curve from Dupire .. and that new number is a "fitted" volatility curve. Or is this nonsense? Why not just use Dupire to build the surface, and forget the BSIVs? My basic understanding, is that my fitted vol should fall between the bid/ask on each BSIV. So i will use Dupire to get a vol number, then i fit that to the market implied vol to get a third vol number optimally between the other two. I plot this third vol. Btw, I intend to create a new surface every day. $\endgroup$
    – brownie74
    Nov 13, 2020 at 11:11

1 Answer 1

  1. Interpolate after building the surface. Won't your step #2 do this for you, do you really need step #3?
  2. Definitely it changes every day. Look up "sticky strike" and "sticky delta" if you want to see how you can use a vol surface on a previous day as an approximation, if you don't have a fresher one.
  • $\begingroup$ William - Step two only generates IVs for the points which i already had. ie. The pairs (strike, expiry). So for the days in between two contract expiries, we do not have an IV. If the user of the surface wants an IV for a date we have not considered during surface generation, then we need to interpolate. For that, i was planning on using cubic splines, since they give a nice curve that looks like a smile, sort of. $\endgroup$
    – brownie74
    Nov 10, 2020 at 16:46

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.