What causes the call and put volatility surface to differ?

I currently have a local volatility model that uses the standard Black Scholes assumptions.

When calculating the volatility surface, what causes the difference between the call volatility surface, and the put surface?

-
Recall that options on shares of stocks are usually American style, where put-call parity does not hold, so neither the equality in volatility. – FKaria Feb 5 '12 at 2:11

The reason for put and call volatilities to appear different is that the implied vol has been calculated using different drift parameters than those implied by the market.

Let's take everything in the model as given except the interest rate $r$ and the volatility $\sigma$. For European options we have the Black-Scholes formula for put and call values $V_{P,C}$

$$V_{P,C}=BS_{P,C}(r,\sigma)$$

Now, although it is common practice to run this equation backwards to "imply" the volatility $\sigma$

$$\sigma_{\text{Imp}} = BS^{-1}_{\sigma}(r,V)$$

we can see that from a mathematical point of view we could imply $r$ instead

$$r_{\text{Imp}} = BS^{-1}_{r}(\sigma,V).$$

Obviously, using a different $r$ affect options prices and therefore implied volatilities.

Consider now the consequences of receiving prices from someone using the Black-Scholes model. For concreteness I will take $T=1, K=S=100$ and no carry cost. Let's say you think $r=1\%$. I give you put and call prices of $7.95$ and $11.80$. You will get a put vol of $21.3\%$ and a call vol of $28.6\%$. Seem familiar?

That's because I actually generated those prices using $r=4\%$. If you had used the same drift parameter $r$ as I had employed, you would have computed both volatilities to be $25\%$.

Generally, risk-free interest rates are not too hard to pin down, but we have other effects on drift where the parameters are not so obvious. This includes dividends, borrow costs and funding costs. Each of these terms is typically treated as a deterministic "carry cost" but even in the simple case of European options it is not necessarily clear what values should be used for them.

So to your answer your question, the difference between put and call volatility surfaces is a symptom of your drift parameters failing to match those of the market.

-
Interesting. Is it possible / feasible to use put-call parity as a constraint when calibrating your model to market data? – Olaf Jan 29 '15 at 21:59
You can throw it into the objective function, but typically the errors are within the bid-offer spread. When they are not, that generally implies that you should be using a better borrow rate, which can be calibrated either as part of the overall vol surface fit, or in a separate pre-calibration stage that only looks at parity. Also worth noting is that, usually one calibrates (almost) exclusively to the out-of-the-money options. – Brian B Jan 30 '15 at 19:23

Implied volatility is the same for European call and European put options (it can be seen from Put-Call parity). If you use non-parametric local volatility model and fit it to implied volatility surface, then you should get exact fit. Therefore, local volatility surface should be the same for call and put options.

-
The put-call parity says that the implied volatility of a put and call at the same strike and time is the same, but in the market thats not true. And I was wondering why and what causes the put surface to be so different from the call surface. – Jeffrey Feb 4 '12 at 23:00
@Jeffrey Yes, it holds only for put and call with the same strike and time to maturity. What do you mean by "but in the market thats not true"? Do you mean that you observe different implied volatility for put and call with the same strike and time to maturity? – Alexey Kalmykov Feb 4 '12 at 23:10
Yes thats exactly what I mean. For example, deep in the money puts have a super high implied volatility is this because there is no volume on them so the price of the option is manipulated? – Jeffrey Feb 4 '12 at 23:54
@Jeffrey Yes, as far as there is no volume, the price is not representative. You shouldn't use ITM option prices for calibration of your local volatility model. – Alexey Kalmykov Feb 5 '12 at 10:33
{"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 1, "mathjax_display_tex": 1, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0, "katex": 0, "math-container": 0, "wp-katex-eq": 0, "align": 0, "equation": 0, "x-ck12": 0, "texerror": 0, "url": "http://quant.stackexchange.com/questions/2906/what-causes-the-call-and-put-volatility-surface-to-differ", "fetch_time": 1469688086000000000, "content_mime_type": "text/html", "warc_filename": "crawl-data/CC-MAIN-2016-30/segments/1469257828009.82/warc/CC-MAIN-20160723071028-00037-ip-10-185-27-174.ec2.internal.warc.gz", "warc_record_offset": 194408630, "warc_record_length": 19495, "token_count": 998, "char_count": 4197, "score": 3.53125, "int_score": 4, "crawl": "CC-MAIN-2016-30", "snapshot_type": "latest", "language": "en", "language_score": 0.9188096523284912, "file_path": "/sailhome/yjruan/project/latent-lm/data/processed/finemath-4plus/finemath-4plus/train-00055-of-00064.parquet"}