This page documents what the catalog is, the five-stage validation process a signal must pass before it counts, a worked example of a common failure mode, and the current status of the research program. Every claim on this page is backed by something we can point to.
The catalog is 1,543alternative-data feeds — each catalogued with a researched signal idea attached — spread across 24domains — metals & mining, macro nowcasting, shipping, energy, agriculture, travel, gov & legal filings, labor, digital exhaust, and more. Every entry is a specific, sourced observation (a scraped page, a filing, a public feed) paired with a one-sentence causal mechanism and mapped to what it should move: a theme (a latent factor like “travel demand” or “physical-metals tightness”) and, through that theme, to tradeable instruments — futures, ETFs, single names, FX, rates.
“In the catalog” is a distinct claim from “validated.” A signal enters the catalog when it is researched and mapped; it is only marked validated after passing the process below. Most of the catalog has not yet been run through that process — the scoring layer is new. See “Current status” below for the counts.
No signal is promoted on the basis of a single in-sample result. Every candidate for real weight passes through the same five-stage process, in the same order, before its score counts.
No purely data-mined edge is allowed to exist. Every signal→theme and theme→asset link carries a one-sentence causal story — why this observation should move that instrument — before a single statistic is computed. This is the single biggest filter, and it runs before any of the stages below.
Every series is rebuilt using only what was actually known at each historical instant — no look-ahead, and days where a scraper was silently broken are excluded, not smoothed over. Then we compute an effective sample size (neff) that counts independent information, never raw row count: overlapping, autocorrelated windows get a Newey-West correction so a signal can’t manufacture false confidence just by sampling itself more often. A signal with fewer than 20 independent observations gets no displayed number at all — not a caveat, an absence.
The most recent 30–40% of a signal’s history is held out, untouched, until after the sign and lag were fixed on the earlier slice. In-sample correlation is diagnostic-only and never promotes a signal by itself — it has to hold up on data it never saw.
With 1,543feeds mapped into a graph, testing each one in isolation at a plain 5% threshold would call roughly 77 pure-noise edges “significant” before a single real one existed. We run Benjamini-Hochberg false-discovery-rate correction across every eligible edge together, every cycle — a stricter, batch-aware version of the same idea a flat Bonferroni correction is reaching for, just calibrated for a pile this size instead of a handful of hypotheses. A signal only earns “measured” status if it clears the corrected threshold, holds up out-of-sample, and its empirical sign still matches the mechanism from stage 1. Two out of three isn’t enough.
Even after a signal clears stages 1–4 on its own, the composite/portfolio layer gets checked separately with a Deflated Sharpe Ratio, which catches the higher-level version of the same mistake — trying many weighting configurations and quietly keeping whichever one happened to backtest best. Signals we already know are crowded or fast-decaying (see “tier” below) get a shorter shelf life before they’re re-tested, on the assumption that whatever edge they carry erodes as more people notice it.
Say a metals-domain scraper posts a physical-premium reading every 20 minutes. Rolled up naively into daily, overlapping 5-day-forward return windows, the in-sample correlation comes back enormous — a t-stat comfortably north of 15. That number should make you suspicious before it makes you excited.
Stage 2 is built to catch exactly this: 20-minute ticks resolved at a 5-day lag aren’t five independent draws, they’re the same handful of real price moves resampled hundreds of times over. Once the series is collapsed to its Newey-West-adjusted effective sample size, the t-stat collapses with it — back down to noise. The signal never reaches the out-of-sample holdout in stage 3, let alone the FDR pass in stage 4. It gets logged as refuted, not deleted, and stays visible as negative knowledge.
The default posture toward any unusually strong early read is that it is a sample-size, look-ahead, or overlapping-window artifact until stages 2–4 establish otherwise — not the reverse.
Signals whose empirical sign flips against the original mechanism across two consecutive testing cycles are marked “refuted” and retained in the record as negative knowledge, not removed. The null ledger is on /demo; one published signal was withdrawn after re-verification identified a scoring error, documented in full on /signal-live.
Every score is returned as three separate numbers — the prior-only contribution, the “promising” (in-sample-only) contribution, and the “measured” (out-of-sample-confirmed) contribution — and only the measured layer is ever trade-eligible. You can always trace a score back to which signals produced it and which tier each one is in.
Three separate labels appear on every signal in the catalog. None of them is a promise that a signal has been validated — they describe the signal’s shape, not its confirmed edge.
How many desks already watch this data. Commodity (61 signals) means funds already own it — it’s here as a baseline, not an edge. Contested (455) is real but shared by more than a handful of desks. Uncontested (1,027) is small-capacity, non-purchasable, or outside standard vendor coverage — the focus of this catalog, and where crowding decay (stage 5) matters least.
How the data gets collected, which drives how much we trust its continuity. Tier A is a clean official API or feed; tier B is a stable scraped page; tier C needs the browser/proxy tier to reach at all (headless rendering, rotation, or both) and carries the most operational fragility — not necessarily the least signal.
How likely the source is to block or rate-limit the scraper collecting it — a statement about collection risk, not about a signal’s quality. Across the catalog: 839 none, 402 low, 232 medium, 70 high. High-ban-risk sources get the most conservative cadence and the most defensive scraping posture, since losing the source loses the series.
Every series is captured point-in-time and append-only — once a value is recorded it is never edited or backfilled. robots.txt compliance is strict: when a source’s robots.txt disallows a path in use, the feed is disabled and its history retained — most recently, five energy-market scrapers on 2026-07-16. Retired feeds are not deleted; the retirement log is public. Nothing is published without verification against the source.
1,543 signal ideas are catalogued across 24 domains. 1,439 feeds run live against real sources, together accumulating NaN series of append-only, point-in-time data.
The scoring layer described above — the theme graph, the shrinkage math, the OOS+FDR gate, the Deflated Sharpe backstop — is fully specified and is what every signal will be run through. It is not yet fully wired to live data. As of today, zero signals have been promoted to “measured” status; every score on this site is prior-only (mechanism-based, unvalidated) until that changes.
Everything on this site — the catalog, the scores, the tiers, the “proven” scrapers — describes a research and data-collection process, not a track record of real money traded. Nothing here has gone live with capital. Nothing on this site is investment, financial, legal, or tax advice, and nothing should be read as a recommendation to buy, sell, or hold any instrument.
Past correlation, in-sample or out-of-sample, does not guarantee future results, and a signal clearing every stage of the process above is still a probabilistic edge, not a certainty. Conduct your own diligence.