# 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

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.

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.