Institutional Brief
The Data-Pipeline-Service Safety Profile
A reference for allocators and quant desks evaluating BlockQuant as a data and backtest-compute counterparty.
Complete, lossless tick-level archives are compiled live from 14 May 2026 onward — the day our Base Mainnet pipeline was commissioned. No data exists before this boundary: any archive download, range query, or backtest requesting a date earlier than 2026-05-14 will fail.
1 · Decoupled, observational by design
Our pipeline is a read-only observer. It never participates in the trading loop, never places capital, and can be killed at any moment with zero impact on data integrity. It captures every meaningful tick on the WETH/USDC 0.05% pool and writes one immutable file per UTC day. Liveness guaranteed — a heartbeat row is written at least every 10 seconds even in dead-zone markets, so there are no silent gaps.
2 · The Pessimistic Multi-Collision Rule
Our backtester refuses to flatter itself. When a single price window touches both the take-profit and the stop-loss, the intrabar path is unknowable from one bar — so the engine always books the loss. This is the academically defensible default (it is what production-grade engines like Backtrader and vectorbt use under pessimistic flags) and it structurally eliminates the look-ahead bias that inflates naïve backtests.
| Bar outcome | Resolution |
|---|---|
| Take-profit touched only | Close at TP (+gain) |
| Stop-loss touched only | Close at SL (−loss) |
| Both touched in one window | SL wins — the loss is booked |
| Neither touched | Position carries to next bar |
Combined with pessimistic intrabar fills (a buy layer only fills when low ≤ L_k ≤ open), this means a reported edge has already survived the harshest reasonable accounting.
3 · Parametric Matrix Computation
The $25 backtest tier is not a single run — it is a native matrix engine that expands your strategy across every combination of parameters in one sandboxed job and ranks the survivors. Four engine properties make the numbers it returns defensible:
| Engine property | What it guarantees |
|---|---|
| Multi-dimensional nested sweeps | Profit targets × stop losses × bid-layer counts are expanded into the full Cartesian grid and evaluated cell-by-cell — one job covers the entire parameter surface. |
| Pessimistic settlement invariant | Intraday same-bar TP/SL collisions default to the absolute loss (see §2), structurally eliminating intrabar look-ahead bias in every cell. |
| Lossless slippage modeling | Fills are priced against true, string-cast liquidity density — the un-truncated sqrtPriceX96 — never a rounded float proxy. |
| Pandas / Excel-ready reports | Results return as a flat, typed JSON leaderboard that drops straight into pd.json_normalize() or a spreadsheet — no parsing glue. |
Because every cell runs the identical pessimistic accounting, the leaderboard ranks only edges that have already survived the harshest reasonable execution assumptions. The builder below assembles a valid request payload against the live blockquant.backtest_matrix.v2 schema — adjust a control and watch the JSON regenerate in real time.
Backtest Config Generator
matrix · 1 cells / 1000 cap{ }
Use add to stack a slider value into a sweep dimension — the live cell count is the product of all three arrays, capped at 1000 by the engine. POST the payload to /api/v1/matrix/backtest with your X-Payment proof; see The Agent Manifest for the full settlement flow.
4 · Lossless integrity — strings, not floats
Uniswap V3 stores √price as a uint160 (sqrtPriceX96), routinely ~25 digits — far beyond the 2⁵³ integer ceiling of a 64-bit float. Spreadsheet exporters silently corrupt it to 3.76e24. We never do. The value is captured as a string at the source and carried un-truncated through every boundary, so you can reconstruct price algebraically to full precision. Block references are EIP-55 normalized for unambiguous, checksum-safe logs.
5 · ?format=human — clean base-10 arrays for Excel & Pandas
Bots want the lossless integer; humans want a number they can chart. Append ?format=human
to the tick-stream endpoint and we compute the clean base-10 price (USDC per ETH) on the fly from the
canonical sqrtPriceX96 — price = (sqrtPriceX96 / 2⁹⁶)² × 10¹² — and
return a flat JSON array that drops straight into a spreadsheet or a DataFrame:
| format=raw (for agents) | format=human (for desks) |
|---|---|
| "sqrtPriceX96":"3553933747709496972272671" | "usdcPricePerEth": 2012.14598959 |
pd.json_normalize(resp.json()["rows"]) yields a tidy, typed frame — no string-to-float coercion,
no scientific-notation surprises, ready for resampling and indicator work.
6 · Pricing
| Product | What you get | Price |
|---|---|---|
| Pay-Per-Day Archive | A complete, zipped calendar day of raw ticks | $5.00 |
| Pay-Per-Tick Range Query | A targeted historical block range, raw or human | $1.00 |
| Sandboxed Backtest Matrix | A full parametric sweep on our engine, your parameters | $25.00 |
All prices settle in USDC on Base Mainnet via the x402 protocol. See The Agent Manifest for machine-readable schemas and payment flow.