Skip to content
All library documents

Estimating Forward Prices from Option Put-Call Parity

Article Quant Q&A · Author: Hekri

Summary

The document considers estimating an underlying forward from a historical option chain by pairing calls and puts with the same strike and expiry. The proposed simple calculation uses the call-put price difference plus strike, but this omits discounting and may be only a rough estimate. Put-call parity relates the call-put difference to spot minus the discounted strike, so observations across strikes can be used to estimate spot and the discount factor.

The suggested method is a linear regression of call-put differences against strike for one maturity. Its intercept estimates spot, while its slope implies the discount factor. The forward then requires carrying spot to maturity using the interest rate and dividend yield. The answer recommends comparing estimates with observed spot or forward values to assess accuracy. Results depend on reliable option prices, suitable rate and dividend assumptions, and the parity relationship; the document does not provide a quantified error analysis or a worked regression.

Key ideas

  • Pair calls and puts by strike and expiry to apply put-call parity.
  • The call-put difference relates to spot less the discounted strike, rather than spot less the undiscounted strike.
  • A regression across strikes can estimate spot from its intercept and the discount factor from its slope.
  • Convert the estimated spot to a forward using interest rates and dividend yield.
  • Check estimates against observed market values because the method's accuracy depends on inputs and quote quality.

Tags

Full text
# Calculate forward price based on option chain


# Calculate forward price based on option chain












I've got historical data for a spy option chain which looks as follows

```
   UnderlyingSymbol  UnderlyingPrice Exchange          OptionRoot  \
          SPY           289.84        *            SPY180904C00150000   

      Type  Expiration    DataDate  Strike    Last     Bid  \
      call  09/04/2018  09/04/2018   150.0  136.71  139.86   

       Ask  Volume  OpenInterest  T1OpenInterest  
     140.12   0           251           0
```

I am trying to calculate for hedge purposes the underlying future/forward associated with each expiration date. My attempt would be to group put and calls by expiration and strike. Take the difference between put mid price and call mid and add the minimum difference of each group to the strike. Python code would look like this

```
df['Price'] = (df['Bid'].values + df['Ask'].values) / 2
df['Maturity'] = (df['Expiration'] - df['DataDate']).dt.days / 365
c = df[df.Type == 'call'].groupby(['Expiration','Strike'])['Price'].first()
p = df[df.Type == 'put'].groupby(['Expiration','Strike'])['Price'].first()
df = df.join((c - p).rename('CP_diff'), on=['Expiration','Strike'])
df = df[~df.CP_diff.isna()]
df['Forward'] = df['CP_diff'].values + df['Strike']
```

Would my approach be valid as a crude approximation? What other possibilities would I have, besides pulling the data from bloomberg.

## Answer by David Duarte (score 3, accepted)

https://quant.stackexchange.com/a/50983

Depends on how accurate you need your analysis. And do you want the Spot price or the Forward price?

You seem to be using put call parity to solve for the underlying:

$$ c + Xe^{-rT} = S + p $$

and so:

$$S = (c-p) + Xe^{-rT}$$

You can find the market implied price of the underlying through a regression (for a given maturity), because:

$$(c-p) = S - Xe^{-rT}$$

and in your linear regression the dependent variable would be $Y=(c-p)$, the constant will be the $S$ and from the intercept you can get the discount factor $b = -e^{-rT}$.

$$Y = a + bX$$

However, this gives you the spot price and to get the forward price you will need to account for discount rate and dividend yield:

$$ F = Se^{(r-q)T}$$

You already have the discount factor from the regression and for the dividend yield you will have to use some average dividend for the index you want.

In any case, you should test a few option chains against the actual spot (or forward price) to verify yourself how crude your approximation is.

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.