ab5bcace16
Risposta a "trova un sistema di protezione da fallimento exchange" SOTTO IL VINCOLO della decisione appena presa (100% Deribit fino a $20k). Se non si puo' ridurre l'ESPOSIZIONE, l'unica leva e' il TEMPO: il modello di rischio del mattino assumeva il salto a zero istantaneo, ma i fallimenti reali non lo sono (Mt.Gox mesi, FTX ~72h, e misurato qui: Bitfinex 2018-19 dislocato per 2.324 ore consecutive). SEGNALE: un venue che gata i prelievi rompe l'ARBITRAGGIO -> il prezzo si stacca dal consenso e ci resta. E' |scarto|, non il segno (Mt.Gox a premio, un venue in fuga a sconto: stessa cosa). Consenso = venue USD indipendenti (Coinbase, Bitstamp), mai USDT. Deribit sta a 3 bps dal consenso in mediana su 8 anni (65.043 ore BTC + 64.541 ETH). TARATURA CONGELATA: 100 bps persistenti 4h a segno costante. Criterio DICHIARATO PRIMA, perche' i due ovvi sbagliano in versi opposti (provati entrambi): "minimi bps" -> 25/24h consuma 24 delle ~72h di FTX; "minime ore" -> 500/2h MANCA FTX (margine 0.6x). Regola: zero falsi allarmi in 8 anni + margine >=3x sul caso storico piu' debole -> soglia <=100bps -> poi minima latenza. Margine 3x FTX / 5x Quadriga / 10-20x Mt.Gox, zero falsi allarmi con crash COVID, maggio 2021, LUNA e novembre 2022 inclusi. CONTROLLO POSITIVO SUPERATO (un rilevatore tarato per non segnalare e' indistinguibile da uno rotto): puntato su Bitfinex 2018-19 scatta 22 volte, episodio piu' lungo 2.324h a +447bps. 22 dove il problema c'era, 0 su Deribit. E la durata risponde alla domanda vera: un venue gated resta dislocato per settimane, quindi 4h di latenza sono trascurabili. ECONOMIA: falso allarme = 0.248% atteso (flat 3g misurato sul book reale a ogni data d'inizio); vero positivo = 100% salvato. Break-even p > (falsi/anno) x 0.00248: a 1 ogni 8 anni serve p > 0.031%. Il valore sta nella SPECIFICITA', non nella sensibilita'. CABLATO: src/live/venue_watch.py (nucleo puro) + scripts/live/venue_watch.py, in cron_book.sh PRIMA di book_execute (se Deribit e' in stress l'allarme deve partire anche quando l'esecuzione fallisce per la stessa ragione). Tre stati OK/ALERT/BLIND — "non vedo" non e' "va bene". ALLERTA, NON BLOCCA: l'azione e' prelevare (manuale; una chiave con permesso di prelievo sarebbe essa stessa un rischio) e bloccare non protegge un saldo che e' a rischio anche stando flat. Runbook pre-deciso nel docstring. NON COPRE, e non e' un argomento per riaprire il 26/07: un fallimento SENZA finestra (furto chiavi, sequestro, exit-scam) non lo prende nessun tripwire. ERRORI CATTURATI IN SESSIONE: - break-even calcolato sul p5 invece che sulla media (8.3x piu' severo, conclusione ribaltata); - ipotesi meccanica sbagliata: credevo che i crash dislocassero a segno ALTERNATO. Falso, sono a segno costante anche loro (perp sotto spot per ore in cascata). A separare sono ampiezza e durata, non il segno; - la prima corsa tronco' il campione da 8 anni a 29 GIORNI per un inner-join con Kraken (che serve solo ~700 candele) e la copertura era gia' stampata a video: una diagnostica stampata NON e' un controllo. Ora c'e' una guardia che ferma lo script. 2a occorrenza in un giorno dopo GTAA01; - il controllo positivo era finito dentro il ramo `else` -> non girava mai, cioe' esattamente il difetto che doveva prevenire. Book, pesi, config INVARIATI. 359 test verdi (+23). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
84 lines
1.9 KiB
Plaintext
84 lines
1.9 KiB
Plaintext
__pycache__/
|
|
*.py[cod]
|
|
*.egg-info/
|
|
dist/
|
|
build/
|
|
.venv/
|
|
.env
|
|
!.env.example
|
|
.env.ibgw
|
|
!.env.ibgw.example
|
|
.vscode/
|
|
.idea/
|
|
.DS_Store
|
|
data/raw/
|
|
data/processed/
|
|
*.log
|
|
*.pkl
|
|
*.pt
|
|
*.pth
|
|
notebooks/.ipynb_checkpoints/
|
|
data/paper_trades/
|
|
data/portfolio_paper/
|
|
data/portfolio_paper_stats/
|
|
data/portfolios/
|
|
# watermark fondi del reconciler (stato runtime, contiene il balance)
|
|
data/funds_watch.json
|
|
|
|
# stato locale di tooling (non condiviso)
|
|
.claude/
|
|
.omc/
|
|
|
|
# dati regime (DVOL/funding/feature cache, rigenerabili)
|
|
data/regime/
|
|
data/venue_watch/
|
|
_disp_scratch/
|
|
data/regime/dispersion_features.parquet
|
|
|
|
# storico catena opzioni importato da cerbero-bite (rigenerabile: options_fetcher.py)
|
|
data/options/
|
|
data/_reset_backup/
|
|
|
|
# game artifacts (log/json di scripts/games e gate)
|
|
data/games/
|
|
.env.mainnet
|
|
|
|
# archived data (mirrors top-level data/ ignores, which are top-level-anchored)
|
|
Old/data/
|
|
Old/**/__pycache__/
|
|
# run logs (rigenerabili dagli script)
|
|
logs/
|
|
|
|
# cache di ricerca rigenerabile (serie d'ancora, tabelle di segnale intra-bin SKH01):
|
|
# 22MB, ~2.4h a ricostruirla, ma e' DERIVATA dai parquet certificati -> non si versiona.
|
|
data/_cache/
|
|
|
|
# cache della ricerca trackE (rigenerabile)
|
|
.cache_trackE_*.npy
|
|
|
|
# feed backup pre-rebuild (binari rigenerabili, NON in git) + stato paper trader (runtime)
|
|
data/_feed_backup/
|
|
data/paper_trend/
|
|
data/paper_portfolio/
|
|
|
|
# output grezzo dello sweep di ricerca xsec (rigenerabile dagli script in runs/)
|
|
scripts/research/xsec/runs/out/
|
|
|
|
# blind-signal derived data (regenerable via make_blind.py)
|
|
data/blind/
|
|
scripts/research/blind/leaderboard.json
|
|
|
|
# forward-monitor runtime state (regenerable, forward-only)
|
|
data/paper_prevday/
|
|
data/paper_combo/
|
|
data/paper_statarb/
|
|
data/paper_xsr/
|
|
data/paper_dvolspread/
|
|
|
|
# log esecuzioni del book live (stato runtime, contiene fill/fee del conto reale)
|
|
data/live/
|
|
|
|
# dati esterni di ricerca (on-chain CoinMetrics community, F&G) — non certificati, non in git
|
|
data/external/
|
|
data/options_daily/
|