Docs / Reference

Tool reference

All 39 tools, with parameter schemas read directly from the running server.

Generated from the live server's tools/list response, so this page cannot drift from what the server actually accepts. Agents should prefer /llms-full.txt or a tools/list call over scraping this page.

data_ingestBackfill OHLCV into the catalog. Asynchronous — returns a job_id.

Backfill OHLCV into the catalog. Asynchronous — returns a job_id.

The worker handles Coinbase's 300-candle-per-request limit by chunking with backoff. For 1-minute history prefer a bulk CSV; the API is for recent top-up, not for pulling a year 300 bars at a time.

ParameterTypeNotes
symbol requiredstringe.g. BTC-USD
timeframe requiredstring1m, 5m, 15m, 1h, 6h, 1d
start requiredstringISO8601 UTC, inclusive
end requiredstringISO8601 UTC, exclusive
sourcestringDefault "coinbase"
pathstringserver-side CSV path when source is csv_upload/cdd
venuestringDefault "coinbase"
client_request_idstring
data_catalogList datasets with summary stats. Never returns bars.

List datasets with summary stats. Never returns bars.

ParameterTypeNotes
symbolstring
data_quality_reportGap accounting, OHLC structural violations and per-source lineage.

Gap accounting, OHLC structural violations and per-source lineage.

The checks are cheap and catch vendor corruption immediately: high below low, close outside the bar's range, duplicated or non-positive prices.

ParameterTypeNotes
dataset_id requiredstring
data_gap_policy_setChoose how gaps are handled in backtests on this dataset.

Choose how gaps are handled in backtests on this dataset.

There is deliberately no forward_fill. Forward-fill fabricates flat bars, suppresses realised volatility and triggers phantom signals.

'skip' used to zero the return of the interval spanning a hole. That was wrong in the direction that flatters a strategy: a position already on at the pre-gap open cannot be flattened inside the outage without lookahead, so the gap move IS earned by whatever was held, and zeroing it deleted real drawdowns from the equity curve. With opens [100, 100, 70, 71] a constant long booked 0% across the hole instead of -30%.

That interval is now priced like any other under both policies, which leaves 'skip' with no effect on P&L. Both settings still record gap_count in the quality report and mark gap bars untradable. The option is kept because splits freeze the policy in force when they were registered, so older splits must still name the value they were created with.

ParameterTypeNotes
dataset_id requiredstring
policy requiredstring
dry_runbooleanDefault false
data_resampleResample time bars onto activity, and report whether it actually helped.

Resample time bars onto activity, and report whether it actually helped.

Time bars sample on a clock the market does not follow: activity arrives in bursts, so quiet periods are oversampled and busy ones undersampled. The resulting fat tails break every normality-based Sharpe statistic — a return kurtosis of 18 makes the usual inference meaningless. Dollar and volume bars sample on activity instead.

The comparison is returned rather than assumed, because resampling does not always help and claiming it did would be its own kind of lie.

ParameterTypeNotes
dataset_id requiredstring
methodstringDefault "dollar"
target_barsintegeraim for roughly this many bars; omit for a quarter of the source
split_registerRegister train/validate/test/holdout ranges. Immutable once created.

Register train/validate/test/holdout ranges. Immutable once created.

Registering the split before you look at any result is what stops 'out-of-sample' from being redefined after the fact. The holdout range is stored but its bars are not readable through any tool except holdout_evaluate.

ParameterTypeNotes
dataset_id requiredstring
train requiredstring[][start, end) ISO8601
validate requiredstring[]
test requiredstring[]
holdout requiredstring[]
embargo_barsintegerDefault 0
labelstring
data_ingest_universeBackfill a basket of instruments and register it as a universe.

Backfill a basket of instruments and register it as a universe.

Testing one spec across many instruments is the only way to genuinely increase effective sample size. Resampling the same history to a finer grid adds autocorrelated bars, not information, and does not lower the deflated Sharpe hurdle — which is denominated in years, not observations.

ParameterTypeNotes
name requiredstringa label for the basket, e.g. 'top30-usd'
timeframe requiredstring
start requiredstring
end requiredstring
symbolsstring[]explicit basket; omit to take the most liquid USD pairs
top_nintegerDefault 30
min_volume_24h_usdnumberDefault 5000000
client_request_idstring
universe_catalogRegistered baskets and their measured breadth.

Registered baskets and their measured breadth.

Takes no parameters.

backtest_cross_sectionRun one spec across a whole universe. Adds exactly ONE trial to N.

Run one spec across a whole universe. Adds exactly ONE trial to N.

The spec is the hypothesis and the assets are the sample, so charging one trial per asset would penalise the statistically correct thing. Returns the cross-sectional Sharpe distribution plus a pooled estimate whose standard error uses M_eff — the effective number of independent tests — rather than the raw asset count.

ParameterTypeNotes
strategy_id requiredstring
split_id requiredstring
universe_id requiredstring
segmentstringDefault "train"
paramsobject
client_request_idstring
stats_effective_testsHow many independent tests a basket actually provides.

How many independent tests a basket actually provides.

Crypto co-moves. Thirty assets are not thirty confirmations, and booking them as such would replace one overfitting mechanism with another.

ParameterTypeNotes
universe_id requiredstring
segmentstringDefault "train"
split_idstring
cost_model_refreshPin the current fee tier server-side.

Pin the current fee tier server-side.

The caller cannot supply fee assumptions anywhere in this server. Whatever this returns is stamped onto every run that follows.

ParameterTypeNotes
venuestringDefault "coinbase"
cost_breakevenWhat the edge must clear before any signal is worth discussing.

What the edge must clear before any signal is worth discussing.

Call this before designing a strategy. If the required edge per trade exceeds anything plausible at your intended frequency, the frequency is wrong and no signal will fix it.

ParameterTypeNotes
trades_per_day requirednumber
executionstringDefault "taker"
cost_model_idstring
strategy_registerRegister a strategy spec. Identity is the sha256 of the canonical spec.

Register a strategy spec. Identity is the sha256 of the canonical spec.

The spec is a small declarative graph — named features with explicit lags, plus entry/exit predicates — precisely so feature_validate can analyse it for look-ahead. Arbitrary Python could not be checked.

ParameterTypeNotes
spec requiredobject
familystringDefault "default"
feature_validateStatic look-ahead analysis of the feature graph.

Static look-ahead analysis of the feature graph.

Catches the most common backtest lie before it costs a run: negative lags, forward-looking ops, and statistics fitted over the whole sample. A feature reading close[t] is fine here because execution is next-bar-open and the server enforces that.

ParameterTypeNotes
strategy_id requiredstring
strategy_freezeLock the spec, pinning a parameter vector into it. Irreversible.

Lock the spec, pinning a parameter vector into it. Irreversible.

Required before the holdout and before any paper session. Freezing forces you to commit to one configuration rather than deciding which one you meant after seeing the holdout.

ParameterTypeNotes
strategy_id requiredstring
paramsobject
dry_runbooleanDefault false
family_forkStart a new trial-counting family, recording why.

Start a new trial-counting family, recording why.

Strict accounting: a fork does not reset N. The lineage is walked when N is computed, because you did learn from the parent's trials. The justification is stored in the ledger so the reset is auditable rather than silent.

ParameterTypeNotes
new_family requiredstring
parent_family requiredstring
justification requiredstring
library_searchDocumented strategy hypotheses with an economic rationale.

Documented strategy hypotheses with an economic rationale.

The reason this exists: a parameter search has no prior, and a search without a prior finds whichever configuration traded least in a rising market. Every entry here states who is on the other side of the trade and why they lose, so a result can be judged against a hypothesis rather than a curve fit.

Citations are model-generated leads to check, NOT evidence. `citation_verified` is false until a human has actually looked the source up.

ParameterTypeNotes
categorystringtime-series momentum and trend following · mean reversion and statistical arbitrage · volatility, risk premia and regime filters · cross-sectional momentum, carry and relative value · calendar effects, flow and microstructure
max_trades_per_daynumberfilter to ideas cheap enough for the pinned fee tier
survives_costboolean
limitintegerDefault 15
library_getThe full entry: rationale, origin, failure modes, and the falsification test.

The full entry: rationale, origin, failure modes, and the falsification test.

ParameterTypeNotes
name requiredstring
library_adoptRegister a library hypothesis as a strategy in your own family.

Register a library hypothesis as a strategy in your own family.

This is the point of the library: the idea enters the ledger with a recorded provenance, so a later result can be traced to the hypothesis that motivated it rather than to a sweep that found it.

ParameterTypeNotes
name requiredstring
familystring
case_studiesDocumented strategy failures, with the mechanism and what would have caught it.

Documented strategy failures, with the mechanism and what would have caught it.

Companion to the strategy library: that gives hypotheses with a prior, this gives failure modes with a mechanism. Useful when a result looks good and you want to know which known way it might be wrong.

Sources are model-generated leads and are NOT verified.

ParameterTypeNotes
categorystringclassic_blowups | crypto_blowups | backtest_lies | data_traps | overfit_famous
searchstringmatch mechanism or strategy
limitintegerDefault 8
case_studyThe full record for one documented failure.

The full record for one documented failure.

ParameterTypeNotes
slug requiredstring
backtest_submitQueue a backtest. Adds exactly one trial to N.

Queue a backtest. Adds exactly one trial to N.

Execution is next-bar-open and enforced server-side. Costs come from the latest pinned cost model; there is no fee parameter.

ParameterTypeNotes
strategy_id requiredstring
split_id requiredstring
segmentstringDefault "train"
paramsobject
executionstringDefault "taker"
client_request_idstring
sweep_submitQueue a parameter sweep. Every point is a trial.

Queue a parameter sweep. Every point is a trial.

The updated N is returned immediately, before any result arrives, so the statistical cost of the sweep is visible while you can still cancel it. Sweeping 2,000 points to find a winner shows up as N=2000 in every deflated Sharpe you compute afterwards.

ParameterTypeNotes
strategy_id requiredstring
split_id requiredstring
param_grid requiredobject{'fast': [5,10,20], 'slow': {'start':50,'stop':200,'step':25}}
segmentstringDefault "train"
max_pointsintegerDefault 500
dry_runbooleanexpand the grid and report the cost to N without queueing anything Default false
client_request_idstring
job_statusPoll a submitted job.

Poll a submitted job.

ParameterTypeNotes
job_id requiredstring
backtest_resultFetch the metric summary for one recorded run.

Fetch the metric summary for one recorded run.

Around twenty numbers, never a trade blotter. Gross and net sit side by side so fee drag is impossible to overlook. The full return series is available as a resource at quant://runs/{run_id}/returns.

ParameterTypeNotes
run_id requiredstring
stats_deflated_sharpeDeflated Sharpe for one run, against the family's trial count.

Deflated Sharpe for one run, against the family's trial count.

N is read from the ledger. It is not an argument, and cannot be.

ParameterTypeNotes
run_id requiredstring
stats_bootstrap_ciStationary-bootstrap confidence intervals for Sharpe and expectancy.

Stationary-bootstrap confidence intervals for Sharpe and expectancy.

A point estimate from a few dozen trades is not a measurement. Expect the interval on a marginal strategy to include zero; that is the tool working. Block length respects serial dependence, so the interval does not inherit the false precision an iid bootstrap would give.

ParameterTypeNotes
run_id requiredstring
n_bootintegerDefault 2000
confidencenumberDefault 0.95
stats_pboQueue combinatorially symmetric CV to measure overfitting probability.

Queue combinatorially symmetric CV to measure overfitting probability.

Asks whether the configuration that looked best in-sample tends to land above or below the out-of-sample median. Above 0.5 means your selection procedure is anti-predictive. Uses the family's evaluated parameter vectors unless you pass a grid; the re-evaluations are recorded but deliberately excluded from N.

ParameterTypeNotes
strategy_id requiredstring
split_id requiredstring
n_groupsintegernumber of equal subsets; forced even, since CSCV splits them in half Default 8
segmentstringDefault "train"
param_gridobject
client_request_idstring
stats_reality_checkQueue White's Reality Check, Hansen's SPA and Romano–Wolf on a family.

Queue White's Reality Check, Hansen's SPA and Romano–Wolf on a family.

Tests the best member against the whole family it was selected from, using a stationary bootstrap that preserves serial dependence. Testing the winner in isolation answers a question nobody asked.

ParameterTypeNotes
family requiredstring
benchmarkstringDefault "zero"
n_bootintegerDefault 1000
client_request_idstring
stats_min_backtest_lengthMinBTL = 2·ln(N) / E[max_N]² — how much data N trials actually require.

MinBTL = 2·ln(N) / E[max_N]² — how much data N trials actually require.

Frequently the tool that ends a line of research early, which is the point.

ParameterTypeNotes
family requiredstring
experiment_ledgerThe audit trail: N, the Sharpe distribution, and the extremes.

The audit trail: N, the Sharpe distribution, and the extremes.

Read-only, and append-only underneath — N can never be revised downward.

ParameterTypeNotes
family requiredstring
limitintegerDefault 10
stats_triple_barrierLabel every candidate entry by which barrier it would have hit first.

Label every candidate entry by which barrier it would have hit first.

A strategy that trades twenty times in two years cannot be evaluated. This scores each potential entry against a profit-take, a stop and a time limit, which enlarges the evidence base without increasing trading frequency — the central tension in this system.

When both price barriers fall inside one bar the stop is taken: a bar cannot resolve which was touched first, and the adverse assumption is the only one that does not flatter the result.

ParameterTypeNotes
strategy_id requiredstring
split_id requiredstring
pt_bpsnumberprofit-take barrier Default 200.0
sl_bpsnumberstop-loss barrier Default 100.0
vertical_barsintegerDefault 48
segmentstringDefault "train"
gate_checkRun the statistical gauntlet. Passing is what unlocks the holdout.

Run the statistical gauntlet. Passing is what unlocks the holdout.

Seven checks, including the Harvey–Liu t > 3 hurdle rather than the conventional t > 2, and regime survival tested separately in bull, bear and chop rather than in aggregate.

ParameterTypeNotes
strategy_id requiredstring
split_id requiredstring
holdout_evaluateSpend the one holdout attempt for this frozen strategy.

Spend the one holdout attempt for this frozen strategy.

Requires the strategy to be frozen and gate_check to have passed against that exact spec hash, with no prior grant. Every attempt is logged whether or not it succeeds. There is no second attempt, ever.

Pass dry_run=true to check every precondition and see what would happen without spending the grant or logging an attempt. A tool this expensive should be inspectable before it is fired.

ParameterTypeNotes
strategy_id requiredstring
dry_runbooleancheck every precondition and report what WOULD happen, then refuse. Spends nothing and is not logged as an attempt Default false
execution_replay_submitQueue an event-driven revalidation with honest fill modelling.

Queue an event-driven revalidation with honest fill modelling.

Resting post-only limits fill only when the bar actually trades through the level, capped by volume participation, and are cancelled unfilled after max_wait_bars. A resting order that never fills is simulated as never filling — assuming fills at the touch is the second-most-common backtest lie after understating costs. Does not add to N: it revalidates an existing trial rather than creating a new one.

ParameterTypeNotes
strategy_id requiredstring
split_id requiredstring
segmentstringDefault "test"
post_onlybooleanDefault true
offset_bpsnumberDefault 1.0
participationnumberDefault 0.05
max_wait_barsintegerDefault 3
enginestringDefault "native_l1"
client_request_idstring
paper_sessionForward-test a frozen strategy on bars that did not exist at build time.

Forward-test a frozen strategy on bars that did not exist at build time.

The only validation that cannot be overfit. 'start' opens a session against a frozen spec, 'record' evaluates newly printed bars and logs signals, 'report' summarises forward performance after the pinned cost model.

ParameterTypeNotes
action requiredstring
strategy_idstring
session_idstring
dataset_idstring
server_statusWhat this server is, what it holds, and what has changed recently.

What this server is, what it holds, and what has changed recently.

Call this first in a new conversation. It is cheaper than rediscovering the state by trial and error, and it will tell you which research lines are already closed.

Takes no parameters.

account_statusYour plan, this month's usage, and what remains.

Your plan, this month's usage, and what remains.

The metered unit is the trial, not the API call — every trial permanently raises the bar your own results must clear, so it is the scarce thing worth pricing. A smaller sweep buys a lower deflated-Sharpe hurdle as well as a smaller bill; the constraint runs with the statistics rather than against them.

Takes no parameters.

plansWhat each plan includes.

What each plan includes.

Takes no parameters.

Read this page as Markdown: /docs/tools.md