Methodology
How the numbers are produced
Everything the workspace calculates is deterministic and documented here, so you can check it by hand.
Sample data
Each scenario is a synthetic series of 252 daily bars generated from a fixed seed: the same scenario always produces the same prices. Log-returns are drawn from a normal distribution whose drift and volatility depend on the regime. Open, high, low and volume are derived from the close path with bounded noise.
| Scenario | Model | Seed | Bars |
|---|---|---|---|
| Steady trend | Drift +0.07% per bar, volatility 0.8% per bar | 1105 | 252 |
| Range-bound | No drift; mean reversion toward 100 (strength 0.06), volatility 1.0% | 2202 | 252 |
| Volatility shock | Calm (0.6%) for 140 bars, a −8% gap, a 15-bar slide of −0.6% per bar with volatility ~2.4% decaying over 60 bars, then a slow recovery | 3355 | 252 |
| Drawdown & recovery | −0.22% per bar for 90 bars, flat for 50, then +0.28% per bar | 4432 | 252 |
r_t = μ_t + σ_t · z_t, z_t ~ N(0, 1) close_t = open_t · exp(r_t)
Execution model
Signals are computed on the close of a bar and executed at the open of the next bar, so a rule never uses information it would not have had.
Each fill pays slippage against you and a fee on the traded amount. Positions are long or flat, sized as a fixed percentage of current equity, with no leverage.
entry fill = open × (1 + slippage) exit fill = open × (1 − slippage) fee = fill × quantity × fee rate
- No short selling, leverage or margin
- No partial fills, order book or latency
- Costs are constant; real costs vary with conditions
Strategy templates
Moving-average crossover: long while the fast simple average is above the slow one.
Breakout: enter when the close exceeds the highest high of the lookback window; exit when it closes below the lowest low of half that window (minimum 5 bars).
Mean reversion: enter when the close is at least the entry distance (in standard deviations) below its average; exit once it is within the exit distance.
Metrics
All metrics use a 10,000 sample account. Percentages are rounded to two decimals.
net return = (final equity − 10,000) / 10,000 max drawdown = max over t of (peak_t − equity_t) / peak_t exposure = bars with a position / all bars cost share = total costs / gross gains volatility = stdev(daily equity returns) × √252
AI explanations
By default every summary is rule-based (see below). If the operator configures an AI provider, a button lets you ask a language model to explain the latest run in prose. The model receives only the numbers and the rule-based statements, is told not to predict or recommend, and its text is labelled with the model name. It can still be wrong — treat it as a second reading, not as evidence.
Summary rules
Each statement in a summary is triggered by a fixed condition on the run's metrics:
| Condition | Statement |
|---|---|
| always | Net result versus buy-and-hold in the selected scenario |
| trades < 10 | Too few trades to tell skill from chance |
| exposure < 35% | Mostly out of the market |
| exposure > 85% | Result close to the market's own path |
| costs / gross ≥ 30% | Costs consumed a large share of gains |
| max drawdown ≥ 15% | Deep drawdown — would you have followed the rules? |
| trades ≥ 5, win rate < 40%, net > 0 | Result depends on a few larger gains |
| always | Synthetic data and simple execution model |
Check it yourself
Run a note, export it as CSV and recompute any metric with the formulas above.