For two weeks, AlgoVault’s 3-minute timeframe sat in shadow mode: cron-seeded, fully evaluated, but stripped from the public /api/performance-public aggregate before any caller saw it. Today we flipped it into the live track record. Here’s what the data looked like before we made that call, and why the flip is overdue rather than aggressive.
The measurement
3m had accumulated 3,961 evaluated samples across our 5 venues by 2026-05-19. Weighted-aggregate PFE Win Rate: 92.43%. Per-venue breakdown was tight: Bitget 93.5%, OKX 91.9%, Bybit 92.2%, Binance 92.6%, Hyperliquid 92.2%. No outlier venue, no thin-sample skew.
| Timeframe | Samples | PFE Win Rate |
|---|---|---|
| 5m | 37,305 | 92.49% |
| 15m | 19,048 | 92.30% |
| 3m (newly public) | 3,961 | 92.43% |
| 30m | 8,715 | 89.86% |
| 1h | 13,016 | 88.36% |
| 4h | 2,424 | 86.01% |
| 2h | 7,494 | 85.51% |
| 12h | 1,307 | 84.09% |
| 8h | 1,027 | 81.01% |
| 1d | 775 | 58.45% |
3m outperforms 7 of the 9 timeframes that were already public. Only 5m and 15m beat it, and the gap is under 0.1pp.
How shadow mode worked
Every timeframe we ship gets seeded by the same cron jobs that feed the public dashboard. Shadow-mode TFs (1m + 3m, originally) are seeded identically — the only difference is a filter in the public response handler that strips them out of the byTimeframe aggregate. They remain fully visible inside byExchange.<EX>.byTimeframe for our own auditability.
The point of the shadow window is to accumulate honest sample density before claiming anything publicly. Two gates: ≥3,000 evaluated samples and ≥85% weighted PFE Win Rate. 3m cleared both gates by a clear margin — sample count +32% above the floor, PFE +7.4pp above it.
What we’d previously said about sub-5-minute signals
Our FAQ used to say sub-5-minute indicators are “noise-dominated by design.” That framing was a pre-measurement assumption baked into copy before we had data. The measured 3m result — 92.43% PFE Win Rate across nearly 4,000 evaluated samples — refutes it. We’ve dropped that framing from the FAQ, llms-full.txt, and our brand-facts canonical reference as part of this flip.
The Data Integrity rule we operate under says public copy can’t lag behind measurement. When the numbers contradict the framing, the framing changes.
What’s next
- 1m remains shadow this cycle. Sample count is 3,330, just below our preferred comfort margin. Another weekly cron cycle should push it over. Same flip mechanism when it clears.
- 3m universe expansion. 3m is currently cron-seeded against a top-5 OI-restricted universe. The next wave expands it to top-50 to match the rest of the cron set. We’re sequencing that AFTER one week of post-flip stability so attribution stays clean.
- Every signal is still Merkle-anchored on Base L2. No retroactive edits, no deletes. The 3m signals shipped over the past two weeks were already on-chain; the flip changes only what shows up in the public aggregate, not the underlying record.
Try it
The 3m timeframe is callable today via the MCP get_trade_call tool (set timeframe: "3m") or directly via /api/performance-public.byTimeframe["3m"]. Free tier: 100 calls per month, no signup.
Start at algovault.com. Verify any 3m signal against its on-chain Merkle proof at algovault.com/verify.