Anatomy of the Backtests

For complete transparency, I want to describe how my tests work at a high level.

Limitations

I am limited by the data I have. I purchased the option data from the CBOE and they only provide end-of-day quotes for all options for every day. I initially purchased 10 years worth of data but found some of their data in 2003 was completely erroneous, as a result, my tests start in 2004 and run through Oct 2012.

I ignore slippage in my tests as I assume that at some point during the day, the premium was higher than at the EOD data (due to theta decay). So if we were to enter a trade early in the day, on average we may be able to actually get filled for the same price as the EOD. Even if I had opening, high and low prices, I’m not sure I could presume to get a better price than EOD. EOD is a moderately conservative approach. An even more conservative would probably be adding slippage of 10-15 cents, but I am looking for general trends here.

Limit Orders/Stop Losses

If a scenario is testing limit orders to sell, if triggered, the test will assume that the order was filled at exactly the limit price. So in the event of gap up/down days that may in reality work in our favor, the test takes a more conservative approach.

Stop losses on the other hand work the in the opposite manner. If a stop loss is in place and is triggered, the test fills the order with the maximum of either the stop loss or the closing price. Again, this is the more conservative approach as we assume gap up/down days affect us negatively.

Delta Tolerance

When searching for conforming spreads, the short strike of the Bull Put or Bear Call spreads is predefined. The test will search for spreads with a short strike equal to or less than the specified strike. However, I also use a tolerance of 10 which limits the range of short strikes that are conforming. For instance, if we are interested in spreads with a delta of 25, the test will return a spread with the largest delta between 15 and 25. This ensures that when there is not too much variety in the spread’s deltas (i.e. close to expiration) that the same spread is not returned for the vast majority of scenarios. This also probably reflects the trader’s mindset. If the trader is interested in a delta of 25, but there is a delta of 29 and the next is 10, they may not find a spread worth taking.

Aggressive Fills

The test is designed to fill the portfolio if there is an open space and there is a conforming trade. As a result, if we have one trade that shuts down very early (i.e. due to IV collapse), another trade for the same expiration may be opened immediately. This may end up with more than 1 trade per month.

Trades Per Month

In order to keep the 1-month, 2-month, and 3-month scenarios comparable, each is designed so that they hold 1 trade at a time per month. For example, with a 1-month trade, only 1 trade may be open at any one time. But a 2-month scenario may have 2 trades with different expirations open at the same time.

Triggers/Adjustments

I can write nearly any type of trigger (i.e. enter or exiting a trade) or trade adjustments so long as it depends on the data I have available. I have the historical option data for the RUT, and historical underlying prices for every instrument. At some point I will write tests that correlated to the performance of the VIX, or put/call ratio of the RUT, etc.

Advertisements