---
title: "Get Backtest"
method: GET
path: "/api/forced-flow/backtest"
tags: ["Forced Flow"]
---

# Get Backtest

`GET /api/forced-flow/backtest`

## Request

- Base URL: `https://api.zerogex.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.zerogex.io/api/forced-flow/backtest`
- Auth: HTTP bearer

Charm-into-Close track record: when the morning charm flow is stronger
(or weaker) than its own recent normal, does the noon->close return lean the
same way?

Scores the charm read RELATIVE to its trailing baseline rather than by raw
sign -- for an index book the raw sign is structurally almost constant ("buy"
nearly every day), so it degenerates to the naive baseline and tests nothing;
the deviation from recent normal is the part that varies. Reads the persisted
``forced_flow_profile`` + ``underlying_quotes`` history and reports the hit
rate against a naive directional baseline -- honestly, including when the
sample is thin or the edge is nil. Scores TWO forecast definitions over
identical sessions (``full`` = 0DTE-inclusive close flow; ``smooth`` =
first-order charm only) so the A/B is visible. Returns 200 with zeroed counts
(not 404) before enough sessions have accrued, so the page can show an honest
"collecting" state rather than an error.

## Query parameters

- `symbol` string
- `lookback_days` integer: Calendar days of history to score

## Response `200`

Successful Response

- BacktestResponse
  - `symbol` string, required
  - `lookback_days` integer, required
  - `full` BacktestVariant, required
    - `total_sessions` integer, required
    - `evaluated_sessions` integer, required
    - `warmup_sessions` integer
    - `hits` integer, required
    - `hit_rate` number, nullable
    - `hit_rate_ci_low` number, nullable
    - `hit_rate_ci_high` number, nullable
    - `baseline_rate` number, nullable
    - `edge` number, nullable
    - `edge_p_value` number, nullable
    - `significant` boolean
    - `signal_mean_return` number, nullable
    - `signal_t_stat` number, nullable
    - `records` BacktestRecord[], required
      - `date` string, required
      - `charm_flow` number, required
      - `charm_baseline` number, required
      - `charm_deviation` number, required
      - `return_pct` number, required
      - `predicted_dir` integer, required
      - `realized_dir` integer, required
      - `hit` boolean, required
  - `smooth` BacktestVariant, required
    - `total_sessions` integer, required
    - `evaluated_sessions` integer, required
    - `warmup_sessions` integer
    - `hits` integer, required
    - `hit_rate` number, nullable
    - `hit_rate_ci_low` number, nullable
    - `hit_rate_ci_high` number, nullable
    - `baseline_rate` number, nullable
    - `edge` number, nullable
    - `edge_p_value` number, nullable
    - `significant` boolean
    - `signal_mean_return` number, nullable
    - `signal_t_stat` number, nullable
    - `records` BacktestRecord[], required
      - `date` string, required
      - `charm_flow` number, required
      - `charm_baseline` number, required
      - `charm_deviation` number, required
      - `return_pct` number, required
      - `predicted_dir` integer, required
      - `realized_dir` integer, required
      - `hit` boolean, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/zerogex/apis/zerogex-api.md) · [All operations](https://skmtc.dev/zerogex/apis/zerogex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zerogex/apis/zerogex-api/revisions/753b26bf0592?raw)
