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.

ScenarioModelSeedBars
Steady trendDrift +0.07% per bar, volatility 0.8% per bar1105252
Range-boundNo drift; mean reversion toward 100 (strength 0.06), volatility 1.0%2202252
Volatility shockCalm (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 recovery3355252
Drawdown & recovery−0.22% per bar for 90 bars, flat for 50, then +0.28% per bar4432252

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:

ConditionStatement
alwaysNet result versus buy-and-hold in the selected scenario
trades < 10Too 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 > 0Result depends on a few larger gains
alwaysSynthetic data and simple execution model

Check it yourself

Run a note, export it as CSV and recompute any metric with the formulas above.

Open the research workspaceRisk Disclosure