Backtesting & data integrity · Python

Backtests you can actually trust.

Tickbloom scores your market data before your strategy ever sees it — gaps, duplicates, look-ahead leakage, survivorship bias — and writes the audit trail your prop firm will ask for.

Time to confidence
Days, not months
Data providers
Databento + CSV
Runs
Client-side only
The cost of dirty data

~3 weeks

Typical time a solo quant spends rebuilding ETL and cleanup for each new data provider.

The silent killer

1 line

A single shifted index is enough to turn a losing strategy into a beautiful, fictional equity curve.

The gate

0 evidence

What most traders can produce when a prop firm asks why a specific fill looked like an outlier.

What's in the box

Five layers that replace months of hand-cleaned CSVs.

Tickbloom doesn't try to replace QuantConnect or Lean. It does one thing: make sure the data feeding your strategy is clean, documented, and auditable end to end. The layers run in order — each only makes sense once the one before it has passed.

01

Provider connectors with one normalized schema

Databento and CSV today; Polygon.io and IQFeed next. Pull by symbol, date range, and venue without re-learning an API — everything normalises to one schema, and source, symbol, and period attach to every batch so the manifest records provenance without you passing it twice. Exchange calendars are computed from rules for NYSE, Nasdaq, Arca and CME: holidays, observed-day shifts, Good Friday, and half sessions, with no bundled table to go stale. Unadjusted splits and contract rolls are detected from the price series itself — a split lands on an exact ratio, which no real market move imitates.

tickbloom.load("ES.c.0", "2024-Q3") # venue="GLBX"
Connect
02

Automated integrity checks with a numeric verdict

Gaps, duplicates, zero-volume prints, out-of-order timestamps, session-border drift, unadjusted splits and contract rolls are validated against configurable thresholds. The Integrity Score turns "is this data clean?" into a number you can put in a document and defend.

tickbloom.audit(data).score # 98.4
Validate
03

Look-ahead and survivorship bias detection

A static AST scanner flags future-looking patterns from the syntax alone — a negative shift, a centred window, a full-series aggregate. Then truncation testing proves it: recompute your features with the future deleted, and any value that changes was reading ahead. Survivorship is caught the same way, from the data itself: if every symbol in a ten-year universe survives to the final date, it was filtered on membership today. Neither method is sufficient alone; all of them ship.

tickbloom.verify_causal(df, build_features)
Audit
04

Review-ready trade documentation

An AutoAudit bundle: order log, fill breakdown, slippage attributed against a stated reference, equity curve with drawdown, and an outlier register that shows which fills still lack a written reason. Self-contained HTML, paginated PDF, JSON, and raw CSV — no external assets, so it opens from an email attachment on a locked-down laptop, and the same input always produces the same bytes. When someone asks why a trade was an outlier, you send the file instead of writing an apology.

tickbloom.audit(df, trades="orders.csv")
Document
05

An agent that proposes fixes — and proves them

Reads your findings and returns a unified diff, then re-verifies causality with the patch applied and reports the result — including when the fix makes your numbers worse, because that means the original was fabricated. Deterministic rather than model-generated: a leak has one exact repair, and sampling it would put non-determinism inside a tool selling reproducible evidence. It refuses anything requiring a modelling decision, and writes nothing until you call apply().

tickbloom.agent.propose(findings) # dry-run
Regress

The workflow

Four commands from install to a signed report.

No Docker, no separate server, no DevOps. Every step returns a structured object you can hand to an auditor, an allocator, or your future self six months from now.

Step 01 — Install

Install

A standard pip install inside your existing virtualenv. Pure Python, pandas and pyarrow only.

pip install tickbloom
Step 02 — Pull

Pull

Load from one or more providers in a single call. Metadata and calendars attach automatically.

df = tb.load("ES.c.0",
  "2024-Q3")
Step 03 — Audit

Audit

Integrity checks plus bias scans in one command. Output is a structured report, not a printout.

rep = tb.audit(df)
rep.score  # 98.4
Step 04 — Document

Document

Produce the AutoAudit bundle. Every order, fill, and equity tick logged with replay support.

tb.export(rep,
  "bundle.html")

Who it's for

Built around the pain of the solo quant.

If you write strategies in Python, want data confidence before you risk capital, and would rather pay than lose another month to cleanup — this is for you.

Solo quant developer

Writes strategies from a notebook. Needs the data clean before any capital moves.

Pain → "My backtest Sharpe was 2.8. Live it was 0.4."

Small fund, 2–10 people

Budget that can't stretch to an enterprise platform, but still needs an institutional audit trail.

Pain → "The allocator asked for our data lineage doc."

Funded prop trader

Trading someone else's capital under review, with rules that require evidence for every outlier.

Pain → "I need to explain this trade by Friday."

I used to rebuild ETL from scratch for every new data provider. Now the tool documents itself, and I spend the week on the strategy instead.

Quant developer · independent trading fund

Pricing

Priced for a small shop, not an investment bank.

Monthly, cancel anytime. Every tier runs the same loader and the same integrity suite — higher tiers add surface area, reporting formats, and support, never a better version of the core checks.

Solo
$49
/ month · 1 seat

For the individual quant validating strategies before risking their own capital.

  • Databento + CSV loaders
  • Full integrity suite & Integrity Score
  • Static scanner, runtime verification & survivorship detection
  • HTML, PDF, CSV & JSON reports
  • Community support
Start free trial
Most common
Desk
$199
/ month · up to 5 seats

For funded prop traders and small desks who owe someone else an explanation.

  • Everything in Solo
  • AutoAudit trade-documentation bundle
  • Prop-firm review export formats
  • Shared notebook workspaces
  • CI integration & regression suite
  • Optional fix agent (opt-in)
  • Email support, 1 business day
Start free trial
Fund
Custom
annual · unlimited seats

For funds who need the audit trail to survive an allocator's due diligence.

  • Everything in Desk
  • Custom dataplane & private connectors
  • Priority connector requests
  • On-prem / VPC deployment
  • Data-lineage documentation pack
  • Published SLA & named engineer
Talk to us

14-day trial, no card. Data-provider subscriptions (e.g. Databento) are billed by the provider, not by us.

FAQ

What buyers check before they sign.

Didn't find your answer? Email us — a human replies, usually within a day.

Does Tickbloom replace QuantConnect or Lean?+
No, and it isn't trying to. Those are execution and research platforms. Tickbloom sits upstream of them: it validates and documents the data and the code that feeds them. Most users run Tickbloom in the same notebook or CI job that later calls their existing backtester.
Which data providers are supported?+
Databento and local CSV/Parquet at launch, normalized to one schema. Polygon.io and IQFeed are next. The connector layer is modular: you can register a custom loader in about thirty lines by implementing the Loader protocol, and a community connector is a pull request — no fork required. The integrity suite works on any source that returns the normalized frame.
Is my strategy code or my order history sent to your servers?+
No. Checks execute client-side, in your own process. We record only audit metadata for the trail: Tickbloom version, check identifiers, thresholds, verdicts, and a hash of the input. Your code, your data, and your fills never leave your machine. The on-prem Fund tier removes even the metadata call.
How does the look-ahead scanner actually work?+
Two passes. A static pass walks your code's syntax tree looking for known leakage patterns — negative shifts, rolling windows centred on the current bar, scalers fit on the full series, resampling that pulls a future close into a past bar. A runtime pass proves it by truncation: it recomputes your features with every row after time t deleted, and any value that changes demonstrably depended on the future. A mismatch is proof of a leak. A clean result means no leak was observable at the cut points tested — not that the code is provably causal — which is why both passes ship rather than one replacing the other.
How is the Integrity Score calculated?+
It's a declared deduction model, not a learned one: score = 100 - sum(penalties), where each check has a documented maximum weight and a tolerance. Rate-based checks use exponential saturation, so the first defects cost the most and no single defect maxes out a check. Every weight and tolerance is recorded in the report manifest and can be overridden in tickbloom.toml — so you can say "we used these thresholds" rather than "the vendor decided".
What exactly is in the trade-documentation bundle?+
A timestamped order log, a fill breakdown with slippage attributed against a stated reference price, the equity curve with drawdown markers, the Integrity Score of the underlying data, and a manifest recording the versions and thresholds used. It exports to HTML, PDF, CSV, and JSON. It's designed to answer "why did this trade happen and can you prove the data behind it" — it is documentation, not a certification or a guarantee of approval by any particular firm.
Is the AI agent required?+
No. It's off by default and every tier works fully without it. When enabled it operates in dry-run: it proposes a diff and a regression result, and nothing is written until you approve. If you'd rather it never see your code, leave it disabled — the audit and documentation layers are entirely deterministic.
What happens if my score is low?+
You get a findings list ordered by how much each issue is likely to distort your results, with the specific rows, timestamps, or code lines involved. A low score is not a blocker — it's an itemized description of what you'd be trusting if you traded on this data anyway.

Contact

Ready to run backtests on data you can defend?

Tickbloom is new and we're onboarding a first cohort of funds and prop traders by hand. Email us and you'll get subscription details plus a live walkthrough on your own data.

Privacy

We do not store your strategy code or your trade orders. Runs execute client-side; the system records only audit metadata — Tickbloom version, data source identifier, thresholds, and check results — to make the audit trail reproducible.