Backtests
Quotes and Data Quality

Liquidity Filters

Our backtester does a lot to screen and filter historical quotes before using them for backtest fills. If our backtester determines that historical quotes are unrealistic or not liquid enough to fill in live trading, it will skip over those quotes for you and only use quotes that would actually produce fills in live trading.

We have dedicated extensive time and resources toward mimicing live trades in our backtest engine. In many cases, we've compared backtests against thousands of live trades and found less than a 3% margin for error. This is not true of all backtests that we generate, but we have extreme confidence in the accuracy of our backtest results over others you will find.

If you ever have any questions or suspicions about our backtest fills, please contact us, as this is our priority.

Below, you will find more information and what and how we filter out some quotes. There is even more going on under the surface than what you see here. We can't reveal everything that we do to filter quotes, because much of it we consider to be proprietary.

Liquidity Filters at Entry

When a backtest enters a new trade, it checks for liquidity on both individual strikes and also the entire chain. To determine liquidity, our backtester uses its own algorithm which considers bid, ask, volume, and underlying movement. A backtest will only open a new trade if both its target contract is liquid along with the chain itself.

For a chain to be liquid, a certain percentage of contracts in that chain must be liquid. If a large percentage of the chain is not liquid, the backtester will not use it, even if individual contracts are liquid enough. This is to ensure that the backtester has the right "image" of the current state of the option chain and is not only looking at a fraction of the chain.

If the chain is liquid enough, then the backtester will locate a contract that is also liquid, and open a trade at that strike.

If the market is not liquid enough at that moment in time, the backtester will enter a trade when liquidity critera are met.

Liquidity Filters at Exit

Backtests uses similar liquidity rules for trade exits as described above for entries. However, there are two differences at exit.

First, the backtester only requires that the current trade's position is liquid enough for exit. It does not require that the chain be liquid at the time. This is primarily to ensure that stop losses occur when they should, even if surrounding strikes are illiquid.

Second, for credit spread positions (call credit spread, put credit spread, short iron condor, etc.), utilizing stop losses, only the spread's short strike must be liquid to exit. If the stop value hits and the short strike is liquid but the long strike is not, the short strike will close without the long strike. It is common during stop scenarios for closer strikes to be liquid and far strikes to not, so this helps to ensure that stops are not missed.

No Trades Entered During First Minute of Market Session

To avoid liquidity issues at market open, new trades are not entered until 9:31am US Eastern Time at the earliest.

Backtests will exit trades at 9:30am if exit conditions are met and those trades are considered liquid at the time.

No Sells With No Bid

When selling a trade, whether Sell to Open or Sell to Close, if the target contract has no bid, the backtester will not include it with the transaction.

For opening trades (Sell to Open), this means that only contracts with a bid can be opened.

For closing trades as part of a spread (Sell to Close), if the long strike does not have a bid, the short strike can still be closed by itself and the long strike will not be closed for a credit. It will be left open and assumed to expire worthless.