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

    Type Alias StrategyState

    What is known about a registered strategy: that it compiled, and what validating it found.

    validation: passed does not mean the strategy is correct. It means the class loaded and survived the first event of a short synthetic run — a floor, not a guarantee. When dryRunIncomplete is true it is a lower floor still, because the run did not finish.

    type StrategyState = {
        compiledAt?: string;
        detail?: string;
        dryRunIncomplete?: boolean;
        notices?: Notice[];
        noticesTruncated?: number;
        requiredSources?: ("Ticker" | "KLine" | "FundingRate")[];
        strategyId: StrategyId;
        validatedAt?: string;
        validation: "not_validated" | "pending" | "passed" | "failed";
        validationStalled?: boolean;
    }
    Index
    compiledAt?: string

    When the live compilation was produced.

    detail?: string

    Why validation failed, or why a queued check has not reported. Present on failed, and alongside validationStalled.

    dryRunIncomplete?: boolean

    The check did not finish its budget — it ran out of time, was refused because the platform was already holding too many unfinishable runs, or hit a failure attributable to the synthetic instrument rather than to your strategy. The verdict stands as far as it went; it simply reached less than a full run would.

    notices?: Notice[]

    What the run surfaced. An empty or absent list is not a clean bill of health when dryRunIncomplete is true — see that field.

    noticesTruncated?: number

    How many notices were dropped past the cap. Absent when none were.

    requiredSources?: ("Ticker" | "KLine" | "FundingRate")[]

    The market data a strategy needs, read off the compiled class rather than off anything you sent — TickerStrategy, KlineStrategy and FundingRateStrategy each declare one, and a MultiSourceStrategy declares a set.

    Absent is not "needs nothing". A strategy always needs market data, so an absent field never means an empty requirement — it means the platform could not establish the answer without constructing your strategy, which it will not do to fill in a field. That happens for a MultiSourceStrategy, for a class that overrides getMarketDataSource(), and for anything registered before this field existed; re-registering the source fills it in.

    strategyId: StrategyId
    validatedAt?: string

    When the verdict was recorded. Absent until there is one.

    validation: "not_validated" | "pending" | "passed" | "failed"
    • not_validated — registered, never checked. POST /strategy/{strategyId}/validate checks it.
    • pending — a check was asked for and has not answered yet.
    • passed — the class loaded and survived its first event.
    • failed — it did not; detail says how.
    validationStalled?: boolean

    A queued check has not reported for far longer than one takes. Nothing is disproved about the strategy — the check has not run. Stop waiting and re-request it later.