One strategy · two honest numbers

Your backtest is
probably lying
to you.

A moving-average strategy scored 0.95 on Bitcoin. The same spec, run across ten coins, scored −1.38. Only the first number tends to get published.

quant-research is an MCP server that keeps your trial count itself. You cannot pass it in, so a deflated Sharpe cannot be quietly computed against a smaller number than the one you actually ran.

39 tools · streamable HTTP · statistics AGPL-3.0

claude mcp add --transport http quant-research \
  https://quant-mcp.avasis.ai/mcp \
  --header "Authorization: Bearer $QUANT_KEY"

Then ask it to call server_status.

{
  "mcpServers": {
    "quant-research": {
      "type": "http",
      "url": "https://quant-mcp.avasis.ai/mcp",
      "headers": { "Authorization": "Bearer YOUR_KEY" }
    }
  }
}

Add to claude_desktop_config.json and restart.

{
  "mcpServers": {
    "quant-research": {
      "url": "https://quant-mcp.avasis.ai/mcp",
      "headers": { "Authorization": "Bearer YOUR_KEY" }
    }
  }
}

Save as .cursor/mcp.json in your project.

curl -sS https://quant-mcp.avasis.ai/mcp \
  -H "Authorization: Bearer $QUANT_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Streamable HTTP. Stateless, so a redeploy will not drop you.

Recorded run 3e2ab9ed · family btc-ma

What it caught

This is the server's own research, not a demo. A moving-average family that looked publishable on Bitcoin and did not survive contact with nine more coins.

Sharpe on BTC alone, in-sample0.9497
Pooled across 10 assets, one trial−1.376
Recorded training runs it was the best of28
Assets with a positive Sharpe3 of 10
Best performerAERO-USD 1.19
Spearman(Sharpe, trade count)−0.61
The assets that traded less scored better. The ranking tracked turnover and its cost, not signal. Widening the sweep cannot fix that — it would only find the configuration closest to not trading at all.
Sharpe ratiobtc-ma
ZERO BTC-USD ALONE · IN-SAMPLE · BEST OF 28 0.95 SAME SPEC · 10 ASSETS · ONE TRIAL -1.376 BEST ASSET 1.19 -2-1+0+1 3 of 10 assets positive
positive negative every figure recomputable from stored metrics.per_asset
The mechanism

The number you don't control

Every correction for multiple testing depends on N — how many strategies you actually tried. Report it yourself and the correction is decorative.

An append-only ledger

Every evaluated configuration is recorded by the server and counted. Database triggers refuse deletes and updates, so a trial cannot be quietly uncounted after it disappoints.

experiment_ledger

A one-shot holdout

Held-out data is unreadable until a strategy is frozen, and readable exactly once. The grant is unique on (owner, strategy) and checked against the ledger, not merely held in memory.

holdout_evaluate

Forks inherit their history

A sibling fork was fitted on the same data over the same hypothesis space, so its trials count toward yours. Starting a new family does not reset the bar.

family_fork
39 tools

What it measures

Every test below is in quant-integrity, AGPL-3.0, on PyPI. Read it, audit it, run it without us. The hosted server adds the one thing a library cannot: a trial count you do not control.

Deflated Sharpe

Bailey and López de Prado's correction, applied against the ledger's trial count rather than one you supply.

stats_deflated_sharpe

PBO / CSCV

How often the in-sample winner lands below the out-of-sample median. Above 0.5 your selection is anti-predictive.

stats_pbo

Purged CV

Combinatorial splits with purging on both edges and an embargo, so a label's horizon cannot leak across the boundary.

backtest_cross_section

Minimum backtest length

How much history N trials actually require, in years. Frequently the tool that ends a line of research early.

stats_min_backtest_length

Effective breadth

22 liquid Coinbase pairs measure 3 independent tests by participation ratio, 7 by entropy. Not 22.

stats_effective_tests

Stationary bootstrap

Intervals, White's reality check and Hansen's SPA. On a marginal strategy the interval straddles zero — that is the tool working.

stats_bootstrap_ci

Costs are priced against the venue's live fee tier, not a guess: at the Coinbase entry tier — 60 bps taker per side, non-promotional — twenty trades a day is an 8,760% annual drag. Most ideas die there, before any statistic is needed.

39
tools over streamable HTTP
3.0
independent tests in 22 Coinbase pairs, by participation ratio
8,760%
annual cost drag at 20 trades/day, entry tier
1
holdout evaluation per strategy, ever
Open source

The statistics are auditable

You should not have to trust a vendor's arithmetic about whether your strategy works. Every test is readable, installable and runnable without this server.

pip install quant-integrity Source on GitHub PyPI
Pricing

Priced by the trial

A trial is the scarce thing here: every one permanently raises the bar your own results must clear. Metering it puts the price on the same side as the discipline. Compute is not the constraint being sold — overfitting is.

Free
$0

Enough to take one honest idea through the whole gauntlet.

  • Trials / month200
  • Max sweep points100
  • Universe size10
  • Holdouts / month1
Start free
Pro
$49/ month

Serious single-researcher use.

  • Trials / month5,000
  • Max sweep points1,000
  • Universe size50
  • Holdouts / month10
Start Pro
Team
$399/ month

Multiple researchers, shared data, audit export.

  • Trials / month50,000
  • Max sweep points5,000
  • Universe size200
  • Holdouts / month100
Start Team
Questions

Frequently asked

Can I just tell it I ran fewer trials?

No. There is no n_trials parameter on any statistics tool. The server reads its own ledger, and the trials table is append-only — database triggers refuse DELETE and UPDATE. That constraint is the product.

Does a new family reset my trial count?

No. family_fork inherits the parent's trial history, because a sibling fork was fitted on the same data over the same hypothesis space. Forking is legitimate and sometimes correct — it just requires a written justification and it is recorded.

Why is a 22-asset cross-section only one trial?

Because one specification is one hypothesis. The assets are the sample, not the experiment. Testing the same idea on 22 assets separately costs you 22 trials and tells you less — you would then have to correct for having picked the best of 22.

What if I disagree with a number?

Recompute it. Every figure the server publishes about its own research is derivable from a recorded run's stored metrics, and the statistics library is open source under AGPL-3.0. An earlier version of the server's own instructions quoted a pooled -1.86 over 22 assets that matched no recorded run; the ledger is what caught it.

Is this investment advice?

No. The server emits no buy, sell or hold signals, no target prices and no position sizes, and it makes no claim about future returns. It tells you whether a backtest means anything.

What data does it cover?

Coinbase spot, via Advanced Trade so that prices and fees describe the same venue. 22 liquid USD pairs with full history are pre-registered as a universe; you can ingest others. Fees read the non-promotional tier.

Can my AI agent use it without me?

That is the intended shape. The agent page carries a system prompt that maps an agent to the tools and to these docs, and every page here is available as raw Markdown plus a /llms.txt index.

Find out what your
best idea is worth

Connect it to Claude, Cursor or any MCP client and put one strategy through the gauntlet. It takes an afternoon, and you keep the answer either way.

What this is not

It emits no buy, sell or hold signals, no target prices and no position sizes, and makes no claim about returns. It tells you whether a backtest means anything. That is the whole product.