Try the backtester today at wheel.orats.com
User feedback is critical to helping us ensure top-quality tools and data. Answers to common questions will be a series of blog posts with our answers.
"Is it true that no real option mid-price data is used in backtesting after the skews are fit (i.e., everything is off the theoretical values?"
No, we use options market bid-ask quotes to simulate trading in our backtester, not theoretical values.
Every trading day back to 2007, we take snapshots of market bid-ask quotes and stock mid-point prices at the same time each day, 14-minutes before the close. Backtesting on closing markets does not have representative quotes as market makers will often widen out as the close approaches.
We create greeks with our intensive smoothed market values process (SMV).
Our backtester works by finding the options closest to the target days to expiration and target delta to trade.
For example, for a SPY Long Call strategy with a specified target of 40 days to expiration and an acceptable range from 30 to 50 days, and a target of .65 delta --acceptable range .55 to .75, the backtest will pick the closest target value for the trade. It will choose the closest DTE of 40 days and .65 delta.
https://blog.orats.com/how-to-find-the-best-options-in-backtesting
Once an option is found, we use actual bid-ask prices to simulate entry and exit prices and apply the slippage calculations below. To mark our options positions to compute daily returns, we use mid-point prices. The table below shows how we use bid-ask prices to simulate the backtest buys and sells at the mid-point plus or minus slippage at our one-leg default of 75%.
The slippage formula to buy is Bid + (Ask - Bid) * slippage%
The slippage formula to sell is Ask - (Ask - Bid) * slippage%
# of Legs |
Slippage % |
bid x ask |
Buy Trade Price |
Sell Trade Price |
1 |
.75 |
1.20 x 1.40 |
1.35 = 1.20 + (1.40-1.20) * .75 |
1.25 = 1.40 - (1.40-1.20) * .75 |
2 |
.66 |
5.10 x 5.90 |
5.628 = 5.10 + (5.90-5.10) * .66 |
5.372 = 5.90 - (5.90-5.10) * .66 |
3 |
.56 |
4.20 x 5.20 |
4.76 = 4.20 + (5.20-4.20) * .56 |
4.64 = 5.20 - (5.20-4.20) * .56 |
4 |
.53 |
8.50 x 10.30 |
9.454 = 8.50 + (10.30-8.50) * .53 |
9.346 = 10.30 - (10.30-8.50) * .53 |
In the SPY Long Call example above, here are the first two trades starting in 2007.
The simulated first trade was buying the February 16^{th}, 140 strike call with a market bid-ask of $3.60 x $3.80 making the simulated trade price $3.75. If the next day’s bid-ask were $3.90 x $4.00, then the profit would be $0.20, and the daily return calculation would divide that by the stock price at open of the trade, $141.37 or 0.1415%.
The formula for daily return = option profit / opening stock price.
If there are any stock components (Hedging, covered calls, married puts, etc.) we use the formula: (option profit + stock profit) / opening stock price.
Daily returns can be found in the downloads accessible from the backtest report. We use simple arithmetic interest and the daily returns will add up to the monthly returns found in the Backtest Report.
We calculate using geometric returns if you select compound returns in the backtester. We use average arithmetic returns as default, using a constant amount invested per day to calculate a balance. For example, the graph in the backtester uses a constant $100,000.
Here's an example question from a client:
I have an account with $1000. On day 1 I have a 50% gain. On day 2 I have a 50% loss. If I were to just add up those two arithmetic returns, then my total return would be 0%. In reality, my account went from $1000 to $1500 on day 1, and then lost 50% of $1500 which brings the balance to $750. So rather than being flat, my account is down $250 from where I started.
Formula for balance = Previous Balance + (constant $ amount invested * return)
With a starting balance of $1000 and a constant $ amount invested will be $1000 as well.
On day 1 I have 50% gain. $1000 + ($1000 * .50) = $1500
On day 2 I have a 50% loss. $1500 + ($1000 * -.50) = $1000.
It is unrealistic to trade using compounding (going all-in on every trade) when trading options since options can go to 0 or when shorting you can lose more than you put in. When you use compounding of option backtesting, most or if not all option strategies you will blow up your account unless you set position sizing.
For example, the January 2007 daily returns add to 0.40% matching the backtest report.
We use arithmetic returns to avoid path dependency and to avoid issues if more than 100% of a strategy returns are lost.
Here are some other noteworthy characteristics of the ORATS Backtester:
- Many pre-canned strategies can be tested with various entry parameters like varying DTE, delta, or stock OTM% for strikes, different other parameters like setting the spread price percent of the strikes' width or setting the price of the option divided by the stock price.
- Exit methods are used like when a delta is reached, profit level hit, or a percent of the max spread profit attained, and the trade is closed.
- We have flexible commission and slippage assumptions that change for the number of legs. For example, a setting of 75% travel to trade the bid-ask spread for a one-leg option translates to 56% for a four-leg spread.
- Earnings entry days and exit days in relation to the announcement dates can be tested.
- Backtests can be combined and reports with financial statics like Sortino, win rates, best month returns generated.
- Optimizations can be run with thousands of backtests automatically run, sorted, and a report generated.
We think our backtester is the best out there. What do you think? Email us at contactus AT orats.com. You can see our features with other backtesters at https://quantpedia.com/links-tools/