I recently retrieved a large amount of European option data, for call and put prices, from OptionMetrics. Doing so for the same time period I get a file consisting of

62558 rows of call prices & 62557 rows of put prices

Additionally, both files contain on each row some characteristics such as

  • The option ID
  • The date of the price
  • The expiration data of the option
  • Bid/Ask price
  • Strike price

As the option ID's do not match between the call and put options, I am wondering what the best way is to synchronize these data sets? This is needed for instance to calculate the pull-call parity; in that case I need for every call price a corresponding put price.

My suggestion is to look at the strike price, date of option and expiration date and when those match to treat the put and call option as similar, i.e. they belong together. I tried this and immediately noticed that in some cases the corresponding strike price is different for the one or other, even when the dates and expiration dates match.

  • What are other ways to match the put and call data?
  • As the number of rows didn't match, some call options will not have a corresponding put price or vica versa, why is this?
  • $\begingroup$ In reality you won't have exact match between call and put. You could send this question to support@optionmetrics.com and they would look why there is no corresponding put to a certain call contract. $\endgroup$ – Eli Apr 26 '13 at 13:51

European calls and puts have the same volatility value when they are matched by time to expiry and strike. So if you do match them by time to expiry, strike and price date then you can calculate the implied volatility and look for discrepancies, under the assumption that they should be the same, due to put-call parity as you say.

Not all options of the same expiry have the same strike. On any given exchange expiration date, there will be many puts and many calls, with different strikes. Options with different strikes are not a put-call parity match. Instead you will be able to back out the different implied volatilities of different strikes and graph them. That graph (implied vol vs strike for a given expiration) is called the Volatility Smile.

If a particular strike on a given expiration does not have both a put and a call, it is because there was not sufficient interest in the one of the options to deserve a quote. This is usually true for low strike calls and high strike puts, which have a high intrinsic value and as such demand too much capital to trade.


If you load the table above into any RDBMS that supports SQL, the query you could use would be:

ON A.Strike = B.Strike AND
A.Expiration = B.Expiration AND
A.Date = B.Date AND
A.SecurityID = B.SecurityID
WHERE A.CallPut = 'C' AND B.CallPut = 'P'

This maps call option IDs to put option IDs.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.