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:
- back out Black Scholes vols from quoted options prices (solve BS formula for volatility)
- fit = do a polynomial regression between BS vols versus vols from a local volatility model
- apply cubic splines (in two directions) to fitted vols to allow for interpolation where we don't have a vol point
- Does my approach sound reasonable or is it completely stupid?
- 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.
- 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?
- 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.