Keep in mind: Everything we are talking about is simple, easy, plain old Black-Scholes formula ... The PVDiv for a given trading date and expiration is the present value of the dividends that will go ex-dividend between now and expiration. Professionals price index options using the PVDiv model, where they know the PVDivs very precisely and the Black-Scholes yield parameter is zero because all the yield is in the PVDiv. The naive or "easy" model is the yield model where you just take a stab at the true PVDivs by inputting a yield number, which right now is about 1.9% - 2% for SPX. With this model you get "bad" pricing (because yields are lumpy, not constant) and "wrong" deltas (more complex to explain that), but it's not a big deal for retail traders. At your level, your best bet is to get going with the yield model since that will teach you the most while getting your numbers right ... but if you really just want to use Black-Scholes with rate and no yield then just set yield = 0 and "manufacture" your PVDivs according to this formula: PVDiv_fake = SPX * [1 - Exp(-YT)] Where Y = yield and T = DTE.
PVDiv = present value of Dividends. I'll let Steve S fill in the gaps but generally speaking, you need to adjust the spot index price for the dividends that the index constituents will pay between now and the expiration date of the option. This can be done by inputting a constant dividend yield into the formula (good for approximations) or explicitly calculating the discreet dividends and calculating the PVDiv. See snippet from Wikipedia below: https://en.wikipedia.org/wiki/Black–Scholes_model#Black.E2.80.93Scholes_formula Extensions of the model[edit] The above model can be extended for variable (but deterministic) rates and volatilities. The model may also be used to value European options on instruments paying dividends. In this case, closed-form solutions are available if the dividend is a known proportion of the stock price. American options and options on stocks paying a known cash dividend (in the short term, more realistic than a proportional dividend) are more difficult to value, and a choice of solution techniques is available (for example lattices and grids). Instruments paying continuous yield dividends[edit] For options on indices, it is reasonable to make the simplifying assumption that dividends are paid continuously, and that the dividend amount is proportional to the level of the index. The dividend payment paid over the time period {\displaystyle [t,t+dt]} is then modelled as {\displaystyle qS_{t}\,dt} for some constant {\displaystyle q} (the dividend yield). Under this formulation the arbitrage-free price implied by the Black–Scholes model can be shown to be {\displaystyle C(S_{t},t)=e^{-r(T-t)}[FN(d_{1})-KN(d_{2})]\,} and {\displaystyle P(S_{t},t)=e^{-r(T-t)}[KN(-d_{2})-FN(-d_{1})]\,} where now {\displaystyle F=S_{t}e^{(r-q)(T-t)}\,} is the modified forward price that occurs in the terms {\displaystyle d_{1},d_{2}}: {\displaystyle d_{1}={\frac {1}{\sigma {\sqrt {T-t}}}}\left[\ln \left({\frac {S_{t}}{K}}\right)+(r-q+{\frac {1}{2}}\sigma ^{2})(T-t)\right]} and {\displaystyle d_{2}=d_{1}-\sigma {\sqrt {T-t}}={\frac {1}{\sigma {\sqrt {T-t}}}}\left[\ln \left({\frac {S_{t}}{K}}\right)+(r-q-{\frac {1}{2}}\sigma ^{2})(T-t)\right]}
Good post Andrew, except we're trying to keep status1's head from exploding. I'm thinking it's very possible that the whole problem is that status1's formula leaves out the yield parameter ... can somebody just post the dad-blasted general Black-Scholes formula?
Thanks again for all the replies Does SPX pay dividends ? I know the SPY pays dividends but I haven't heard the SPX specifically paying dividends at least in TOS it shows N/A for the dividend yield That's another thing I have not used in the formula since I did not know the SPX pays dividends Where do I get this dividend ? is this published somewhere ? Do I use the SPY dividend as a substitute which is 1.77% according to TOS I have to back and recalculate but I think the main problem was the rounding off of the d1 and d2 which has a very big influence on the final result Just going from 0.4 to 0.3 it cuts the final result by almost half
The dividends are the ones paid by the 500 constituent stocks; the PVDiv calculation is like the SPX calculation with weights and divisor. SPY dividend is better than nothing and close enough to start with, or look up S&P500 yield on Google. Believe me, if you don't include the dividends your Black Scholes numbers will be junk except for very short DTEs.
Here is my calculated price It's getting better but still not quite there yet SPX: 2343.98Strike: 2340Risk-free rate: 0.5%Volatility (IV for 2340 strike): 9.95%DTE: 26 daysMy calculated call price: 27.29TOS call price (mid): 23.15 For some reason the put price is further away My calculated price is 22.47 while TOS shows it as 32.0 I know the dividend is not factored in but I would have to use about 8% dividend to make the put and the call about 3 points away from the TOS price but I think that dividend is too high so I am thinking TOS has something else factored in At least it was a good exercise for me on the formula
It looks like your formula is correct (but you need a more realistic rate and you need the dividend yield) but you're not synchronized with the TOS data. Why don't you practice on the April chain on the attached spreadsheet. If you use the exact numbers on the spreadsheet for SPX, days, rate, yield, vol (that is, if you include all decimal places) then your prices will agree with the market mids on the spreadsheet to at least 12 decimal places. Even if you don't use full precision you can easily get very close. If your formula works for all the options in this chain then it is very likely 100% correct ... then you can tackle the more difficult problem of figuring out the lousy TOS data.
You are correct I need more realistic values for the variables Thanks for the spreadsheet I will play around with it over the weekend Do you have the put values also by any chance ? I want to see how those compare to the results Actually looking back now at the numbers that 27.29 was actually the call price while the 23.15 was the put price in TOS so with the TOS price of 32 the numbers are a little closer than it looked earlier
The spreadsheet included samples for both puts and calls (calls near the bottom) ... if you want to check your formula for puts versus calls at the same strike then all you need to do is verify it satisfies the parity formula: C - P = Exp(-RT) * (F - X) Where F = Exp(RT) * (SPX - PVDiv) if you are using the PVDiv version, and F = Exp[(R-Y)T] * SPX if you are using the yield version. Once you trust your formula and go back to TOS you will need to deal with bad forwards and TOS model details ... if you are serious about nailing TOS prices and greeks you will probably need to learn a little more about the intricacies.
Not intelligently as I don't use TOS numbers for anything ... just going by comments of others, and TOS skews frequently appearing kinked at the money which means bad forwards, and Riggio's reported TOS greeks which are frequently way off any sane values. I have been using their raw chains (bid/ask values only), and those are fine although not as good as IB's.
A case in point, TOS weighted implied volatility for ES May and June options were at a whopping 30+% as of last Friday afternoon. Such elevated IV is way out of line with the SPX and SPY options. For a brief moment, I thought there would be an arbitrage opportunity. Needless to say, that was purely wishful thinking. By the way, I planned to switch from TOS to OptionVue mainly because TOS does not do proper book keeping of adjusted complex positions (To get a reasonable idea of my P/L, I have to manually import as simulated trade each adjustment previously saved in a text file). However, after a test drive of OptionVue for 3 weeks, I have decided to put the plan on hold as I have found some serious problems with OptionVue too. I am waiting for OptionVue to resolve the issues before I shall re-consider. In fairness to OptionVue, their customer support is very good and responsive which is a major consideration for the purchase of any product.
Steve S Here is the recalculated price using your values from the spreadsheet Yield1.27%Time to expiration0.082192Exercise price$2,340.00Current stock price$2,347.74Volatility10.2894%Risk free rate1.30%Put option value23.83Your price from the spreadsheet23.85Tos Price using think back to 30 days 24.2 So the values I got almost match your values and only a little off the TOS price I did not have the call price on the spreadsheet so I am not sure how close it would have been but my calculated price was 31.62 while TOS was at 30.20 so that's not too far off I used 30 DTE while your spreadsheet had some kind of fraction of a day (30.041) so I figured it was close enough
Ok, it's mostly semantics then. Saying 'TOS data' I think raw data )BID, ASK, OI Volume etc) not greeks. Now: why TOS raw data are not as good as IB ? I'm asking because I'm in process of deciding to which live data to choose. I noticed huge changes in P/L over short period of time using TOS and I'm not sure if it is source specific or it is just the way it is (my assumption). Next week I will try to get TOS API (I heard they relaxed rules) - just because it seems easiest for now and will cover live and historic data, if not I will try to find equivalent of RTD for program lang or other source. Status1, I'm watching your quest with interest. It seems I'm not completely grasping what you want to accomplish. Are you tying to match TOS greeks? Why can't you just change IV? How do you evaluate your forwards (how do you evaluate that your greeks are ok)?
That was my point; you can check your formula by adding the parity value to your put. Using the parity formula I gave above with the values on the spreadsheet gives 7.79531665727378 for the parity so the call is the put plus this = 31.6453166572738. See my next post regarding new info on TOS greeks ...
Will be interested to hear your report on this ... I've been told the API is too limited to be useful. First of all, the TOS raw data is fine and dandy ... I check it every day against both IB and LiveVol, and it is fully adequate. The reason it is not quite as good as my IB data has to do with how often they update the chain and how internally synchronized their chain is, strike-wise ... a "good as it can get" chain would have all call and put bid/asks for all strikes sampled at exactly the same time, but you can't expect this from a retail-level data source like TOS or IB. For my IB chains I subscribe to real-time data for all strikes, and then when it's time to pull the data I wait until the chain is static for at least 800 milliseconds before I grab it ... that algo is probably the only reason why my IB data is a little better than TOS.
To all readers of this thread: I swore I would never do this, but today I plunked down the time investment to reverse engineer the TOS RTD greeks for equity index options. That means I figured out how to take the greeks from 6 options and coax them into coughing up the exact rate, DTE, underlying and implied vol that TOS is using for inputs to the Black-Scholes formulas. The results were mildly shocking: At least today, TOS is using yield = PVDiv = 0 as well as one rotten interest rate (0.75%) for the two DTEs I looked at (May and Sep). The yield = 0 thing is VERY bad, so I hope they don't do this when the market is actually open (but it would explain their kinky skews) ... will check this out next week if I have time. My reverse engineering algo works for the PVDiv model all the time, and it works for the yield model when yield=0 ... if TOS is ever using the yield model with yield<>0 then my algo won't work, you need to do something different that I haven't tried to figure out yet. With that caveat, some of you may be interested in implementing this yourself ... if so I can post more details and perhaps a sample spreadsheet. If anybody wants to help with refining this project, I would be interested in the following: 1. Any way(s) to directly get the interest rate(s) and yield(s) that TOS is using. 2. Any way to get RTD to deliver the "theoretical" option premiums coming out of their model (I only know how to get BID/ASK/MARK, which are all useless for this project). If I had just one of these (rate, yield or premium) then it would be easy to expand the algo to work with yield<>0 ...
Marcas: Can you please clarify what you mean by TOS API? It is my understanding there is NO TOS API, only a TDA API. I keep hearing people over the years reference a TOS API, which so far has turned out to be false! I would love to be wrong!