Free during validation — all features unlocked. Feedback welcome

User Guide

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
  1. Name your strategy — call it whatever you want
  2. Pick an instrument — ES, NQ, RTY (futures) or SPX, SPY, QQQ, IWM (options)
  3. Add rules — each rule has conditions and a direction (long, short, or options spread type)
  4. Set exits — take profit, stop loss, trailing stop, time stop, EOD close
  5. Set limits — max trades per day, max per direction
  6. Run it — see full results with Monte Carlo and walk-forward
  7. 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
Rule 1: "Buy oversold bounce" → Long Condition: RSI 14 | Crosses above | 30 Rule 2: "Sell overbought drop" → Short Condition: RSI 14 | Crosses below | 70 Exits: TP 5pts, SL 3pts, EOD 3:55 PM Limits: Max 2/day, 1 long, 1 short
Example: ORB + VIX Filter
Rule 1: "Long breakout" → Long Condition 1: ORB High | Price crosses above Condition 2: ORB Range | < | 15 Rule 2: "Short breakdown" → Short Condition 1: ORB Low | Price crosses below Condition 2: ORB Range | < | 15 Exits: TP 5pts, SL 3pts Limits: Max 2/day
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
Entry Window: 09:35 – 15:30 (global) Rule 1: "Morning long" → Long Condition 1: Time of Day | < | 12:00 Condition 2: Price | Price crosses above | EMA 9 Rule 2: "Afternoon short" → Short Condition 1: Time of Day | >= | 13:00 Condition 2: RSI 14 | Crosses below | 70 Exits: TP 5pts, SL 3pts, EOD 3:55 PM

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
  1. Build and save strategies in the Builder tab
  2. Switch to the Portfolio tab
  3. Check the strategies you want to combine
  4. 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

IndicatorDescriptionCommon Use
EMA 9/21Exponential Moving Average. Weights recent prices more.Trend following, crossover entries
SMA 20/50/200Simple Moving Average. Equal weight over period.Trend filter (200 SMA), crossovers
VWAPVolume-Weighted Average Price. Resets each session.Institutional fair value, direction bias
RSI 14Relative Strength Index (0-100). Momentum oscillator.Mean reversion: buy <30, sell >70
IBSInternal Bar Strength: (close-low)/(high-low). Daily bars.Mean reversion: buy <0.2, sell >0.8
ORB High/LowOpening range high and low from first N minutes.Breakout entries above/below range
ORB RangeSize of opening range in points.Filter: skip wide/narrow ranges
PriceCurrent bar close price.Compare to indicators
VolumeBar volume.Confirm breakouts
Time of DayCurrent bar time in HH:MM format (24-hour). Compare with operators like >, <.Time-of-day filters (e.g., only trade before 12:00)
Operators
OperatorMeaningExample
Price aboveCurrent price is above the indicatorPrice above VWAP → bullish bias
Price belowCurrent price is below the indicatorPrice below SMA 200 → bearish
Price crosses abovePrice was below, now above (trigger)Price crosses above EMA 9 → go long
Price crosses belowPrice was above, now below (trigger)Price crosses below VWAP → go short
> / < / >= / <=Compare indicator value to thresholdRSI 14 > 70 → overbought
Crosses aboveIndicator value crosses above thresholdRSI crosses above 30 → oversold bounce
Crosses belowIndicator value crosses below thresholdRSI crosses below 70 → overbought fade

6. Exit Rules

Exits are checked every bar in this priority order:

  1. Stop Loss — checked first (worst-case fill). Closes at exact SL level.
  2. Profit Target — closes at exact TP level.
  3. Time Stop — closes at market price after N minutes elapsed.
  4. Trailing Stop — once profit reaches +X pts, stop moves to breakeven. If price reverses back to entry, closes at breakeven instead of full SL.
  5. 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
InstrumentCommission RTMargin
SPX options (Schwab)$4.80 per spreadWidth × $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

SymbolTypePeriodBars
ES (MES)Futures 5-minDec 2011 – Mar 202614 years, 1M bars
ES (MES)Futures 1-minMay 2023 – Mar 20262.8 years, 1M bars
NQ (MNQ)Futures 5-minDec 2011 – Mar 202614 years, 1M bars
RTY (M2K)Futures 5-minMay 2011 – Mar 202614 years, 1M bars
SPX / SPYOptions 5-minMar 2025 – Feb 20261 year, 19K bars
QQQ / IWMOptions 5-minMar 2025 – Feb 20261 year, 19K bars
VIXDaily + 5-minJan 2024 – Feb 20262 years
SPX ChainsReal bid/ask/IV/deltaMar 2 – 13, 202610 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

TermDefinition
Sharpe RatioRisk-adjusted return. Mean daily P&L / standard deviation × √252. Above 2 is good, above 4 is excellent.
Profit FactorGross wins / gross losses. Above 1.5 is solid.
Max DrawdownLargest peak-to-trough decline in equity. The worst losing streak in dollar terms.
Win RatePercentage of trades that were profitable.
DeltaOption's sensitivity to underlying price. Also approximates probability of expiring ITM.
DTEDays to expiration. How many days until the option expires.
Credit SpreadSell a closer strike, buy a further strike. Collect premium upfront, profit from time decay.
Debit SpreadBuy a closer strike, sell a further strike. Pay premium, profit from directional move.
Iron CondorA call credit spread + put credit spread. Profits when price stays in a range.
ORBOpening Range Breakout. The high and low of the first N minutes define a range; trade breakouts.
VWAPVolume-Weighted Average Price. Institutional benchmark for fair value during the session.
RSIRelative Strength Index. Oscillator 0-100. Below 30 = oversold, above 70 = overbought.
IBSInternal Bar Strength. (Close-Low)/(High-Low). Below 0.2 = weak close, above 0.8 = strong close.
EMAExponential Moving Average. Weights recent data more than older data.
SMASimple Moving Average. Equal weight over the lookback period.
Monte CarloStatistical simulation that shuffles historical results to estimate the range of possible outcomes.
Walk-ForwardSplit data into train/test periods to check if a strategy works on unseen data (detects overfitting).
SlippageThe difference between expected fill price and actual fill price. Caused by bid-ask spread and market impact.
Entry WindowThe time range during which new positions can be opened. Set globally for the entire strategy. No entries occur outside this window.
Time SweepRuns 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 PositionsThe 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 SweepTest 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 BacktestBacktest using real option chain snapshots (actual bid/ask/IV/delta from IQFeed) instead of synthetic Black-Scholes pricing. Most accurate simulation available.