Cobweb Scripts Data
Home
Programs
Tools
Data
About
thinkorswim End of Day Option Data
Background
FREE end of day option data is hard to come by.
In a world where stock data is given out like candy, option data remains hidden
behind paywalls.
Before I started this project, I scoured the internet to see if anyone had already
compiled free option data.
While I did find some (they are listed at the bottom of the page under Alternative
Sources), I found that even the best sources were limited to recent times.
There was only one place that retail traders could get option data that stretched to
over 20 years ago: thinkorswim.
There was, however, one problem: data can only be exported one day at a time.
Going back to the internet, people on subreddits had come to the same conclusion: the
process was too slow, with some posts talking about how it took days to export one
ticker’s end of day option data.
Despite that, I attempted the process myself.
I tried reading network data, but from what I could tell, the data was encrypted
until it reached the thinkorswim application.
I only have a basic, conceptual idea of network security, so I did not find it
feasible to figure out how to perform a man-in-the-middle interception to easily
grab the data.
This left me with automating the download process through thinkorswim itself.
At a cursory glance, you would assume an auto clicker or a simple macro would be
enough to export the data.
This turned out not to be the case.
There are so many caveats and exceptions regarding thinkorswim’s interface that it
effectively acts as a deterrent against this sort of GUI automation.
Eventually, after several months, I created a proof of concept that was robust enough
to export data, which leads us to here.
Broker Data Weakness
When talking about option data, a point comes up about the quality and thinkorswim
data is no exception.
For groups, such as hedge funds, looking at option data is related to seeking alpha.
They are attempting to use the data to enhance a model or build a new model to take
advantage of what they believe to be unrealized value.
But why is broker data considered low quality for this purpose?
Well data must be usable and representative of real-life circumstances.
End of day option data from brokers usually represent the final snapshot of the last
trades before the closing bell; however, data for modeling option prices may need to
be some time before the closing bell to represent real life liquidity and prices.
On top of that, brokers do not particularly care to capture the data itself as
accurately as possible.
You may have data that has not been properly adjusted, data that has missing trades,
data that may just be flat out inaccurate, or dirty and unprocessed.
Despite all these weaknesses, I believe retail traders still deserve a chance to
glance over something before opening their wallets.
Even if it is not the best, at least they have an opportunity to peek before taking the next step.
thinkorswim Specific Weaknesses
-
thinkorswim data seems one day behind.
-
Example 1, in META:
If the stock closed at $28.19 [1] on May 30, 2012 then thinkorswim has
that data in the May 31, 2012 csv file.
-
Example 2, in META:
The ticker change for META (FB to META) occurred before market open on
June 9, 2022 is reflected in the June 10, 2022 csv file.
-
Stock splits are not applied retroactively.
-
Example 1, in NVDA:
They have had 4 stock splits since January 2, 2003 (2x, 1.5x, 4x, 10x)
for a total of 120x split [2].
If cross referenced with Yahoo Finance, the data as of October 7, 2024,
says the price at close on January 2, 2003 was $0.10 [3].
However looking at the csv file for January 3, 2003 (remember the
problem about a day behind mentioned above), the price is listed as
$12.31.
If you do 12.31 / 120 = $0.10258 ~ $0.10.
This matches Yahoo Finance’s data.
Thus in 2003, the price really was $12.31, but with the splits
retroactively applied to it, the price becomes $0.10.
Sources:
-
Yahoo Finance - META May 30, 2012
-
companiesmarketcap.com - NVDA
-
Yahoo Finance - NVDA January 2, 2003
thinkorswim Data Format and Specification
I did not include anything thinkorswim considers a holiday or weekend.
In other words, all data provided here is considered a trading day, by thinkorswim’s
standards.
The follow data was extracted in the csv file (they may not be filled in every file):
- Stock LAST
- Stock NET CHANGE
- Stock VOLUME
- Stock OPEN
- Stock HIGH
- Stock LOW
- Option EXPIRATION DATE
- Option DAYS-TO-EXPIRATION
- Option STRIKE
- Option BID
- Option ASK
- Option LAST (LAST X)
- Option VOLUME
- Option OPEN INTEREST
- Option DELTA
- Option GAMMA
- Option VEGA
- Option THETA
- Option EXTRINSIC
- Option RHO
- Option MARK
Feedback
Please feel free to get in touch with me using one of the accounts on the
About page. I am open to requests!
Dataset
Links to the data, the range exported (format of [MM/DD/YYYY]), and notes about the
data are available below.
All tickers follow thinkorswim notation.
Indices
-
SPX (ZIP, 1.19GB)
- Range: [01/03/2003 - 06/28/2024]
-
VIX (ZIP, 46.6MB)
- Range: [02/28/2006 - 06/28/2024]
-
Not included because no option chain:
[12/04/2015], [01/19/2016], [04/18/2016], [04/25/2016], [07/11/2016],
[08/15/2016], [06/05/2017], [09/28/2017], [05/14/2018], [05/21/2018],
[05/29/2018], [07/16/2018], [08/27/2018], [10/12/2018], [10/15/2018],
[12/31/2018]
ETFs
-
IWM (ZIP, 365MB)
- Range: [01/03/2003 - 06/28/2024]
-
Not included because no option chain:
[12/04/2015]
-
QQQ (ZIP, 382MB)
- Range: [01/03/2003 - 06/28/2024]
-
Most of this range is broken but still included:
[12/01/2004 - 03/23/2011]
-
SPY (ZIP, 683.7MB)
- Range: [01/11/2005 - 06/28/2024]
Stocks
-
AAPL (ZIP, 222.9MB)
- Range: [01/03/2003 - 06/28/2024]
-
AMD (ZIP, 92.2MB)
- Range: [01/03/2003 - 06/28/2024]
-
AMZN (ZIP, 375.6MB)
- Range: [01/03/2003 - 06/28/2024]
-
GME (ZIP, 90.6MB)
- Range: [01/03/2003 - 06/28/2024]
-
Missing:
[06/10/2019] (Stuck loading forever)
-
GOOG (ZIP, 315MB)
/
GOOGL (ZIP, 256.2MB)
- Range (GOOG): [09/01/2004 - 06/28/2024]
- Range (GOOGL): [04/04/2014 - 06/28/2024]
-
Notes:
-
GOOG was the original class A stock.
In 2014, Google decided to do a special type of stock split that
split the stock into GOOG and GOOGL.
GOOG was changed to class C and GOOGL became the class A stock.
The record date was on March 27, 2014, payment date on April 2,
2014, and the class C ticker appeared on April 3, 2014 [1] – [4].
-
If you want to create a folder specifically following class A
stock use GOOG [09/01/2004 - 04/03/2014] and GOOGL
[04/04/2014 - PRESENT].
-
If you want to create a folder specifically following class C
stock use GOOG [04/04/2014 - PRESENT].
-
Sources:
-
SEC – Google 10-Q 2014-06-30 page 27
-
brokerchooser.com – Google stock splits
-
Google 8937 Form 2014
-
SEC – Google 10-K 2014
-
INTC (ZIP, 82.7MB)
- Range: [01/03/2003 - 06/28/2024]
-
META (prev. FB) (ZIP, 154.3MB)
- Range (FB): [05/30/2012 - 06/09/2022]
- Range (META): [06/10/2022 - 06/28/2024]
-
Notes:
-
FB to META occured prior to market open June 9, 2022 [1].
-
Sources:
-
Meta Investor Relations
-
MSFT (ZIP, 141.5MB)
- Range: [01/03/2003 - 06/28/2024]
-
NVDA (ZIP, 193.9MB)
- Range: [01/03/2003 - 06/28/2024]
-
RDDT (ZIP, 2MB)
- Range: [03/25/2024 - 06/28/2024]
-
TSLA (ZIP, 300.7MB)
- Range: [07/09/2010 - 06/28/2024]
Alternative Sources