Files
PythagorasGoal/docs/diary/2026-06-20-cerbero-backfill-fix.md
T
Adriano Dal Pastro 9ed2ea4b13 fix(fetch_hyperliquid): taglia il backfill sintetico di cerbero MCP (vol=0) — universo 52->51
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>
2026-06-20 11:53:55 +00:00

4.5 KiB
Raw Blame History

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 (Δ 116 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)

  1. Il VOLUME è il rivelatore del backfilltrim_backfill() taglia il run iniziale di barre a volume 0; si tiene solo la serie nativa.
  2. 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).
  3. Gate vol=0 interno INTERIOR_VOL0_MAX=5%: gap di liquidità oltre il taglio iniziale.
  4. cross-venue/flat ricalcolati SOLO sulle barre reali (non più sui sintetici).
  5. 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_UNIVERSE esplicito) 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).