The research pipeline
Every workflow on Backtest.ai ends in a backtest. The stages before it, a signal and a model, exist to shape what that backtest does, and both are optional. You reach for them when an idea needs a filter or a sizing rule that a fixed strategy cannot express, and you skip them when it does not. And you rarely run the pipeline once. You read a result, change one thing, and run it again.
That loop is the whole point. The pipeline is not a checklist you complete top to bottom. It is a set of stages you enter at the depth your idea needs, ending at the same place every time.
The three stages
The pipeline has three stages, each with one job.
- Signal derives a value from market data over one symbol and a date range. It answers "what is true right now," for example where 30-DTE IV sits in its trailing one-year distribution.
- Model combines one or more signals into a single fitted output, a predicted value or a class probability, and validates it walk-forward.
- Backtest runs a multi-leg options strategy over real intraday data and reports what it would have done.
Exploratory data analysis (EDA) is not a fourth stage. It lives inside the Signal work: you write a signal, then explore it against a benchmark on the same page, reading its distribution and its relationship to an outcome before you trust a threshold. So the spine is Signal (with EDA), then Model, then Backtest.
The Backtest stage is terminal. A signal on its own tells you a number moved; it does not tell you whether a strategy built around that number made or lost money after fills and margin. Only a backtest closes that gap, which is why every path ends there and the two upstream stages are optional.
Signal (with EDA), optional first stage
A signal is an expression in the Signal language, evaluated minute by minute over one symbol across a date range. Write it, run it, and you get back a Signal: a {timestamp, value} series you can chart, read against a benchmark, and reuse.
Reuse is the reason a signal is worth saving. Save a signal under a name and you can pull it into a later signal or into a backtest by reference, with signal("slug"), instead of rewriting the expression. A backtest that gates entry on IV rank does not embed the IV-rank math; it imports the saved signal and reads its value.
Authoring, evaluating, saving, and importing signals all happen at this stage. The EDA charts, the four generated views that turn a raw signal into something you can judge, are a time series, a distribution, a scatter against an outcome, and a decile breakdown, and they read the signal against a benchmark so a level means something. This is where you find the threshold you later hard-code into an entry filter.
You can skip this stage. A strategy with no conditional filter needs no signal at all.
Model, optional
A model combines one or more signals into a single fitted output and validates it out of sample.
Four model types are available. Two predict a value: linear regression and random-forest regression. Two predict a class probability: logistic regression and random-forest classification. Every model type is validated walk-forward, the default discipline for all four, so its reported performance comes from data it was not fit on.
Reach for a model when one threshold on one signal is too blunt: you have several signals and you want their combined, fitted verdict to drive entry rather than a hand-picked cutoff. The model's output, a predicted value or a class probability, then gates or sizes trades in a backtest. The tunables and the per-family training outputs live on the model pages, not here.
You can skip this stage too. Most strategies do.
Backtest, every workflow ends here
A backtest runs a multi-leg options strategy over real intraday data and reports the result: the equity line, the trades, the margin used, and the summary statistics. It is the terminal stage and the only one that tells you whether an idea survives contact with fills and margin.
You do not have to arrive here through a signal or a model. Go straight from an idea to a backtest when the strategy is unconditional, a fixed structure entered and exited on price and time with no filter to compute. Start from a saved signal when you already know the threshold and want it as an entry filter. Either way you land in the backtest lifecycle and end at the results.
Valid skip-paths
Which stages you use depends on the idea, not on a fixed order. These are the paths that make sense.
Every path in this table runs end to end on the platform.
The iterative loop
You almost never run the pipeline once. The normal rhythm is a loop: read a backtest result, change one thing, run it again, and compare the two side by side. Widen the date range. Move a threshold. Swap one saved signal for another. Each turn is one edit and one re-run, not a rebuild from scratch.
Two things keep that loop cheap. Extend a saved signal to a later end date and it resumes from where it left off instead of recomputing its whole history. Save a backtest at a clean end, then extend it to a later date, and it resumes from the saved boundary rather than replaying the full range. Neither forces a full recompute, so pushing an experiment forward in time costs only the new days.
The stages give you depth when an idea needs it. The loop is how the idea gets sharp.