I am using end of day options data and want to extract discrete dividend information contained in the option prices. I am doing this for ETFs like SPY where I know the dividend schedule. These are the steps I am doing:
- Create a "seed" div dictionary which has known div dates but approx. div values
- Let's say the 1st and 2nd div dates are 19-Mar-21 and 18-Jun-21. Find all options that expire >= 19-Mar and < 18-Jun. I get 4 expiries: 31-Mar, 16-Apr, 21-May, 18-Jun.
- For each expiry, I find the strike closest to the forward by finding min(callprice-putprice). I get the call and put options at this strike.
- I then minimise for Call implied vol - Put implied vol for a range of divs (0.5initialestimate to 1.5initialestimate) using the brentq algo to get the "optimal" multiplier.
- I average the multipliers I get for each expiry. This is the multiplier to be applied to the initial div estimate for first dividend date to get a final div estimate.
- I repeat this process to refine div estimates for all div dates.
I expected this process to yield results that were v tight. But doing this across several days yields a very wide range of estimates (Eg. For SPY, I am seeing estimate for Mar-21 div varying from 0.75 to 1.75 when actual div is likely to centre around 1.4)
Appreciate any thoughts/ inputs into this, including any alternative approaches I could try. I did find a relevant thread here: Implied Dividend from American Options (in practice) but didn't fully understand the implementation.