User Guide
A visual, plain-English guide to reading the heatmap, choosing a structure, and understanding what every number on the page means — for the desktop app and the mobile page.
⚠ Research & educational tool only — not investment advice
Straddle Lab shows historical, backtested performance of options strategies over past market data. Past performance is not indicative of future results, and nothing on this page is a recommendation to buy, sell or hold any security or derivative. Options trading involves substantial risk of loss and is not suitable for all investors. Backtested results have inherent limitations — no market impact, fills assumed at historical prices, and slippage/brokerage figures are your own estimates, not guarantees. Please consult a SEBI-registered investment adviser before making any trading decision. See the full note at the bottom of this guide.
01 — Overview
Straddle Lab is a research tool for studying how short options strategies have historically behaved on NIFTY, BANKNIFTY and SENSEX. For every trading day in its dataset, it replays a chosen structure at a chosen entry time and stop-loss level and shows the historical outcome — gross of costs, before your own cost assumptions are applied. History depth varies by structure and instrument — the Period panel always shows the exact range for what you have selected. The earliest weeks of a series are used to warm up the regime filters (a day is ranked against its own trailing history), so charts can begin a few weeks after the first day of data.
Nothing on this page is a signal, a forecast, or a recommendation. It is a way to explore how a structure historically behaved across thousands of trading days, and to compare that behaviour across instruments, structures, exit times and market conditions.
Screenshots in this guide are illustrative — the numbers shown are simulated for documentation and are not actual backtest values.
02 — The core view
The heatmap is the heart of Straddle Lab. Every cell answers one question: "If I had opened this trade at this time, with this stop-loss, on every eligible day in the window — how did it historically do?"
03 — Setup
The left-hand Test panel controls what the heatmap is testing.
Instrument: NIFTY, BANKNIFTY or SENSEX.
Structure: the options position being tested. The picker groups the families — Simple Straddles & Strangles (open by default), Iron Fly / Iron Condor, Delta Adjusted Straddles & Strangles and Batman. Simple opens by default (plus the family holding your current pick); tap Show all or any collapsed heading to expand every family, tap an open heading to collapse it. On the phone the picker opens as a bottom sheet. Each family behaves differently:
DTE (days to expiry): how many trading days remain to expiry on the entry day. 0 is expiry day itself; you can pick a single DTE, several at once (merged into one grid), or All.
Special days: a chips row (next to CAS) filters day types — Normal, Monthly-expiry and Quarterly-expiry sessions (identified from the instrument's own expiry calendar), Budget −1, Budget day and Budget +1 as three separate classes, and Election −1, Election day and Election +1 (around results-counting days) as three separate classes. Each day counts in exactly one class, by severity: budget-day > budget−1 > budget+1 > election-day > election−1 > election+1 > quarterly > monthly. Keep a single chip on to see performance on JUST those days, turn one chip off to exclude them, or leave all on (the default); the equity-curve selector (desktop) and the mobile Console's own Special Days row offer the same as Only…/Excl… presets. They exist because these sessions can behave differently from ordinary days, and pooling them can shift every average. The budget/election lists are curated 2021-01-01 to 2026-07-30; days after that window carry no event tag.
Research builds of the Lab show a Data switch in the top-right corner for comparing two dataset generations side by side. The published site serves a single, current dataset — every structure listed here is in it — so if you do not see that switch, nothing is missing.
04 — Timing
By default, a trade is held to the session close. For history before 2026-08-03 that means the 3:29 PM price; from 2026-08-03 — when NSE/BSE moved index settlement to a closing auction — newly-tested days use the 3:30 PM settlement print. The app labels the exit from what each dataset actually contains (an older dataset that was never re-tested after the change keeps its 3:29 PM label rather than claiming "market close"). The closing-auction note below applies to trades held to the close; earlier square-offs are mechanically unaffected. Some structures also have historical data for earlier square-offs, shown as extra buttons: 11:15 AM, 1:15 PM, 3:15 PM.
Where a structure has not been tested at an alternate exit, that option appears greyed out with "only close swept," and a tooltip explains that only the session-close exit exists in the data — a data-coverage note, not a bug. (Batman gained alternate-exit data on 2026-08-26, so its exit selector is live like the others'.)
05 — Your assumptions
The underlying P&L in Straddle Lab is gross — the raw historical option prices, before any trading costs. Your slippage, brokerage and STT inputs — plus the statutory charges the app models for you (exchange transaction charges, SEBI fee, stamp duty on bought legs, GST) — are applied live on top of that gross number. STT is charged on sold-leg premium and stamp duty on bought-leg premium, matching how the charges actually fall on multi-leg structures; brokerage is flat per order and does not scale with lot count. For Δ-adjusted structures the order count is per day and exact: each completed adjustment adds two orders (the early close plus the replacement) on top of the entry and exit orders, and the rolled legs' premiums are already inside the slippage/STT turnover. What you see reflects the cost assumptions you set — not a fixed number baked into the data.
Adjust these under Costs to match your own broker and typical execution style. Because they change results live, two people can look at the same structure and see different net numbers — that is expected.
06 — Vocabulary
The heatmap can be coloured by any of these. Switch between them to ask a different question of the same historical data.
| Metric | What it measures | What comparison it supports |
|---|---|---|
| Hist R/MDD | Total historical return divided by the worst historical drawdown. | A quick reward-for-pain ratio over the whole window. |
| Ann R/MDD | Return divided by calendar years spanned, then by the worst drawdown (a simple annualization, not compounding). | Comparing windows of different lengths on equal footing. |
| Hist / Ann return | Total, or annualized, historical % return. | The historical return over the window, in ₹ or as % of margin. |
| Win % | Share of tested days that were historically profitable. | The share of tested days that were profitable, regardless of size. |
| Reward:Risk | Average historical win size versus average historical loss size. | Understanding the shape of outcomes, not just the frequency. |
| Sharpe (@7% RF) | Historical return per unit of volatility, in excess of a risk-free rate (7% is the editable default; at 0 it becomes a plain mean-to-volatility ratio). | Judging how smooth or bumpy the historical return stream was. |
| Consistency | How steady historical results were across sub-periods. Losing cells score 0 — a view where every cell lost paints the whole grid red. | Avoiding a result that is really just one strong quarter. |
| Robustness | A proprietary score: high when the cell's neighbours (nearby entry times and stops) were also historically strong, so the result is not an isolated spike. Centre wt sets how much the cell itself counts. Its exact construction is not published. | Checking a cell isn't a lucky outlier surrounded by weak neighbours. |
| Zone return | A cell's annualized return averaged with its four neighbours (one entry time earlier and later, one stop step tighter and wider). The ★ can therefore sit on a cell whose own return is lower than a neighbour's. Centre wt sets how much the cell itself counts; at 1 it is a plain average. Coloured on the Ann return scale; in 0-anchored mode a losing zone is red. | Finding a whole region of settings that earned well, rather than a single cell that may have been lucky. |
07 — Market conditions
Regime filters restrict the historical window to days that matched a market condition: VIX percentile, IV percentile, price gap up/down, weekday, and more. This lets you see whether a structure's historical behaviour held up in high-VIX days, gap-down days, and so on — rather than pooling every day together.
Pick a conditioner (say VIX %ile) as the primary filter and the panel splits every tested day into four groups — Q1 (the 25% of days the reading was lowest) to Q4 (the highest). For the percentile conditioners the quartiles are ranked within the selected DTE by default (the "rank" toggle switches to overall), so each group is ≈25% of that DTE's full history (not of the days left after other filters) — ranking IV percentile across all DTEs at once mostly measures time-to-expiry, not regime. The look-back window defaults to 12 months (3m and 6m are selectable). Each horizontal bar shows the structure's average historical return per trade on that group's days. Tap a bar (or its Q chip) to include or exclude that group — the heatmap, KPIs and equity curve instantly recompute on only the days you kept. A secondary filter (overlay) composes on top: for example, keep only Q1-VIX days that were also gap-down days. Tap again to bring a group back.
The Strategy tab spells out exactly what the selected cell would have traded: each leg (bought or sold, and how far from the money), the entry time, the exit rule, and how the stop-loss is measured (percent of combined premium; percent of net premium for wing structures; percent of the original entry premium for Δ-adjusted structures — adjustments never re-base it; percent of the absolute net entry value for Batman). For Δ-adjusted structures it also states the exact adjustment rule. It re-reads your current selection, so it always describes the cell you are looking at — read it before interpreting any number on the grid.
The copy icon on the Strategy card puts the selected cell's rules on your clipboard as Markdown, ready to paste into notes or into an LLM that codes a strategy from a written rule. It contains the strategy sentence, every rule on the card (the stop-loss row with its trigger arithmetic), the bar treatment, the exact adjustment rules for Δ-adjusted structures, the cost assumptions as you have set them, and a replication note. When walk-forward is on, it also carries the walk-forward note. It describes the cell you are looking at, so paste it before you change the selection. Results from another tool can still differ, because of market data, contract selection and execution modelling.
The Regime tab has two views. Last session shows the readings (VIX level and percentile, IV percentile, price gap, VIX gap) as of the newest day in the data; Today's is for reading the current morning by hand — the Lab has no live feed. Below them, the optimiser lists ranked regime matches; tapping Apply on a row sets the main window's conditioner and buckets to that regime (its ★ then lands on the matching cell), and tapping it again returns to your previous view. More regimes searched means a thin slice can look good by luck — the row notes the day count for exactly that reason.
08 — Changing the rules
On straddles and strangles, three controls under the structure card change the trade's rules. Each one swaps in a separately backtested grid, so the heatmap you see is always the result of those rules, not an adjustment of the default one.
SL mode. Overall (the default) puts one stop on the combined premium, and all open legs close together (a leg still waiting for its entry trigger is cancelled). It is checked on the 1-minute candle close. Leg-wise gives each leg its own stop at the same percentage of its own entry price. It triggers intrabar at the level, or at the bar's open when the price gaps past it. One leg can stop out while the other runs on, unhedged. Leg-wise, Brk Even works as Leg-wise, but once one leg stops, the other leg's stop moves to its own entry price (only if that is tighter), from the next bar.
Entry trigger. At entry time (the default) sells at the clock. Leg decay sells each leg once its own premium has fallen the set percentage from its price at the entry time. It is checked intrabar, and the legs trigger separately, so on some days only one leg enters. Combined decay sells both legs once their combined premium has fallen the set percentage, checked on the candle close. A day the trigger never fires counts as ₹0: the capital was committed and nothing was earned.
Profit target. None (the default) holds to the exit time. 25%, 50% or 75% books the profit once it reaches that share of the premium, and the target follows the SL mode. With an Overall stop, the target is on the same combined-premium base as the stop, checked on the candle close. With a Leg-wise stop, each leg has its own target at that percentage below its own entry price. It triggers intrabar and fills at the level, or at the bar's open on a gap. A stop and a target touched on the same candle count as the stop. Batman, iron fly/condor and Δ-adjusted structures have none of these three controls.
09 — Testing a choice
Every cell on the heatmap is judged on the whole window, so picking the best one uses hindsight. Walk-forward asks a different question: if you had picked the best cell using only the days before, how would it have done on the days that followed? Switch it on in the Console, under Period.
Windows. Training is how much history each pick is made from: 6 months, 1 year, 2 years, or All (every day before the test period, which needs at least a year before the first pick). Test is how long each pick is then traded before the Lab picks again: 3 months, 6 months or 1 year. The default is 12 months of training with 3-month tests. With Rolling windows, the first test period starts on the first day of the Period and each next one starts one test length later. With Calendar windows, test periods start on calendar boundaries (1 Jan, Apr, Jul and Oct for 3-month tests; 1 Jan and Jul for 6 months; 1 Jan for a year), and training is whole months: 6 months before 1 October is 1 April to 30 September. Days of the Period before the first boundary are not tested, and the note says so.
The pick. Best cell picks the cell with the best training score on the Console's metric. Best zone first averages each cell's score with its 4 neighbours (one entry time earlier and later, one stop step tighter and wider, with Centre wt applied), then trades the centre cell of the best zone. On Zone return and Robustness, which already reward strong neighbours, Best zone averages once more, over a wider zone. Ties go to the higher Ann return. The pick is always traded, even when every cell lost money in training, and the result is shown as it happened.
Reading the result. Each grid cell is coloured by its own result over the test periods only, and each period's pick is marked on the grid when it traded in that period. The equity curve and the stats are the stitched walk-forward trades. An optional ★ curve (off by default) adds the Console's ★ cell for comparison. That cell is chosen with hindsight over the whole Period, so it is a reference, not a ceiling: it is best on the metric, not necessarily on P&L. The table switches between the Period log (the default) and Yearly. The Period log shows each period's pick, its metric in training and in the test period side by side, its P&L, its maximum drawdown, and its rank among all cells in that test period (100 = best).
Warm-up. If the data before the Period is shorter than one training window, the first training window is taken from the first days of data instead, and testing starts once a full window exists (for All, after the first year). Days of the Period used this way are left out of the curve and the stats, and a note in the Console and in the results says so.
Filters (weekday, DTE, VIX, IV, gap and the rest) apply to training and test days alike, and changing one re-runs the walk-forward. Each day's VIX and IV percentile uses only earlier data. The cut-offs between the four quartile groups, however, come from the full history (2021 to today) on purpose. The history is short, and India VIX moved from the 20s in 2022 to 10–14 in 2024–25, so cut-offs drawn from only the years seen so far would not describe a broad range of conditions. We tested causal cut-offs against these and found no measurable effect on out-of-sample results.
10 — Under the hood
Selecting a structure shows a card describing exactly what it is: the individual legs (bought vs. sold, and how far from the money), whether it is a net credit or net debit at entry, and the margin required.
The margin figure comes from a SPAN-plus-exposure replica of the exchange calculation — a representative value (median over a recent 250-trading-day window), per structure and per DTE, not a flat number and not an exact quote for any given day. You can type your own figure to override it. The P&L and return percentages on the page are calculated against this margin, so it's worth checking whenever you compare two structures: a structure with more short legs (like Batman) typically needs more margin than one with fewer, even when it looks "more hedged."
11 — On your phone
The mobile page carries the same underlying data in a single-column, tap-to-expand layout. Tabs — Console, Results, Strategy, Regime — replace the desktop's side-by-side panels, and each section header (Test, Metric, Filters, Costs, Structure…) expands in place when tapped.
Everything explained above for desktop — the heatmap, structures, exit times, costs, metrics, regime filters, and the structure card — is the same data on mobile, just laid out for a narrower screen.
12 — Questions
Is this investment advice?
No. Straddle Lab is a research and educational tool. It shows historical, backtested behaviour of options strategies — it does not recommend, and should not be treated as a signal to buy, sell or hold any security or derivative. Please consult a SEBI-registered investment adviser before making any trading decision.
Why is a cell blank?
Some entry-time / stop-loss / date combinations were never tested, or the underlying option price was unpriceable on that day (for example, a very cheap Batman leg near its credit/debit crossover). A blank cell means "no data" — it is deliberately never filled in as a zero, because that would look identical to "traded and made nothing."
Why are some controls locked?
On the free and trial plans, SL mode, the entry trigger, the profit target and walk-forward are part of Pro. They are shown with a lock so you can see what the Lab offers, and selecting one explains that. Batman, iron fly/condor and Δ-adjusted structures do not have SL mode, entry trigger or target, so those show no lock there; walk-forward is locked on every structure.
Why does a metric show "n/a" for a short window?
Annualized figures need enough history to be meaningful. A window shorter than about a month shows n/a rather than a precise-looking but misleading annualized number.
Why does margin change with DTE?
Exchange margin rules add an extra buffer on expiry day itself (a regulatory expiry-day exposure add-on), so DTE0 margin is typically higher than DTE1–4 for the same structure. Because margin is the denominator of the P&L and return percentage figure, this also shifts the % numbers you see between DTEs.
Why is Batman's margin higher than a straddle's, even though it's "hedged"?
The exposure part of exchange margin is charged per short lot, with no hedge relief. Batman carries four short lots (two sold body legs, double quantity each side) against a straddle's two, so its margin runs meaningfully higher — around 20–30% in the shipped figures, not double, because the SPAN part does recognise the bought wings —, even though the bought inner legs offset part of its price moves.
What does "undefined tail risk" mean on Batman?
Batman's potential loss is not capped in the tails. The stop-loss manages risk on a normal day; the flag is about what sits beyond it. Beyond its outer "ear" strikes, losses can keep growing as the underlying moves further — unlike Iron Fly or Iron Condor, where the bought outer wings put a hard ceiling on the maximum loss.
Are the P&L numbers gross or net?
The underlying historical numbers are gross — before any trading costs. Your own slippage, brokerage and STT assumptions in the Costs panel are then applied live on top, so the net figures you see reflect your assumptions.
Can I use the optimiser's suggestion as a trade idea?
Treat it as a description of the past, not a plan for tomorrow. The optimiser highlights the cell with the highest historical result for your current filters — it does not know what will happen next, and market conditions that produced a strong historical result may not repeat.