Objects

Track record

A track record: how one pattern family resolved over the last 20 years of the served universe, or how it resolved on one ticker.

A track record: how one pattern family resolved over the last 20 years of the served universe, or how it resolved on one ticker. Null where a record would go when none is stored; never a partial block. Never present win_rate_pct without sample_size and avg_loss_pct; quote summary whole.

Fields

FieldTypeDescription
scopestring (enum)family when the record covers every ticker in the served universe, ticker when it covers one symbol. One of family, ticker.
familystringThe pattern family the record is for (rising_wedge, falling_wedge, bullish_pennant, bearish_pennant, triangle).
symbolstring · nullableThe ticker at ticker scope; null at family scope.
win_rate_pctnumber · nullableShare of resolved trades that reached the target, as a percent (54.0 means 54%), one decimal. At ticker scope the stored rate is shrunk toward the family rate so a handful of trades cannot read as 0% or 100%; wins and losses stay raw. Never quote it without sample_size and avg_loss_pct.
sample_sizeintegerNumber of trades in the record: the stored trade count, or wins plus losses when no count is stored. The summary sentence quotes it as resolved trades.
winsintegerResolved trades that reached the target.
lossesintegerResolved trades that hit the stop. A bar that reaches both target and stop counts as a loss.
avg_win_pctnumber · nullableMean price move of the winning trades from entry to exit, as a percent of the entry price (positive), two decimals.
avg_loss_pctnumber · nullableMean price move of the losing trades from entry to exit, as a percent of the entry price (negative), two decimals.
median_win_pctnumber · nullableMedian winning move as a percent of the entry price: the typical win, less sensitive to outliers than avg_win_pct.
avg_trade_pctnumber · nullableMean price move over all resolved trades, wins and losses together, as a percent of the entry price.
avg_rnumber · nullableMean R multiple over resolved trades, where one R is the entry-to-stop distance; 0.41 means the average trade made 0.41 times its risk.
expected_rnumber · nullablePer-trade expectancy in R: win rate times the average winning R plus loss rate times the average losing R. Equals avg_r when both come from the same trades.
profit_factornumber · nullableGross R of the winning trades divided by gross R of the losing trades; above 1 means the wins outweigh the losses. Null when the record has no losses.
avg_hold_barsnumber · nullableMean number of daily bars (sessions) from entry to exit over resolved trades, one decimal.
backtest_rangearray of date · nullableThe window the trades were taken from, as [first date, last date] in ISO format, at most the last 20 years. Null when the record carries no dates.
measuredstringThe measurement rule in one paragraph: how entries, stops, targets and exits are counted. Identical on every block.
summarystringOne sentence with the sample size, the window, the win rate, the average win, the average loss and the median win. Quote it whole rather than picking numbers out of it.

Example

Track record
{
  "scope": "family",
  "family": "falling_wedge",
  "symbol": null,
  "win_rate_pct": 54,
  "sample_size": 1287,
  "wins": 695,
  "losses": 592,
  "avg_win_pct": 8.1,
  "avg_loss_pct": -4.2,
  "median_win_pct": 6.3,
  "avg_trade_pct": 2.4,
  "avg_r": 0.41,
  "expected_r": 0.41,
  "profit_factor": 1.61,
  "avg_hold_bars": 11.2,
  "backtest_range": [
    "2006-09-25",
    "2026-09-25"
  ],
  "measured": "Every detector-confirmed breakout … open trades are excluded.",
  "summary": "Falling wedge: 1,287 resolved trades from 2006-09-25 to 2026-09-25; 54% reached the target, average win +8.1%, average loss -4.2%, median win +6.3%."
}

Where it appears