@qtsurfer/api-client
    Preparing search index...

    Type Alias SweepRunRow

    type SweepRunRow = {
        aborted: boolean;
        belowTradeFloor: boolean;
        cagr: number;
        deflatedSharpe?: number;
        equityCurve?: EquityCurveResult;
        maxDdPct: number;
        neighbourCount?: number;
        params: { [key: string]: unknown };
        plateauScore?: number;
        pnl: number;
        pnlPct: number;
        rank?: number;
        runIx: number;
        runtimeMs: number;
        sharpe: number;
        sortino: number;
        trades: number;
        winRate: number;
    }
    Index
    aborted: boolean
    belowTradeFloor: boolean
    cagr: number

    Same units as cagr on the single-run result — a ratio, not a percent.

    deflatedSharpe?: number

    Probability that this run's Sharpe reflects real edge rather than the best draw from however many parameter vectors were tried. Above ~0.95 the result survives the multiple-testing correction; near 0.5 or below it is indistinguishable from the best of a pile of coin flips. Absent on aborted runs, on sweeps with too few trials to establish any dispersion to deflate against, on runs with fewer than 3 period returns, and on a degenerate (near-constant) return series — all cases where the underlying statistic isn't meaningfully computable, rather than genuinely zero. A present value is the computed probability, however small.

    equityCurve?: EquityCurveResult

    Present whenever this trial actually has a curve — which is any completed run of a sweep that requested curves at all (equityCurve.mode topN/topPct), not only the ranked winners. Absent, not null, when there is genuinely nothing: the run aborted, it made no trades, or the sweep never retained curves (mode auto/none). Selection decides how the curve travels, not whether it exists. A row may carry url alone, or url together with the points inline. Read points/equities to tell whether the curve is inline — never the presence of this object, and never the absence of url. Both mislead, and in opposite directions: this object is present on rows that carry only a pointer, and url stays present alongside an inline curve so a caller can still re-request a different transform. An inline curve is emitted on the materialisation view (?order=natural), where each row is read once; the ranked view keeps the pointer, being polled. When only a pointer is present, GET the url for the curve. Its own meta there is the real, possibly size-guarded outcome. This outer meta may be a declaration rather than a measurement — for a row whose curve was not promoted, the point count is derived from the trade count (one equity point per closed trade) instead of being read from the store, to keep a polled response from doing per-row work.

    maxDdPct: number

    Same units as maxDrawdownPercent on the single-run result — percent (0-100 scale).

    neighbourCount?: number

    How many neighbouring parameter points backed the plateauScore. Zero means the point had no neighbours in the grid, so its score is unevidenced rather than confirmed — the value alone cannot be distinguished from a genuinely robust one.

    params: { [key: string]: unknown }
    plateauScore?: number

    The objective of the worst run in this point's immediate neighbourhood — how well the region around it holds up, not how well it scored itself. Present only in the ranked view when plateau ranking applied. Always read together with neighbourCount.

    pnl: number

    Absolute net PnL in the output currency.

    pnlPct: number

    Same units as pnlTotalPercent on the single-run result — percent (0-100 scale).

    rank?: number

    Present only in the ranked view.

    runIx: number

    Deterministic zero-based expansion index, stable across shards and ranking.

    runtimeMs: number
    sharpe: number
    sortino: number
    trades: number
    winRate: number

    Same units as winRate on the single-run result — a fraction, 0.0-1.0 (a rate, not a percent).