Skip to content
All library documents

Put-Call Parity, Interest Rates, and Call-Price Convexity

Article Quant Q&A · Author: AleB

Summary

The document presents a question about recovering call prices from observed SPX put prices using put-call parity, with zero interest rates assumed. It supplies mixed call and put quotes, option types, and increasing strike values, then points to cases where the recovered call prices appear to rise with strike. This conflicts with the expected convex shape of call prices across strikes and motivates questions about the rate assumption, the data, and how to infer interest rates.

No answer resolves the issue, so the examples are evidence of the author's observed pattern, not proof of its cause. The text does not specify quote timestamps, bid-ask handling, contract matching details, or discounting inputs; those details can matter when comparing options through parity. It offers no method for fitting rates or repairing the price curve. The document is best read as a data-quality and option-pricing question about applying parity before using prices to estimate a distribution.

Key ideas

  • The document examines recovering call prices from put quotes using put-call parity with interest rates set to zero.
  • Its listed examples show recovered prices that sometimes increase as strike rises.
  • The author asks whether the rate assumption or another issue explains the apparent convexity violation.
  • The document provides no diagnosis, rate-estimation procedure, or resolution.

Tags

Full text
# Convexity of Call option prices using Put-Call parity relationship


# Convexity of Call option prices using Put-Call parity relationship












I am trying to price vanilla options using a particular Bayesian approach that I have found in a paper. To do that I need to construct a likelihood function, approximating the tail of the distribution using the derivatives of the call prices with respect to the strike. In the paper the work is carried out using only calls, while my dataset includes both calls and puts. since I want to work with both of them I tried to recover the call prices from the observed put prices simply using the put-call parity relationship. The problem is that I expected to find that the call prices recovered in that way respect the convexity in the strike price, so that the price of the derivative decreases when the strike increases.

Here there is an example of what I obtain. These are the initial observed prices for calls and puts (ordered by increasing strike):

[723.15, 713.1, 490.95, 432.0, 421.9, 393.6, 391.7, 386.5, 372.0, 341.81, 0.05, 319.42, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.08, 0.05, 0.05, 0.05, 0.1, 0.05, 223.65, 0.08, 214.74, 0.1, 0.05, 0.1, 0.1, 0.1, 194.04, 0.1, 0.1, 0.1, 0.09, 0.08, 173.38, 0.13, 0.15, 0.15, 0.1, 0.25, 147.35, 0.18, 136.92, 0.15, 0.15, 0.2, 123.6, 0.2, 122.45, 0.2, 118.6, 0.25, 108.0, 0.3, 102.15, 0.3, 0.31, 99.0, 0.35, 92.0, 0.4, 0.46, 77.18, 0.48, 79.7, 0.46, 71.85, 0.55, 66.95, 0.66, 65.0, 0.65, 59.33, 0.75, 52.8, 0.93, 48.0, 1.1, 42.51, 1.38, 40.7, 1.7, 33.75, 2.03, 28.88, 2.7, 26.4, 3.4, 22.1, 4.6, 18.4, 6.0, 14.15, 7.12, 11.25, 7.8, 9.0, 5.7, 11.36, 3.0, 14.0, 2.25, 18.4, 1.37, 23.8, 0.8, 26.4, 0.51, 33.2, 0.3, 36.5, 0.22, 0.2, 0.2, 51.4, 0.15, 0.15, 0.1, 0.1, 0.1, 0.05, 89.15, 0.1, 0.05, 0.05, 201.05, 251.05]

Here instead I have the same observed price after the use of the put-call parity:

[723.15, 713.1, 490.95, 432.0, 421.9, 393.6, 391.7, 386.5, 372.0, 341.81, 340.39, 319.42, 320.39, 310.39, 300.39, 295.39, 290.39, 275.39, 270.39, 265.39, 260.39, 255.42, 250.39, 245.39, 240.39, 235.44, 230.39, 223.65, 225.42, 214.74, 220.44, 215.39, 210.44, 205.44, 200.44, 194.04, 195.44, 190.44, 185.44, 180.43, 175.42, 173.38, 170.47, 165.49, 160.49, 155.44, 150.59, 147.35, 145.52, 136.92, 140.49, 135.49, 130.54, 123.6, 125.54, 122.45, 120.54, 118.6, 115.59, 108.0, 110.64, 102.15, 105.64, 100.65, 99.0, 95.69, 92.0, 90.74, 85.8, 77.18, 80.82, 79.7, 75.8, 71.85, 70.89, 66.95, 66.0, 65.0, 60.99, 59.33, 56.09, 52.8, 51.27, 48.0, 46.44, 42.51, 41.72, 40.7, 37.04, 33.75, 32.37, 28.88, 28.04, 26.4, 23.74, 22.1, 19.94, 18.4, 16.34, 14.15, 12.46, 11.25, 7.8, 9.34, 5.7, 6.7, 3.0, 4.34, 2.25, 3.74, 1.37, 4.14, 0.8, 1.74, 0.51, 3.54, 0.3, 1.84, 0.22, 0.2, 0.2, 1.74, 0.15, 0.15, 0.1, 0.1, 0.1, 0.05, 9.49, 0.1, 0.05, 0.05, 1.39, 1.39]

For completeness these are the respective type of option (call/put) and the strike prices, while the maturity is fixed and very short in this case( the same problem appears also for longer maturities). All options are written on SPX.

[1370.0, 1380.0, 1600.0, 1660.0, 1670.0, 1700.0, 1705.0, 1710.0, 1720.0, 1750.0, 1760.0, 1775.0, 1780.0, 1790.0, 1800.0, 1805.0, 1810.0, 1825.0, 1830.0, 1835.0, 1840.0, 1845.0, 1850.0, 1855.0, 1860.0, 1865.0, 1870.0, 1870.0, 1875.0, 1875.0, 1880.0, 1885.0, 1890.0, 1895.0, 1900.0, 1900.0, 1905.0, 1910.0, 1915.0, 1920.0, 1925.0, 1925.0, 1930.0, 1935.0, 1940.0, 1945.0, 1950.0, 1950.0, 1955.0, 1955.0, 1960.0, 1965.0, 1970.0, 1970.0, 1975.0, 1975.0, 1980.0, 1980.0, 1985.0, 1985.0, 1990.0, 1990.0, 1995.0, 2000.0, 2000.0, 2005.0, 2005.0, 2010.0, 2015.0, 2015.0, 2020.0, 2020.0, 2025.0, 2025.0, 2030.0, 2030.0, 2035.0, 2035.0, 2040.0, 2040.0, 2045.0, 2045.0, 2050.0, 2050.0, 2055.0, 2055.0, 2060.0, 2060.0, 2065.0, 2065.0, 2070.0, 2070.0, 2075.0, 2075.0, 2080.0, 2080.0, 2085.0, 2085.0, 2090.0, 2090.0, 2095.0, 2095.0, 2100.0, 2100.0, 2105.0, 2105.0, 2110.0, 2110.0, 2115.0, 2115.0, 2120.0, 2120.0, 2125.0, 2125.0, 2130.0, 2130.0, 2135.0, 2135.0, 2140.0, 2145.0, 2150.0, 2150.0, 2155.0, 2160.0, 2165.0, 2170.0, 2175.0, 2180.0, 2180.0, 2185.0, 2190.0, 2195.0, 2300.0, 2350.0]

['C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'P', 'C', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'C', 'P', 'C', 'P', 'P', 'P', 'P', 'P', 'C', 'P', 'P', 'P', 'P', 'P', 'C', 'P', 'P', 'P', 'P', 'P', 'C', 'P', 'C', 'P', 'P', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'P', 'C', 'P', 'C', 'P', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'P', 'C', 'C', 'C', 'P', 'C', 'C', 'C', 'C', 'C', 'C', 'P', 'C', 'C', 'C', 'P', 'P']

The only simplified assumption that I did is assuming interest rate equal to 0, so that I obtain the call prices like C = P + S - K. Could the problem derive from that assumption or there is another reason that brings to violate the convexity in K of such call prices? Is there an easy way to infer the IR from my available data? One example of my problem is showed by this pair:

[319.42, 320.39] [1775.0, 1780.0] ['C', 'P'] In my opinion the call price 320.39 obtained by the PCP should be lower than the previous one, because its strike is higher. This repeats many times in my dataset if I apply the PCP.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.