User Guide
Contents
1. Platform Overview
The Decay Lab backtest platform lets you test options and futures trading strategies against years of historical data. Every backtest includes statistical validation (Monte Carlo simulation and walk-forward testing) so you know whether your edge is real or just noise.
There are three modes:
- Quick Backtest — pick a preset strategy type, set parameters, run it
- Strategy Builder — build custom strategies from scratch using indicator-based rules
- Portfolio — combine multiple strategies and see how they perform together
2. Quick Backtest
The fastest way to test a strategy. Pick options or futures, set your parameters, and run.
Options Strategies
Test SPX credit/debit spreads and iron condors with Black-Scholes pricing and historical VIX.
- Call/Put Credit Spread — sell premium, profit from time decay
- Call/Put Debit Spread — buy directional exposure, limited risk
- Iron Condor — sell both call and put credit spreads (together or separate)
Key parameters:
- Delta — how far out-of-the-money. 5 = very safe, 20 = more premium but more risk
- Width — distance between strikes. $5 = $500 max loss per contract
- DTE — days to expiration at entry. 0-DTE through 45-DTE
- Target % — close when this % of max profit is captured (e.g., 80%)
- Stop — close if loss reaches this multiple of credit (e.g., 2x)
Futures Strategies
Test 7 strategy types on ES, NQ, or RTY with 14 years of 5-minute bar data.
- ORB — Opening Range Breakout. Trade the first 5-30 minute range
- EMA Crossover — enter when price crosses EMA
- SMA Crossover — enter when price crosses SMA
- VWAP Cross — enter when price crosses session VWAP
- RSI Reversal — mean reversion at overbought/oversold levels
- IBS — Internal Bar Strength daily mean reversion
- EMA + VWAP — VWAP for direction bias, EMA for trigger
Entry Window
Controls the time range when new positions can be opened. Defaults update automatically based on DTE selection:
- 0-DTE — 10:15 to 11:00 (morning session only, avoids gamma risk near close)
- 1-DTE — 15:30 to 15:55 (end of day entry, default)
- 7-DTE — 10:00 to 14:00 (broader window for longer-dated spreads)
- 45-DTE — 10:00 to 14:00 (broad window, less time-sensitive)
You can override the defaults to test any custom time range.
Parameter Sweep
The Parameter Sweep section lets you test any parameter across multiple values and see a ranked comparison table. Pick one parameter for a simple sweep, or two for a grid search.
Sweepable parameters include:
- Options: delta, profit target, width, DTE, stop loss, entry time
- Futures: TP, SL, ORB window, EMA/SMA/RSI period, overbought/oversold
Results are sorted by Sharpe ratio with all metrics shown. For a grid sweep (two parameters), you get a matrix showing Sharpe for every combination — the same type of analysis used in the TIER 1.1 research that tested 30 delta/target combinations.
3. Strategy Builder
Build completely custom strategies from scratch. Define rules with conditions, set your exits and position limits, then backtest against historical data.
How It Works
- Name your strategy — call it whatever you want
- Pick an instrument — ES, NQ, RTY (futures) or SPX, SPY, QQQ, IWM (options)
- Add rules — each rule has conditions and a direction (long, short, or options spread type)
- Set exits — take profit, stop loss, trailing stop, time stop, EOD close
- Set limits — max trades per day, max per direction
- Run it — see full results with Monte Carlo and walk-forward
- Save it — saved to your browser for portfolio testing later
Rules & Conditions
Each rule fires when ALL its conditions are true (AND logic). If you have multiple rules, the first matching rule wins (evaluated top to bottom each bar).
A condition has three parts:
- Indicator — what to check (price, EMA, VWAP, RSI, etc.)
- Operator — how to compare (crosses above, price below, >, <, etc.)
- Value — threshold (e.g., 30 for RSI oversold)
Example: RSI Mean Reversion
Example: ORB + VIX Filter
Entry Window vs. Time of Day Condition
The Entry Window (Start/End at the top of the Builder) is a global setting that controls when any rule is allowed to open a new position. No trades will be entered outside this window, regardless of what the rules say.
The Time of Day condition (in the indicator dropdown) is a per-rule filter for time-dependent behavior within the same trading day. Use it when different rules should fire at different times.
Example: Morning Longs, Afternoon Shorts
In this example, the entry window allows trades from 9:35 to 3:30. Rule 1 only fires before noon,
Rule 2 only fires after 1 PM. Time of Day values use HH:MM format (24-hour).
Direction Options
For futures: Long or Short
For options: Call Credit, Put Credit, Call Debit, Put Debit, Iron Condor
4. Portfolio Mode
Combine multiple saved strategies and see how they perform together. This shows you whether adding another strategy actually diversifies your portfolio or just adds correlated risk.
How to Use
- Build and save strategies in the Builder tab
- Switch to the Portfolio tab
- Check the strategies you want to combine
- Click "Run Portfolio Backtest"
What You Get
- Per-strategy summary — P&L and Sharpe for each
- Combined portfolio — total P&L, Sharpe, max drawdown
- Correlation matrix — how correlated the daily P&Ls are (lower = better diversification)
- Monte Carlo — risk analysis on the combined portfolio
5. Indicators
| Indicator | Description | Common Use |
|---|---|---|
EMA 9/21 | Exponential Moving Average. Weights recent prices more. | Trend following, crossover entries |
SMA 20/50/200 | Simple Moving Average. Equal weight over period. | Trend filter (200 SMA), crossovers |
VWAP | Volume-Weighted Average Price. Resets each session. | Institutional fair value, direction bias |
RSI 14 | Relative Strength Index (0-100). Momentum oscillator. | Mean reversion: buy <30, sell >70 |
IBS | Internal Bar Strength: (close-low)/(high-low). Daily bars. | Mean reversion: buy <0.2, sell >0.8 |
ORB High/Low | Opening range high and low from first N minutes. | Breakout entries above/below range |
ORB Range | Size of opening range in points. | Filter: skip wide/narrow ranges |
Price | Current bar close price. | Compare to indicators |
Volume | Bar volume. | Confirm breakouts |
Time of Day | Current bar time in HH:MM format (24-hour). Compare with operators like >, <. | Time-of-day filters (e.g., only trade before 12:00) |
Operators
| Operator | Meaning | Example |
|---|---|---|
Price above | Current price is above the indicator | Price above VWAP → bullish bias |
Price below | Current price is below the indicator | Price below SMA 200 → bearish |
Price crosses above | Price was below, now above (trigger) | Price crosses above EMA 9 → go long |
Price crosses below | Price was above, now below (trigger) | Price crosses below VWAP → go short |
> / < / >= / <= | Compare indicator value to threshold | RSI 14 > 70 → overbought |
Crosses above | Indicator value crosses above threshold | RSI crosses above 30 → oversold bounce |
Crosses below | Indicator value crosses below threshold | RSI crosses below 70 → overbought fade |
6. Exit Rules
Exits are checked every bar in this priority order:
- Stop Loss — checked first (worst-case fill). Closes at exact SL level.
- Profit Target — closes at exact TP level.
- Time Stop — closes at market price after N minutes elapsed.
- Trailing Stop — once profit reaches +X pts, stop moves to breakeven. If price reverses back to entry, closes at breakeven instead of full SL.
- EOD Close — safety net. Force closes anything still open at this time (default 3:55 PM).
All exits work together. Most trades close on TP or SL. EOD catches stragglers.
Setting TP = 0 or SL = 0 means that exit type is disabled (off). For example, setting TP to 0 means the trade will only close via stop loss, trailing stop, time stop, or EOD. This is useful for strategies that rely purely on time-based exits or trailing stops.
Points vs. Percent Mode
TP and SL can be set in two modes:
- Points (default) — fixed distance from entry price. TP 5 = close when +5 pts profit.
- Percent — percentage of entry price (futures) or percentage of credit received (options). TP 80% = close when 80% of credit captured.
Switch between modes using the TP/SL Mode dropdown in the Builder.
7. Cost Model & Slippage
Default Slippage Model (66% Spread)
By default, backtests use the 66% bid-ask spread model (based on ORATS research). This assumes you give up 66% of the estimated bid-ask spread as slippage on each fill. The spread is estimated dynamically based on:
- DTE — 0-DTE has wider spreads (8%) than 45-DTE (3%)
- VIX — high VIX widens spreads by 20-50%
- Option price — cheaper options have wider relative spreads
You can adjust the fill percentage (e.g., 50% for optimistic, 100% for worst case) or switch to fixed points per side.
Customizing Costs
In the Strategy Builder, the Costs section lets you override:
- Commission RT — round-trip commission per contract (default $0.70 for micro futures)
- Slippage model — "66% spread" (ORATS model, default) or "Fixed pts" (set your own slippage per side)
- Fill % — what percentage of the bid-ask spread you give up (66% default, 50% optimistic, 100% worst case)
- Contracts — number of contracts per trade
Commissions
| Instrument | Commission RT | Margin |
|---|---|---|
| SPX options (Schwab) | $4.80 per spread | Width × $100/contract |
| MES / M2K (micro futures) | $0.70 | $100 intraday |
| MNQ (micro Nasdaq) | $0.70 | $100 intraday |
8. Validation
Every backtest includes two forms of statistical validation to help you distinguish real edge from overfitting or luck.
Monte Carlo Simulation
Bootstraps your daily P&Ls — randomly resamples them 5,000 times to build a distribution of possible outcomes. Shows you:
- 95% confidence interval — range of likely annual P&L
- P(profit) — probability of being profitable over a year
- Max drawdown 95th percentile — worst drawdown you should prepare for
Walk-Forward Testing
Splits data into training period (80%) and test period (20%). Runs the strategy on both and compares. If the test period Sharpe is much worse than training, the strategy may be overfit to historical data.
- PASS — test Sharpe is at least 50% of training Sharpe
- CAUTION — test Sharpe dropped significantly, possible overfitting
You can customize the split (60/40, 70/30, 80/20) or turn either validation off.
Deflated Sharpe Ratio
The Deflated Sharpe Ratio (DSR) adjusts the observed Sharpe for the number of strategy variations you have tried. If you test 50 parameter combos and pick the best one, the DSR tells you whether that Sharpe is still statistically significant after accounting for multiple testing. A DSR above 0.95 means the edge is likely real, not a lucky pick.
VIX Regime Breakdown
Results are split by VIX regime to show how the strategy performs in different volatility environments: low VIX (<15), normal (15-25), elevated (25-35), and high (>35). A robust strategy should show positive expectancy across regimes, not just in calm markets.
9. Available Data
| Symbol | Type | Period | Bars |
|---|---|---|---|
| ES (MES) | Futures 5-min | Dec 2011 – Mar 2026 | 14 years, 1M bars |
| ES (MES) | Futures 1-min | May 2023 – Mar 2026 | 2.8 years, 1M bars |
| NQ (MNQ) | Futures 5-min | Dec 2011 – Mar 2026 | 14 years, 1M bars |
| RTY (M2K) | Futures 5-min | May 2011 – Mar 2026 | 14 years, 1M bars |
| SPX / SPY | Options 5-min | Mar 2025 – Feb 2026 | 1 year, 19K bars |
| QQQ / IWM | Options 5-min | Mar 2025 – Feb 2026 | 1 year, 19K bars |
| VIX | Daily + 5-min | Jan 2024 – Feb 2026 | 2 years |
| SPX Chains | Real bid/ask/IV/delta | Mar 2 – 13, 2026 | 10 days, 23 snapshots/day |
Need data for a different instrument? Use the Request New Data form at the bottom of the backtest page. Submit what you need and we'll review it.
Chain Snapshot Data
We collect real SPX option chain snapshots from IQFeed every 15 minutes during market hours. This includes actual bid/ask, implied volatility, and delta for every strike across multiple expirations. The chain backtest engine uses this data for the most accurate possible simulation — actual market quotes instead of synthetic Black-Scholes pricing. This dataset grows every trading day.
PDF Reports
After running any backtest, click Download PDF to save a report with all results, metrics, Monte Carlo analysis, and strategy configuration. Useful for record-keeping or sharing with others.
10. Glossary
| Term | Definition |
|---|---|
| Sharpe Ratio | Risk-adjusted return. Mean daily P&L / standard deviation × √252. Above 2 is good, above 4 is excellent. |
| Profit Factor | Gross wins / gross losses. Above 1.5 is solid. |
| Max Drawdown | Largest peak-to-trough decline in equity. The worst losing streak in dollar terms. |
| Win Rate | Percentage of trades that were profitable. |
| Delta | Option's sensitivity to underlying price. Also approximates probability of expiring ITM. |
| DTE | Days to expiration. How many days until the option expires. |
| Credit Spread | Sell a closer strike, buy a further strike. Collect premium upfront, profit from time decay. |
| Debit Spread | Buy a closer strike, sell a further strike. Pay premium, profit from directional move. |
| Iron Condor | A call credit spread + put credit spread. Profits when price stays in a range. |
| ORB | Opening Range Breakout. The high and low of the first N minutes define a range; trade breakouts. |
| VWAP | Volume-Weighted Average Price. Institutional benchmark for fair value during the session. |
| RSI | Relative Strength Index. Oscillator 0-100. Below 30 = oversold, above 70 = overbought. |
| IBS | Internal Bar Strength. (Close-Low)/(High-Low). Below 0.2 = weak close, above 0.8 = strong close. |
| EMA | Exponential Moving Average. Weights recent data more than older data. |
| SMA | Simple Moving Average. Equal weight over the lookback period. |
| Monte Carlo | Statistical simulation that shuffles historical results to estimate the range of possible outcomes. |
| Walk-Forward | Split data into train/test periods to check if a strategy works on unseen data (detects overfitting). |
| Slippage | The difference between expected fill price and actual fill price. Caused by bid-ask spread and market impact. |
| Entry Window | The time range during which new positions can be opened. Set globally for the entire strategy. No entries occur outside this window. |
| Time Sweep | Runs the same strategy across multiple entry time windows and compares results in a table. Helps identify the optimal time of day for a given strategy. |
| Concurrent Positions | The number of trades open at the same time. "Max Open" limits this. Use to control exposure — e.g., max 1 long and 1 short at a time. |
| Parameter Sweep | Test a strategy across multiple values of a parameter (e.g., delta 5/8/10/15). Shows a ranked table sorted by Sharpe. Grid sweep tests two parameters at once. |
| Chain Backtest | Backtest using real option chain snapshots (actual bid/ask/IV/delta from IQFeed) instead of synthetic Black-Scholes pricing. Most accurate simulation available. |