I've been doing some digging, and this question has been asked many times in various forms over the years -

In particular I am interested in spread trading. From these I've gathered backtesting these strategies is pretty much relegated to commercial tools, or professionals writing their own. I understand the basic idea of backtesting, and I'd like to make my own. Partially because right now I'm just a hobbyist who doesn't yet have the capital to afford a really nice tool, and partially because I would like to learn exactly how it works from the inside.

One post mentions that an options backtester is not much different than an equity backtester. It's possible that this is true - but I don't understand how. For options backtesting, we'd need historical options data (to get the bid/ask, strike, expiration, delta, imp. vol., etc), and also historical data for the underlying contract in order to generate signals. We would also need to properly expire the options. Perhaps I am over-complicating it.

Is there any resources that really dive in depth to how their backtester was made? Some of the papers in the 4th link go into it a little bit in the methodology section, but it seemed to me there wasn't too much to chew on in most of them. Most likely because discussion of the backtester itself is tangential to the actual paper.


5 Answers 5


Alright this is a good question. I've been there before. As you said, backtesting options will be almost the same as stocks, but with more data to play with (Greeks, volatility, theoretical prices, etc)

The most important thing here will be your historical data. Your source of data. In order to backtest options, usually you need to have the whole historical option chain.

You won't find this on Internet for free (Don't even try it) However, there are some companies offering this, and let me tell you is not cheap at all.

Personally, I ended up writing another software that periodically will scan the whole option market, collecting the data from the chains. This is a "huge" database that I hold for my backtesting projects.

So I suggest you do the same. First focus on the data.

Good luck

  • $\begingroup$ Where do you scrape your options data from? $\endgroup$
    – user20664
    Commented Jun 28, 2016 at 7:45
  • $\begingroup$ I think pandas can do it pandas.pydata.org/pandas-docs/stable/… $\endgroup$
    – Taylor
    Commented Jun 28, 2016 at 16:02
  • 1
    $\begingroup$ There are many sites where you can scrape options. Ivolatility.com is the one I use $\endgroup$ Commented Jun 28, 2016 at 16:04
  • $\begingroup$ @ArielSilahian gave another answer below and connected w you on Linkedin. Let me know what you think. $\endgroup$
    – jason m
    Commented May 30, 2020 at 20:58
  • $\begingroup$ Thinkorswim has historical options data available in their app (thinkorswim OnDemand) that you can use for manual backtests. Not sure if their API provides access to this data or not. If anyone knows? Edit: Apparently not: "“Thank you for your email. Currently, historical options prices is not available within our Get Price History API. This type of data is only available within the thinkorswim environment (ie. thinkback) which is completely separate from our API. Exposing this type of data within our API is something we hope to provide in the future, but we have no ETA on this right now.” $\endgroup$ Commented Aug 30, 2020 at 20:13

For whoever stumbles upon this, as I did.

The dimensionality of the problem is so much larger. If someone tells you backtesting options is the same as backtesting stocks or any delta-1 underlying, they are entirely missing the point.

  1. Data - Option data is expensive. The biggest favor you can do yourself is to start gathering data as early as possible. There are various ways to do this either as a student or as a practitioner, or both. Scrape, get vendor data for backfill or just be patient.
  2. Read books about how to think about options. Options are a different mindset and different dynamic than underlying (delta-1).
  3. Start by building a backtest on a simple structure (spread, etc). Find ways to explain your PnL to yourself in the backtest (is it due to delta, gamma, theta, etc). Does your math make sense? Can you convince yourself that you are correct?
  4. Build a more complicated structure and repeat step 3.
  5. Build ways to test any arbitrarily complex structure and find ways to determine what predicts the outcome of your structure. When do you exit, when do you roll, etc. This, part 5, is incredibly difficult and takes extreme amounts of time and care.

I think this is an unfortunately very difficult problem.

To make some of the above easier, you may want to use open source solutions such as quantlib but even that is not free (time and learning curve, etc).

These are all quite hard problems that may take you months to solve.

I am glad to discuss this further if you reply on this answer.


In terms of computational difficulty, I do not see Options backtesting in the same league as equity backtesting. There are more variables involved, and the dataset is much larger. But the bottom line though is that Options Backtesting will always cost money whether you purchase the data and develop the model yourself or use a third party solution.

I find backtesting to be an integral part of my Options Trading. To me, it's an essential part of the process. So, together with my business partner, we developed a tool to backtest Options. We then thought that other traders might find it useful too and began promoting it as a commercial tool.

We would love for you to try it out and have your feedback. Here is an invite for special beta testing - no cost- so you can post here your impressions.


I recently opened sourced an options backtester written in Python. It may provide what you're looking for.

  • $\begingroup$ hey! is your codebase up to date? were there any changes? $\endgroup$
    – AK88
    Commented Nov 15, 2021 at 21:27
  • $\begingroup$ Yes. I'll be adding an additional CL today with some big fixed. $\endgroup$
    – sirnfs
    Commented Nov 17, 2021 at 0:41

I have a project in my github here i try this for brazilian stock market, the data is public available. It's quite a challenge the data is raw , you have to ajust prices, deal with pricing for options not traded in that day, exercise options ... unfortunaly i wrote the code in portuguese perphaps one day i translate to english.


Your Answer

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