You have a backtest. Everyone who reads it knows two things you cannot prove: that you ran it the way you say, and that you did not try three hundred variants and show them the best one. Every correction for the second problem — deflated Sharpe, multiple-testing haircuts — needs the number of trials, , and you are the one who reports . VTR-1 makes that number structural instead: you commit the whole search before evaluation, becomes the leaf count of that commitment, the statistics are recomputed inside a zero-knowledge proof, and anyone can re-check the result in milliseconds against their own copy of the data without trusting you. Your strategy is never revealed.
| Question a reader has | Tearsheet | VTR-1 credential |
|---|---|---|
| Did you run this on the data you claim? | Take my word | Verifier re-derives the data root from its own copy R-01 |
| Were costs actually charged? | Take my word | Charged in-circuit on every transaction; floor re-checked R-02 |
| How many strategies did you try? | Take my word | Leaf count of a commitment made before evaluation R-06 |
| Is this the best of many, shown as if it were the only one? | Unanswerable | Winner forced in-circuit to be the max of the committed set |
| Are you showing me only what passed? | Usually yes | Every computed statistic reported, pass or fail R-07 |
| Can I see the strategy? | No — so I discount everything | No — and you don't need to |
The last row is the commercial point. Disclosure and verification have always been a trade: to be believed you had to reveal, and revealing destroyed the thing worth believing in. A proof separates them.
It applies if your strategy's decisions can be reconstructed from a committable price series, and your result does not depend on fills the data cannot justify. Concretely:
The standard uses a few terms that are not standard quant vocabulary. They are not jargon for its own sake — each names something that has to be checkable.
| Term | What it means to you |
|---|---|
| credential | The proof object. Carries the metrics, the verdict, and the commitments — not the strategy. PASS and FAIL are both valid credentials. |
| era | A specific compiled version of the judging program, identified by its image hash. Your credential names the era that judged it and verifies against that era permanently, so nobody can change what your past result meant by shipping new code. |
| gate policy | The thresholds your metrics are tested against. Pinned by the era and published — you cannot choose your own bar per credential R-37. The standard deliberately does not prescribe the values; those are a risk posture, not a property of verifiability. |
| trial ledger | The commitment to your search. is its leaf count. This is the whole idea. |
| committed data | A price series bound to a Merkle root. The verifier rebuilds the root from data it obtained and rejects on mismatch. |
| sealed / committed representation | You execute the strategy; only the position stream is committed. Any logic is expressible this way. |
| Symbol | Meaning |
|---|---|
| ri, n | Per-period returns of the winning strategy, and their count |
| ŜR | Per-period Sharpe — never annualised inside a test |
| γ₃, γ₄ | Skewness and raw fourth-moment ratio (3 for a normal, not excess) |
| N | Trial count = leaf count of the committed ledger |
| σSR | Population sd of per-period Sharpe across the resolved trials R-38 |
| SR₀ | Expected maximum Sharpe of N trials — the bar selection alone would clear |
| ρ, neff | Lag-1 autocorrelation; effective sample size after the AR(1) correction |
| Φ, Φ⁻¹ | Standard normal CDF and its inverse |
This is Appendix D of the standard, set as display math with the reasoning attached. The equations are identical; only the typography and the commentary differ.
Three conventions decide whether your implementation matches anyone else's. Population denominators, not . Raw kurtosis, not excess. Per-period Sharpe, not annualised. Get any of the three wrong and every downstream number differs while every individual step looks defensible — which is exactly why the standard pins them rather than citing a paper and hoping.
where the denominator — the sampling error of a Sharpe estimated from non-normal returns — is
The probability that the true Sharpe exceeds a benchmark, given the sample's length and its non-normality. Negative skew and fat tails widen , which is the correct direction: a return stream that occasionally detonates deserves less confidence than a Gaussian one with the same mean and variance. The radicand is floored at the smallest positive representable value so a pathological moment combination degrades the statistic rather than dividing by zero.
The Sharpe you would expect from the best of worthless strategies. is Euler–Mascheroni, 0.5772…, from the expected maximum of draws. Note what multiplies the bracket: , the dispersion across your trials. That is the term an adversary attacks — see 6.7.
Overlapping or serially correlated returns carry less information than their count suggests. The correction is deliberately one-sided: positive autocorrelation shrinks the sample and makes the test harder, while negative autocorrelation is floored at zero rather than allowed to inflate . So never exceeds , and the correction can never flatter you. Floored at 2 to keep the PSR defined.
DSR is one number: the probability your edge is real given how hard you looked. MinBTL answers the inverse question — how much history you would need before a Sharpe like yours means anything at trials. It is rounded up and floored at 2: rounded against the claimant, like every other tie-break in the standard.
Split the sample into contiguous equal sub-periods. For every balanced partition — all of them, each partition and its complement both counted — rank the trials in-sample, take the in-sample best, and record whether its out-of-sample rank falls below the median. PBO is that fraction. At that is 12,870 partitions. No distributional assumption anywhere.
Three things are normative and all three are about removing your discretion: the split is canonical, not prover-chosen; every trial's per-sub-period Sharpe is re-derived from its committed spec, never declared; and the procedure fails closed at PBO = 1.0 on any degeneracy rather than erroring in a way a reader might skim past.
Everything above runs in fixed-point integer arithmetic at scale , no floating point anywhere in the evaluated path, division truncating toward zero. Two reasons. Inside a zero-knowledge circuit floats are ruinously expensive. And more importantly, verification equality is exact — no tolerance, deliberately.
These are the actual published outputs of conformance vector 1.1 — the DSR credential in the kit. Run it yourself and you will get these digits.
./verifiers/mizan-verifier-v10-macos-arm64 vectors/mizan_dsr.bundle \
data/btc_4h.csv --dsr --aux vectors/mizan_dsr_parts.json
| Quantity | Value |
|---|---|
| Trials committed, | 10 |
| Observed Sharpe, (per-period) | 0.031 |
| Deflation benchmark, | 0.027 |
| Deflated Sharpe | 0.6779 |
| Significance bar | 0.95 |
| Verdict | NOT significant |
Read what those numbers are saying. The strategy's per-period Sharpe is 0.031. The bar that the best of ten random strategies would be expected to clear is 0.027. The entire edge is the gap between them — 0.004 — and once that gap is divided by the sampling error of a Sharpe estimated over serially-correlated observations, the confidence that the true Sharpe beats the selection benchmark is 68%. The bar is 95%. So it fails.
The conformance vectors are the point of contact between your implementation and this standard. Five must verify, three must be rejected, and one is a published honest failure. The negative ones carry the most weight — a mutated copy of the committed data must be rejected, a sealed credential missing its aggregate must fail closed rather than degrade to a partial pass, and a credential shown to the wrong era's engine must fail on the image identifier.
A vector that passes when it should fail is a soundness bug. One that fails when it should pass is a completeness bug. The first kind is the one that matters.
Stated plainly, because a verification standard that oversells itself is worth nothing:
VTR-1 v1.0 is frozen, which means corrections are published as errata with attribution rather than applied silently to the text — including corrections that do not flatter the standard. If you implement it and find that something is ambiguous, unreproducible, or wrong, that is the most useful thing anyone can currently send us: a specification with one implementation is a description of that implementation, and it stops being that on the day someone else's code reproduces the vectors.
Errata and soundness reports: [email protected]. Named or anonymous, your choice; published either way.
VTR-1 for Quants — a non-normative companion to VTR-1: The Verifiable Track Record Standard, Version 1.0 · Mizan Verification, Inc. · CC BY 4.0. Where this document and the standard differ, the standard governs.