Cerbero MCP padda il periodo pre-quotazione su HL con barre SINTETICHE (volume 0, prezzi copiati da Binance -> matchano cross-venue e non sono flat): asset listati dopo lo START (es. AXS 83%, ALGO/SAND 37%) passavano i gate flat+cross-venue ed erano certificati PULITO pur non essendo negoziabili. E' il caso v2.0.0 (edge su un book che non c'era). Fix: il VOLUME e' il rivelatore del backfill -> (1) taglio del run iniziale a volume 0 (serie nativa), (2) gate storia nativa >=365g reali (AXS scartato), (3) gate vol=0 interno, (4) cross-venue/flat ricalcolati solo sulle barre reali, (5) parquet scartati rimossi. Verificato direttamente su cerbero MCP mainnet. I 19 major di XS01 hanno 0 backfill -> strategia live invariata. Diario 2026-06-20-cerbero-backfill-fix.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.5 KiB
2026-06-20 — Correzione estrazione cerbero MCP: il backfill sintetico (vol=0) ingannava la certificazione
Contesto
Richiesta: "analizza cerbero MCP correggendo l'estrazione dati storici secondo le analisi fatte".
Le analisi del progetto avevano già fissato un principio — "storia nativa Hyperliquid solo dal 2024,
pre-2024 = backfill, volume 0" — e fetch_hyperliquid.py lo gestiva con un floor START=2024-01-01.
Il floor non basta.
Il difetto
fetch_hl chiedeva a cerbero MCP get_historical dal 2024-01-01 e certificava ogni asset con tre
gate: flat-bar (O==H==L==C), cross-venue (mediana |close − Binance| < 60 bps), recency.
Nessuno guardava il volume. Risultato: gli asset listati su HL dopo lo START passavano come
PULITO pur essendo in gran parte backfill sintetico.
Ispezione del volume sui parquet (leading run di barre a volume 0):
| asset | barre | leading vol=0 | primo trade reale | % sintetico |
|---|---|---|---|---|
| AXS | 902 | 748 | 2026-01-18 | 82.9% |
| ALGO | 902 | 338 | 2024-12-04 | 37.5% |
| SAND | 902 | 338 | 2024-12-04 | 37.5% |
| AR | 902 | 58 | 2024-02-28 | 6.4% |
| ETC | 902 | 11 | 2024-01-12 | 1.2% |
| BTC/ETH + 19 major | 902 | 0 | 2024-01-01 | 0% |
AXS era certificato PULITO (flat 0%, cross-venue 9.5 bps) pur avendo solo ~5 mesi di trading reale.
Verifica diretta su cerbero MCP (token mainnet)
Interrogato l'endpoint cerbero-mcp.tielogic.xyz/mcp/tools/get_historical (bot-tag
pythagoras-mainnet):
- BTC: 902 barre, leading vol=0 = 0, volume reale dal 2024-01-01 (V=699, 2437, 5306…). Nativo. ✓
- AXS: 902 barre, 748 leading vol=0, primo vol>0 = 2026-01-18. Le barre a volume 0 hanno
prezzi (O/H/L/C) che coincidono con Binance:
data cerbero close binance close Δ 2024-01-01 9.262 9.26 2.2 bps 2024-01-02 8.949 8.94 10.1 bps 2024-01-03 7.937 7.95 16.4 bps
Diagnosi provata: cerbero MCP riempie il periodo pre-quotazione con barre sintetiche — volume 0, prezzi copiati da un venue di riferimento (Binance). Per questo i vecchi gate venivano ingannati:
- cross-venue passa → i prezzi sono Binance (Δ 1–16 bps);
- flat passa → le barre non sono flat (hanno movimento di prezzo);
- ma volume 0 → su HL quelle candele non erano negoziabili. È esattamente il caso v2.0.0 (edge su un book che non c'era).
Correzione (scripts/analysis/fetch_hyperliquid.py)
- Il VOLUME è il rivelatore del backfill →
trim_backfill()taglia il run iniziale di barre a volume 0; si tiene solo la serie nativa. - Gate storia nativa
MIN_NATIVE_DAYS=365: dopo il taglio serve ≥ 1 anno di vita reale → scarta chi è troppo corto (AXS, 154 barre reali → fuori). - Gate vol=0 interno
INTERIOR_VOL0_MAX=5%: gap di liquidità oltre il taglio iniziale. - cross-venue/flat ricalcolati SOLO sulle barre reali (non più sui sintetici).
- I parquet degli asset scartati vengono rimossi (disco == set certificato; niente file contaminati a riposo).
Risultato
- Universo certificato: 52 → 51 (AXS scartato).
- ALGO/SAND (−338 barre), AR (−58), ETC (−11) ripuliti dal backfill → ora start reale corretto.
- I 19 major di XS01 hanno 0 backfill → invariati: la strategia live (
XS_UNIVERSEesplicito) NON è toccata. Verificato: portafoglio 3-way (TP01+XS01+VRP01) gira identico, FULL Sh 1.68 / HOLD 1.67. - Re-fetch end-to-end su cerbero reale: 51 PULITO, sweep su tutti i file → 0 backfill residuo.
Nota su una conclusione precedente
Il diario 2026-06-19-xsec-universe-expansion.md concludeva "cross-section dei 52 = negativo". Quella
finestra includeva i sintetici (AXS 83%, ALGO/SAND 37% di barre vol=0 con ritorni non eseguibili): la
magnitudine del risultato era in parte un artefatto. La conclusione qualitativa (il long-tail
diluisce XS01; i 19 major sono il sweet spot) resta valida, ma il numero netto è 51 e il test andrebbe
ri-girato sui dati puliti se si volesse riusare quell'universo.
Lezione
flat + cross-venue non bastano a certificare un feed che fa backfill copiando un altro venue: il
backfill è plausibile sui prezzi proprio perché è copiato. Il volume (=liquidità reale) è il gate
che mancava. Coerente con la regola di prim'ordine v2.0.0: certificare il dato — anche il volume,
non solo il prezzo — prima della strategia.
File: scripts/analysis/fetch_hyperliquid.py. Universo: data/raw/hl_*_1d.parquet (51, serie native).