# LAB guide

> Describe an idea in plain words, read an honest verdict on every finished session, and keep the rules you trust drawing on your chart.

Source: https://firmtape.com/docs/lab

LAB credits: developing an idea is free, a backtest or an optimize pass is one credit, the desk is free once an idea is tested. LIVE includes 5 credits a month.

## Why it matters

Patterns on the tape are easy to see and hard to trust. LAB answers one question: **does this rule beat its own core condition, after a cost, out of sample?**

What LAB scores is directional: a rule names the way its trade profits, and the backtest measures whether that move arrives. That does not contradict the rest of the terminal, which asserts no direction: LAB is where a directional idea goes to be measured instead of believed, and that is usually where it stops.

The path has four steps: an idea in plain words, a backtest against an honest baseline, a quant optimize pass, and **the desk**, where a rule you keep draws on the chart and alerts with the same formula the backtest scored.

Every column a rule names is a measurement already in the archive: the session clock, the price and its distances, the levels of each book, the flow, volatility, the calendar and the minutes the tape marked.

## Where to find it

Press **LAB** in the terminal's top bar; the LAB desk opens beside the chart. The reference pages are [/lab/vocabulary](https://firmtape.com/lab/vocabulary) and [/docs/developers/lab](https://firmtape.com/docs/developers/lab).

| You want | Go to |
| --- | --- |
| Test an idea | LAB, type it in the box at the bottom of the desk |
| Start a new idea | LAB, **+ NEW IDEA** |
| See every column a rule can use | LAB, **VOCABULARY**, or [/lab/vocabulary](https://firmtape.com/lab/vocabulary) |
| Try ideas others posted | LAB, the **IDEA FEED**, **DEVELOP** |
| A tested rule on the chart | **ADD TO DESK** after optimizing, then the idea's switch on the desk |
| An alert when a rule triggers | the idea's settings (the gear), **ALERT**: sound or push |
| Credits | LAB, **GET CREDITS**, or Account, Credits and tokens |

## Read it in 30 seconds

1. **Gates passed** (2/4) is the verdict: all four must pass for a rule to be called promising and still owe a stricter test.
2. **Beats its own core** compares the full rule with its core condition alone, never with doing nothing.
3. The era table shows **all**, **2026** and **hold40** (the last 40 sessions): a rule that only works in one era did not pass.
4. **Outside the day error bar** is a t across sessions, not across trades: nine triggers in one afternoon count as one day.
5. After an optimize pass, read the overfitting line before any number in the variant table.
6. On the desk, a blinking colour dot means the idea is drawing on the chart now; a grey dot means it is off.

## How to use it

**Describe an idea**

### The LAB desk and the backtest

**Why:** a verdict on every finished session, against the idea's own core condition, out of sample. **Where:** **LAB** in the top bar; **+ NEW IDEA** starts one, the box at the bottom sends it. **Plan:** Developing is free; a backtest is one LAB credit.

1. Press **LAB** in the top bar. The desk lists your ideas.
2. Press **+ NEW IDEA** and type the idea the way you would say it, for example a stretch off VWAP while the book is short gamma, with a 30-minute horizon.
3. Read what LAB understood: the rule in words, with its thresholds, horizon and cost. If it cannot compile yet, it asks one concrete question instead of guessing.
4. Press **BACKTEST** (one credit).
5. Read the gates passed, then the era table under them.

![LAB backtest verdict: 2 of 4 gates passed, with the four gates and the era table for all sessions, 2026 and the last 40 sessions](https://archive.firmtape.com/press/features/lab/backtest.fe6b4200.webp)

> **What it measures:** The rule runs over every archived session on a minute grid. For each trigger it measures the move over the horizon, after the cost, and compares the full rule with its core condition alone. The verdict is split out of sample: this year, and the last 40 sessions.

| Control | What it does |
| --- | --- |
| Clears the cost | Net per trade is positive after the cost, in 2026 and hold40 |
| Beats its own core | The full rule does better than its core condition alone |
| Outside the day error bar | The day-clustered t is at least 2.0 |
| Beats the luck of its grid | The deflated Sharpe against the variants tried is at least 95% |
| era table | n triggers, net per trade and t for all sessions, 2026 and hold40 |

How to read it:

- **2/4 gates passed, promising, not proven** means the rule has not cleared the bar; four of four means it owes a stricter test.
- A thin sample is named: 48 trades over 8 sessions is eight observations, not 48.
- A good number in one era and a poor one in another is a rule that did not hold.

**Limits:** SPX only, inside one session, at a 5, 15 or 30 minute horizon. A tested idea can draw and alert on the chart with the same thresholds; that is a convenience, not a forecast.

**Related:** [The LAB desk and the backtest, the full page](https://firmtape.com/features/lab/backtester) · [LAB: Quant optimize](https://firmtape.com/docs/lab#quant-optimize) · [LAB: The LAB vocabulary](https://firmtape.com/docs/lab#vocabulary) · [LAB: Credits and tokens](https://firmtape.com/docs/lab#credits-and-tokens) · [REPLAY](https://firmtape.com/docs/replay)

### The LAB vocabulary

**Why:** know exactly which measurements a rule can name, and which book each one reads. **Where:** LAB, **VOCABULARY**, or the full reference at [/lab/vocabulary](https://firmtape.com/lab/vocabulary). **Plan:** Free to read.

1. Open **VOCABULARY** on the LAB desk, or [/lab/vocabulary](https://firmtape.com/lab/vocabulary).
2. Find the group your idea belongs to, then the column, its unit and range.
3. Use the column's name in your words, or in a rule sent through the API.

![The LAB vocabulary page: how a rule is written, one or two legs, with an example rule in JSON](https://archive.firmtape.com/press/features/lab/vocabulary.dbc1d63b.webp)

LAB understands 120 columns in ten groups, each named for what it is and, where the value depends on a book, for its book: `_vol` the volume book, `_meas` the measured book, `_oi` open interest. Old names (renamed 2026-10-03) are refused with the new one in the error.

A rule is one or two legs. A leg has a direction, `up` or `down`, the way the trade profits, and a list of conditions that must all hold at the same minute. The engine measures the move over the next 5, 15 or 30 minutes of the same session, after a cost, against the core condition alone, out of sample.

| Group | What it holds |
| --- | --- |
| time | `min`, `minutes_to_close`: where in the session the rule is read. The last *horizon* minutes have no outcome. |
| price | spot, its running mean and ±2 SD band (not a VWAP), the stretch in SDs (`spot_mean_z`), the last 1 / 15 / 30 minutes of tape (`ret1`, `ret15`, `ret30`), intra-minute realised vol. |
| levels | the flip, the call wall and the put wall as signed distances in all three books, how much of the book stands on each wall, and whether the books agree on a wall. |
| book | net gamma per book, its 1-minute flow and its percentile against the same minute of the prior 20 sessions; measured delta, vega, charm and vanna and their flows; the largest single-strike change and the total change of the book; concentration. |
| gross | the unsigned book (\|γ\| × OI per strike): its total, the heaviest strike each side and its distance, the near and top-3 shares, signed ÷ unsigned, and the two-sided measured book within 30 points with its 15 / 30-minute changes. |
| expiry | today's 0DTE against the book that survives it, per book, and the width the session was archived with. |
| vol | 0DTE ATM IV and its 1 and 30-minute changes, the straddle and how much of the expected move is used, FirmTape's forecast of the range left, realised ÷ implied range at 15 / 30 / 60 minutes, realised ÷ implied vol, skew and its ratio form. |
| tape | contracts printed per minute across the whole 0DTE chain, and its rank against the same minute of the prior 20 sessions. |
| calendar | day flags for FOMC, CPI, payrolls, PCE, ISM, a mega-cap print and opex, whether a release came before the open, minutes to the next / since the last in-session event, and which expiry the session is. |
| pulse | the minutes the tape itself marked as market-moving: minutes since the last, its size, whether a headline or the book alone moved it, and the count so far. |

**Limits:** The vocabulary is the same dictionary the compiler is given, so what is not in it cannot be tested yet.

**Developer reference:** [/docs/developers/lab/vocabulary](https://firmtape.com/docs/developers/lab/vocabulary)

**Related:** [LAB: The LAB desk and the backtest](https://firmtape.com/docs/lab#backtester) · [LAB: LAB from a script](https://firmtape.com/docs/lab#lab-api) · [Data dictionary](https://firmtape.com/dataset/dictionary)

### The idea feed

**Why:** a running supply of rule-shaped ideas to test, when you do not have one of your own. **Where:** LAB, the **IDEA FEED** beside the desk. **Plan:** Free to read; testing spends credits.

1. Read the feed: each card has the idea, when it was found and whether it compiles clean.
2. Press **DEVELOP** to drop it into the desk exactly as if you had typed it.
3. Backtest it like any idea of your own.

![An idea feed card marked new, compiles clean and untested, with its DEVELOP button](https://archive.firmtape.com/press/features/lab/idea-feed.abc6dd8c.webp)

How to read it:

- Every card is marked **untested**: the feed is deliberately not judged, and the test is yours to run.

**Limits:** The ideas are collected from public posts by a scanner and are not checked before they appear.

**Related:** [LAB: The LAB desk and the backtest](https://firmtape.com/docs/lab#backtester)

**Backtest and optimize**

### Quant optimize

**Why:** learn whether a better threshold exists, or whether the best one is only lucky. **Where:** after a backtest, **OPTIMIZE** on the LAB desk. **Plan:** One LAB credit a pass.

1. Backtest the rule first.
2. Press **OPTIMIZE** (one credit). Every threshold of every filter is swept.
3. Read the chart: the running total of the rule as written against its variants.
4. Read the variant table by era, then the lines under it: the five best days' share, the deflated Sharpe, the overfitting check.

![Quant optimize: the rule as written against its variants, a table of each variant by era with its deflated Sharpe, and the overfitting check over 12,870 splits](https://archive.firmtape.com/press/features/lab/optimize.adac1ec1.webp)

> **What it measures:** Each variant's net per trade in all sessions, 2026 and hold40; the deflated Sharpe of the best row against the number of variants; the probability that the best row lands below the median out of sample, over thousands of splits.

How to read it:

- Green means positive out of sample, above the core baseline and outside the day-clustered error bar; anything that clears still owes a stricter test.
- **The five best days are 131% of the total** means that without them the rule loses.
- **Picking the best row is no better than picking at random** is the overfitting check saying the grid holds no real ordering.

**Limits:** Variants that never bind give identical rows; that says the filter decided nothing.

**Related:** [LAB: The LAB desk and the backtest](https://firmtape.com/docs/lab#backtester) · [LIVE: The archive run](https://firmtape.com/docs/live#archive-run)

**Put it on the chart**

### The desk on the chart

**Why:** see where your tested rule triggers, on the live session, on any finished day and in playback, with the formula the backtest scored. **Where:** **ADD TO DESK** after a backtest or an optimize pass; the desk lists your ideas, each with its switch, its draw style and its colour. **Plan:** Free once an idea is tested; the live session needs LIVE, finished days are free.

1. Take an idea through **BACKTEST** (and **OPTIMIZE** if you like), then press **ADD TO DESK**.
2. Flip the idea's switch on the desk. A blinking colour dot means it is drawing; grey means it is off.
3. Pick how it draws: **ZONES**, **MARKS**, **TRADES** or **RAILS**, and its colour from six.
4. Play a finished session, or follow the live one: the drawing moves with the chart.
5. Press the star to pin an idea to the top of the list.

![The LAB desk with three tested ideas, each with its draw style, its alert flag and the switch that draws it on the chart](https://archive.firmtape.com/press/features/lab/desk.73bfa615.webp)

> **What it measures:** The rule's conditions read at each minute of the day on screen, with the thresholds the backtest used. For a rule whose core is a stretch off VWAP, the threshold is a rail (VWAP plus a number of standard deviations of the session's prices) and its crossings are computed on any day, live included.

| Control | What it does |
| --- | --- |
| ZONES | The strips of time where the rule's core condition held |
| MARKS | A triangle at each entry on the day on screen |
| TRADES | The marks plus a dotted tail over the rule's own horizon: a simulated trade, nothing is placed |
| RAILS | Dashed threshold lines for each leg's core condition |
| switch | Draws the idea on the chart or stops it |
| star | Pins the idea to the top of the desk |

How to read it:

- A mark is where the rule's conditions were met, measured on that minute. It is not a call to act.
- A simulated trade shows the rule's horizon from its entry; its result is the backtest's kind of measurement, not a forecast.
- Most rules on most desks did not clear the honest bar; drawing one does not change its verdict.

**Limits:** A rule whose core is not a stretch off VWAP has no price line to cross: rails and zones stay empty, and its marks and trades come from the backtest's recent triggers, so they show only on those days. SPX only.

**Related:** [LAB: Desk alerts](https://firmtape.com/docs/lab#desk-alerts) · [LAB: The LAB desk and the backtest](https://firmtape.com/docs/lab#backtester) · [REPLAY: The playback bar](https://firmtape.com/docs/replay#playback)

### Desk alerts

**Why:** the chart watches your rule for you, live or in playback, and tells you the moment it triggers. **Where:** the idea's settings on the desk (the gear), **ALERT**: **OFF**, **SOUND** or **PUSH**. **Plan:** Free on a desk idea; on the live session with LIVE.

1. Open a desk idea and press the gear for its settings.
2. Under **ALERT** pick **SOUND** (then a tone and a volume) or **PUSH**.
3. For **PUSH**, allow notifications when the browser asks; a test notification confirms it.
4. Keep the terminal open: the alert fires when the rule triggers as time passes on the chart.

![A desk idea's settings: the draw style, the colour and ALERT set to PUSH, with OFF and SOUND beside it](https://archive.firmtape.com/press/features/lab/desk-alerts.3956b747.webp)

> **What it measures:** The same crossing the desk draws: the price moving through the rule's rail at a minute it had not crossed before. It fires on time that passes (a live tick, a playing playback, a one-step arrow) and stays silent on a far jump of the scrubber or a step backwards.

| Control | What it does |
| --- | --- |
| OFF | No alert |
| SOUND | A tone in the open terminal: pop, bass, bright or phone, with a volume |
| PUSH | A browser notification naming the idea and the price where it triggered; falls back to the sound when notifications are blocked |

How to read it:

- An alert is the rule's measured trigger, the same one its backtest counted. It says nothing the backtest did not.

**Limits:** Desk alerts sound or notify in the browser where the terminal is open; they are separate from the alert lines and level alerts, which go to Telegram, push and your webhook ([Alerts and delivery](https://firmtape.com/docs/live#alerts)). They need a rule with a rail (a core that is a stretch off VWAP). SPX only.

**Related:** [LAB: The desk on the chart](https://firmtape.com/docs/lab#desk) · [LIVE: Alert lines](https://firmtape.com/docs/live#alert-lines) · [LIVE: Level alerts on a watchlist](https://firmtape.com/docs/live#level-alerts)

**Credits and tokens**

### Credits and tokens

**Why:** machine time priced honestly: conversation is free, each job has a fixed cost. **Where:** LAB, **GET CREDITS**, or Account, Credits and tokens. **Plan:** LAB packs or the LAB monthly plan; LIVE includes 5 credits a month. [Pricing](https://firmtape.com/pricing).

1. Read your balance: the plan's monthly credits and the purchased ones, shown apart.
2. Press **GET CREDITS** for the packs, or start the monthly plan.
3. Under Account, Credits and tokens, **+ Create token** makes a LAB token for scripts and assistants; it is shown once.

![The LAB card: packs from $9, with what a backtest on more than 1,000 sessions, an honest baseline and every variant shown give you](https://archive.firmtape.com/press/features/lab/credits.973d3573.webp)

| Job | Credits |
| --- | --- |
| Developing an idea in the chat | 0 |
| A backtest | 1 |
| An optimize pass | 1 |
| An OPTIONS archive run | 10 |

How to read it:

- Monthly credits are spent first and expire with the month; purchased credits never expire.

**Limits:** A failed job refunds its credit automatically. A LAB token spends the same credits as the terminal.

**Related:** [LAB: LAB from a script](https://firmtape.com/docs/lab#lab-api) · [REPLAY: MCP server](https://firmtape.com/docs/replay#mcp-server) · [LIVE: The archive run](https://firmtape.com/docs/live#archive-run)

### LAB from a script

**Why:** automate research: compile, backtest, optimize and read the verdict without the terminal. **Where:** Account, Credits and tokens, **+ Create token**; the reference is [/docs/developers/lab](https://firmtape.com/docs/developers/lab). **Plan:** The same LAB credits as the terminal.

1. Create a LAB token on the account page.
2. Send it as the Authorization header from your script.
3. Describe, backtest and optimize exactly as on the desk, and read the same verdict as JSON.

![The LAB API page: run your ideas from a script, same conveyor, same credits](https://archive.firmtape.com/press/features/lab/api.92449b6f.webp)

**Limits:** Every call spends credits like the desk does.

**Developer reference:** [/docs/developers/lab](https://firmtape.com/docs/developers/lab)

**Related:** [LAB: Credits and tokens](https://firmtape.com/docs/lab#credits-and-tokens) · [LAB: The LAB vocabulary](https://firmtape.com/docs/lab#vocabulary) · [REPLAY: MCP server](https://firmtape.com/docs/replay#mcp-server)

**Read the evidence**

### Published research

**Why:** see what has been measured on this data, with its sample and method, before trusting a reading or testing an idea. **Where:** [/research](https://firmtape.com/research), grouped as do the levels hold, what the book is made of, rules tested and published work replicated. **Plan:** Free.

1. Open [/research](https://firmtape.com/research) and pick a group.
2. Read the dated header: the book, the sample and the status of the measurement.
3. Read the table and the definitions under it, so the numbers cannot be read as something else.

![A research post's table: how often five levels held after 10:00 ET over about 1,000 sessions, with broke at close, came back and overshoot](https://archive.firmtape.com/press/features/lab/research-table.a8e84af1.webp)

How to read it:

- Every post states its sample, its method and its caveats, so it can be rebuilt from the public session files.
- Null results are published too: a level that holds as often as a random line at the same distance is reported as that.

**Limits:** Posts are re-measured as the archive grows and say so. None of it is investment advice.

**Related:** [LAB: The LAB desk and the backtest](https://firmtape.com/docs/lab#backtester) · [REPLAY: The session archive and session pages](https://firmtape.com/docs/replay#session-archive)

## Add to LAB

| Add-on | What it adds |
| --- | --- |
| [LAB credit packs](https://firmtape.com/lab#what-it-costs) | TASTE, RESEARCH and DEEP DIVE: credits that never expire, without a subscription |
| [OPTIONS archive run](https://firmtape.com/options) | A structure tested over the archive on real quotes, paid in LAB credits |

## Use it with other tools

| Tool | How it pairs |
| --- | --- |
| [REPLAY](https://firmtape.com/docs/replay) | Replay the sessions behind any number LAB reports, free. |
| [LIVE: The archive run](https://firmtape.com/docs/live#archive-run) | Test a structure on real quotes with the same credits. |
| [LIVE: Alert lines](https://firmtape.com/docs/live#alert-lines) | Desk alerts are LAB's own; alert lines and level alerts watch a price or a level instead. |
| [LIVE: The ASK drawer](https://firmtape.com/docs/live#ask-drawer) | ASK can explain a reading before you write a rule on it. |
| [REPLAY: MCP server](https://firmtape.com/docs/replay#mcp-server) | Run LAB from an AI assistant with a Lab token. |

## Good to know

- Developing an idea costs nothing; credits are spent only on a backtest or an optimize pass, and a failed job refunds its credit.
- Purchased credits never expire and are spent after your monthly allowance.
- LAB tests SPX only, inside one session, at 5, 15 or 30 minutes.
- Adding an idea to the desk and drawing it cost nothing: the credits were spent getting it tested.
- A desk alert fires as time passes on the chart (the live tape, a playing playback, a one-step arrow), never on a far jump of the scrubber.
- A seeded idea on every new desk walks the whole conveyor, and its verdict is that it does not clear the honest bar, because that is what most ideas honestly do.

### If something looks wrong

| You see | Do this |
| --- | --- |
| The chat asks a question instead of compiling | Your words did not map to one rule yet; answer the question with the threshold or the column it names. |
| Every variant in the optimize table has the same numbers | The filter changed did not bind on any session; the rule is its core plus a condition that never decided anything. |
| A send opens the credits card | Your balance is zero; developing stays free, a backtest needs one credit. |
| A desk idea draws nothing on the day on screen | A rule whose core is not a stretch off VWAP has no rail; its marks come from the backtest's recent triggers and show only on those days. |
| A push alert never appears | Allow notifications for firmtape.com in the browser; until then the alert falls back to the sound. |
| A column name is refused | Columns were renamed on 2026-10-03 with the book as a suffix; the error names the new spelling. |

## Glossary

| Term | Meaning |
| --- | --- |
| core condition | The one condition an idea stands on; the baseline every filter must beat. |
| hold40 | The last 40 sessions, held out of the build as a recent out-of-sample check. |
| deflated Sharpe | A Sharpe ratio discounted for the number of variants tried. |
| day-clustered t | A t statistic measured across sessions rather than across triggers. |
| desk | The list of tested ideas you keep; each can draw on the chart and alert. |
| simulated trade | A desk drawing of the rule's entry and its horizon; nothing is traded. |
| credit | The unit LAB jobs spend: one for a backtest or an optimize pass, ten for an OPTIONS archive run. |
