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.


1 Answer 1


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.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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