Research reproducibility
Every QuantMedia research claim that can reasonably be reproduced should be. This page indexes the implementations, example data and tools that back the research — and is equally explicit about which papers are currently research only, with no runnable material behind them.
Reproducible — runnable code, example data, expected output and tests exist, and the implementation follows the methodology in the paper. Interactive tool — a working calculator with a published formula. Research only — the paper stands on its own; no code has been released yet. Nothing is labelled reproducible on the strength of an intention.
Available implementations
VPIN — order flow toxicity
| Research question | Can order-flow toxicity be estimated from a trade tape without quote data, and how sensitive is the answer to the classification method? |
|---|---|
| Paper | VPIN & Order Flow Toxicity |
| Explainer | What is VPIN? |
| Code | quantmedia-research/vpin-order-flow-toxicity/ — vpin.py, example.py |
| Implements | Equal-volume bucketing with boundary splitting; Bulk Volume Classification (Student-t) and the tick rule; rolling VPIN |
| Example data | Synthetic tape, fixed seed 20260808, with a planted one-sided episode |
| Expected output | VPIN rises ~1.94x through the planted episode; BVC and tick-rule means differ (0.44 vs 0.18) on identical data |
| Tests | 15, covering bucket construction, volume conservation, both classifiers, bounds, degenerate tapes and validation |
| Status | Reproducible |
Hierarchical Risk Parity
| Research question | Does avoiding covariance-matrix inversion produce more stable out-of-sample allocations than mean-variance on correlated universes? |
|---|---|
| Paper | Hierarchical Risk Parity |
| Explainer | HRP vs mean-variance |
| Code | quantmedia-research/hierarchical-risk-parity/ — hrp.py, compare_mvo.py |
| Implements | Correlation distance, hierarchical linkage, quasi-diagonalisation, recursive bisection; min-variance and shrinkage baselines |
| Example data | Synthetic 20-asset block-correlated panel, fixed seed 20260808 |
| Expected output | Out-of-sample volatility drift: HRP +1.3% vs MinVar +13.6%; shrinkage narrows it to +7.7% |
| Tests | 13, including weights summing to 1, no negatives, a known 80/20 two-asset result and distance-metric properties |
| Status | Reproducible |
Probabilistic Sharpe Ratio
| Research question | Given a track record's length and return shape, how confident can you be that the true Sharpe beats a benchmark? |
|---|---|
| Paper | Probabilistic Sharpe Ratio |
| Explainer | What is the Probabilistic Sharpe Ratio? |
| Tool | PSR calculator — runs in the browser, no data leaves the page |
| Verification | Worked example published with every intermediate value, so the tool can be checked against an independent implementation |
| Status | Interactive tool |
Research only
These papers have no released implementation. They are listed so the absence is explicit rather than inferred:
Running the code
Python 3.9 or later. Dependencies are numpy, pandas and scipy. No API key, no network access and no paid data subscription is required to run any of it.
Both packages ship synthetic example data generated from fixed seeds. It is not real market data and no conclusion about any real security follows from it. It exists so the implementations can be run and verified end-to-end without a tick-data subscription. Each package states this in its README, its module docstring and its console output.
Proprietary data
Separately from the research code, QuantMedia publishes two metrics computed from its own daily scan, with machine-readable history:
Not implemented, and why
Three things that would fit this site are deliberately absent:
- Live VPIN / order-flow toxicity index. Requires tick or quote data. The production pipeline collects end-of-day OHLCV only. The VPIN code above is fully runnable, but there is no honest way to compute a live reading from daily bars, so none is published.
- Slippage stress index. Same reason — it needs spread and depth data the pipeline does not collect.
- Market regime score. Not implemented: insufficient validated inputs. A composite of breadth and score dispersion would restate numbers already on the Signal Breadth page while adding a label that implies validation nobody has done.
Methodology versioning
The signal engine carries a version number, currently 2.0 (effective 2026-04-14), stamped into every scan output and history record. When production logic changes the version increments; historical records keep the version that produced them and are never retroactively rewritten. Papers describing earlier methodology are preserved as published rather than edited to match current production.