From 33c24b14b27c39bbe71d1ad7e8f334e1defbff64 Mon Sep 17 00:00:00 2001 From: Adriano Dal Pastro Date: Sun, 23 Aug 2026 01:22:54 +0000 Subject: [PATCH] =?UTF-8?q?registro=20=C2=A745:=20SPOT-NETTING=20=E2=80=94?= =?UTF-8?q?=20il=20lead=20regge=20ma=20vale=20solo=20il=20funding;=20T1=20?= =?UTF-8?q?sbloccato=20e'=20un=20declassamento=20e=20il=20netting=20perso?= =?UTF-8?q?=20risparmia=20commissioni?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/research/RESULTS-0822.md | 115 +++++++++++++++++++++++++++++++++- 1 file changed, 114 insertions(+), 1 deletion(-) diff --git a/docs/research/RESULTS-0822.md b/docs/research/RESULTS-0822.md index 4b56535..3a0b168 100644 --- a/docs/research/RESULTS-0822.md +++ b/docs/research/RESULTS-0822.md @@ -710,7 +710,7 @@ stessi hanno nominato senza poterli eseguire**. Stesso contratto di consegna, st | 42 | TP01-LS | la gamba short del trend a 1d paga il proprio costo, o e' il 2022? | **SCARTATO** — toglie **−1,91%/anno di drift in 0/24 ancore**, fallisce l'iso-vol, +8,80pp di maxDD in 24/24, e **senza il 2022 il divario RADDOPPIA** | | 43 | DATA-UNUSED | quali dati il progetto possiede e nessuna strategia legge — e uno di essi sostiene un'ipotesi? | **SCARTATO** — **la scorta di dati e' esaurita**: un solo dato mai letto ha storia vera (flussi exchange CoinMetrics 2018-2026) e misurato sta **SOTTO il massimo atteso dal puro rumore** | | 44 | DEPOSIT-TIMING | un calendario di versamento CONDIZIONALE batte il piatto, a pari soldi? | **SCARTATO 0/12 in ogni lente** — il buy-the-dip compra davvero il **51% piu' in basso** e arriva al capitale-rendita nel **6,3%** dei casi contro l'**85,4%** del piatto | -| 45 | SPOT-NETTING | separare TP01 e SKH01 su due strumenti: quanto vale, e il margine lo uccide? | _in corso_ | +| 45 | SPOT-NETTING | separare TP01 e SKH01 su due strumenti: quanto vale, e il margine lo uccide? | **LEAD REGGE, SEPARAZIONE SENZA VALORE** — il margine non e' il vincolo (copertura **50x**, invariante al capitale), ma **T1 sbloccato e' un DECLASSAMENTO** (−0,048 contro il path che gira) e il netting perso **risparmia** commissioni: il lead vale **il funding e basta**, [+1,55%, +1,66%]/anno; a bloccarlo e' **il codice di sizing**, non Deribit | | — | **NOTIFIER** (audit di fatto) | 🚨 **PUNTO SINGOLO DI GUASTO nella rete di sicurezza** | il `send()` di Telegram e' **un solo tentativo da 10s, senza retry, con l'esito MAI registrato** — e lo stato `alerted=True` viene scritto **prima** dell'invio: un 🚨 di `venue_watch` perso e' perso **per l'intero episodio**. Tasso di fallimento **misurato 6,9%** (2/29, IC95 [1,9%, 22,0%]) | | 22 | MAKER | l'esecuzione passiva e' una fonte di ritorno, al netto del costo di non essere eseguiti? | **SCARTATO** — il segno dipende da `<` contro `<=` | | 23 | BOCPD | un rilevatore di cambio di regime vero batte il miglior lookback COSTANTE? | **SCARTATO** — filone chiuso definitivamente | @@ -2482,3 +2482,116 @@ quell'ondata non aveva mai aperto. **VERDETTO: `NESSUN DATO INUTILIZZATO SOSTIENE OGGI UN'IPOTESI NUOVA — LA SCORTA DI DATI DEL PROGETTO E' ESAURITA, E CIO' CHE RESTA NON LETTO E' TELEMETRIA A FINESTRA CORTA, NON STORIA`** — SCARTATO. **Libro, pesi, cron, config INVARIATI.** + +--- + +## 45 — SPOT-NETTING (separare le gambe su due strumenti) + +`scripts/research/r0823_spot_netting.py`. **Sola lettura provata:** `git status` mostra solo questo +file, `git status -- src/ config/ scripts/live/ scripts/cron_*.sh tests/ data/` **vuoto**; ~17 GET +pubbliche + ~13 letture del conto via `DeribitRead` (**nessun metodo di trading esiste in quella +classe, by design**); **ordini inviati: 0**; finestre :05-:10 e :24-:30 rispettate da una guardia +nello script. + +### Q1 — il margine non uccide il lead; **il codice si'** + +**[VENUE]** `get_currencies`: BTC ed ETH hanno `in_cross_collateral_pool: true` (**11 valute su 51** +→ elenco ristretto, non un default). `get_instruments?kind=spot`: `BTC_USDC`/`ETH_USDC` hanno +**`max_leverage: 10`**, taker **0,00 bps**, min lotto 0,0001 → **[DEDOTTO]** lo spot vive dentro il +conto marginato, non in un portafoglio segregato. +**[CONTO]** equity USDC **$636,01**, nozionale lordo $327,52, **margine impegnato $6,55 = 2,000% del +nozionale** (limite superiore: contiene eventuali riserve d'ordine → l'aritmetica che segue e' +conservativa). +**[CALC] caso peggiore** (TP01 al massimo su entrambi gli asset): spot $477, USDC libero **$159**, +nozionale perp di SKH01 $159, margine richiesto $3,18 → **copertura 50,0x**. Entrambi i termini sono +proporzionali a E → **il rapporto non dipende dal capitale**. Anche con lo spot valutato **zero** +come collaterale, SKH01 resta marginato 50 volte. **L'haircut — non leggibile — non e' binding.** + +🚨 **[CODICE, verificato con `inspect.getsource`]** `src/live/shadow.py::_equity` legge **solo** +`account_summary("USDC")` e ripiega sulle valute-moneta solo se quell'equity e' ≤1; `position_usd` +matcha per `instrument_name`. → comprando $477 di spot il libro **leggerebbe $159 invece di $636 +(25%)** e non vedrebbe la gamba, che il riconciliatore **ricomprerebbe**. **Non e' un cambio di +strumento: e' un cambio del percorso di SIZING del live.** + +❌ **Ipotesi dell'agente, nata e refutata nello stesso filone.** `get_currencies` dichiara USDC +`apr` **3,40** (USDT/BTC/ETH 0,0): se accreditato, tenere il 75% in spot costerebbe fino a +**2,55%/anno = meta' del vantaggio**. **[LOG]** 6 run col conto **flat** (il piu' lungo **257 giri +orari = 10,7 giorni**): equity **invariata al centesimo** contro i +$0,59 attesi → limite superiore +su qualunque interesse **< 0,029%/anno**, e un accredito mensile e' escluso (un run attraversa il +31/07-01/08 con Δ=0,00). **L'obiezione e' morta e il lead non deve pagarla.** + +### Q2 — il valore della separazione: **nullo** + +🚨 **(i) T1 sbloccato e' un DECLASSAMENTO.** Con la macchineria originale (`r0726_skh_onbook`, 23 +offset, differenze appaiate): `onbook_tp − hourly` = **+0,051 FULL (19/23) / +0,057 HOLD** → il +pubblicato (+0,054/+0,061) e' **riprodotto**. Ma il 26/07 stesso stabili' che il live fa rilevazione +**intra-barra**, e `fastdetect − hourly` = **+0,082 in 23/23** (pubblicato +0,081). Contro il path +che il live **gia' percorre**: **`onbook_tp − fastdetect` = −0,048 FULL (6/23)**. *Sbloccare T1 +comprerebbe un path peggiore di quello che gira* — conferma indipendente della conclusione del 26/07, +raggiunta per una strada diversa. + +**(ii) Funding risparmiato** [riprodotto da §35/§39]: TP01 su perp drift 13,66% → senza carry 15,77% +(**+2,11%/anno di sleeve**, vol invariata 12,17→12,22%); a peso di libro ×0,75 → **+1,58%/anno**. + +📌 **(iii) Il costo del netting perso: §39 lo stimava "1-2%", ed e' ALTO DI UN ORDINE DI +GRANDEZZA.** Simulazione della riconciliazione **oraria** su 8 anni, percorso SKH01 **validato +contro l'harness** (trade 194/194 BTC, 213/213 ETH): + +| percorso | ordini/anno | turnover perp | turnover spot | lordo medio | +|---|---|---|---|---| +| NETTA | 289,1 | $12.412 | $0 | $84,52 | +| SEPARATA | 282,8 | $8.493 | $3.893 | $85,52 | + +**Commissioni: NETTA $4,34/anno (0,683% di equity) contro SEPARATA $2,97 — un RISPARMIO di +0,216%.** **Il netting non risparmia commissioni.** Ordini −6,3/anno, ma ⚠️ **meno ordini non e' +meglio**: il tracking peggiora del **+12%** ($1,61 → $1,81 di scarto medio dal target) — **5ª +occorrenza** della lezione *"banda in valuta assoluta"*. Margine: irrilevante (IM 0,266% di equity). +**Segni opposti — cioe' le ore in cui il netting serve davvero — 0,61% della storia.** +**[VENUE] Il costo vero e' lo SPREAD:** il perp e' un mercato a **un tick** (0,01-0,02 bps di mezzo +spread), lo spot no (1,5-3,1 bps) → sovracosto **[0,139%, 0,250%]/anno**. ⚠️ **Due istantanee a 4 +minuti danno 2,27 e 4,08 bps (+79%) e il contributo netto dell'esecuzione CAMBIA SEGNO fra le due** +→ si cita come banda **[−0,034%, +0,077%]/anno**, ampiezza = 7% del lead: **l'esecuzione non decide +questo lead**. ✅ **Controllo positivo:** ordini simulati sulla finestra live **132/anno** contro +**114/anno osservati**. ⚠️ **[LOG] In 2 mesi SKH01 non e' MAI stato short** → il campione live **non +puo'** misurare il netting, e l'agente lo dichiara invece di estrapolarlo. Fee reale sul nastro +**3,70 bps/lato**. + +**Il numero da citare:** lordo **+1,58%** → **netto oggi [+1,55%, +1,66%]** → con spot a 3,50 bps +[+1,33%, +1,44%] → **nello scenario fiscale sfavorevole +0,50%**. + +### Q3 — la sorveglianza + +**[CODICE]** `fee_watch` deriva `INSTRUMENTS` da `BOOK_INSTRUMENT` → una gamba spot **non +comparirebbe**: e' esattamente il difetto corretto il 21/08. Riga **dichiarata e non scritta**: +`SPOT_INSTRUMENT` in `src/live/book.py` + concatenazione in `fee_watch`. ⚠️ **Non basta:** +`convenzione('BTC_USDC')` ritorna **`'ignota'`** → il cross-check sui fill tornerebbe `None` +(onesto ma cieco): servirebbe una **terza famiglia 'spot'**. Se la fee tornasse a 3,50 bps il lead +perderebbe 0,216%/anno = 14% del guadagno → **sopravviverebbe**; *la ragione per sorvegliarlo non e' +che lo ucciderebbe, e' che oggi nessuno se ne accorgerebbe*. + +### Q4 — il rischio + +**Venue:** invariato (era gia' totale). **Fisco:** 7 punti di aliquota sulla gamba TP01 = **0,83%/anno += oltre meta' del guadagno** — e 🚨 **un costo nuovo mai contato: se i derivati sono `c-quater` i +comparti si SEPARANO**, quindi le minusvalenze del perp (SKH01) smetterebbero di compensare le +plusvalenze spot (TP01) **[DEDOTTO, per il commercialista]**. **Liquidazione — qui la separazione +MIGLIORA:** lo spot non si liquida, esce dal perimetro il 75% del libro ($85 → ~$21 di nozionale +liquidabile); **contropartita:** il disaster-SL oggi protegge la posizione **netta**, separando +resterebbe solo sul perp e in un blackout **TP01 resterebbe long al 75% del conto senza stop**. +**Haircut:** non leggibile e **non binding** — *unico caso in cui "non lo so" e "non conta" +coincidono, e va detto in quest'ordine*. + +### Non determinabile senza un conto reale +(i) l'haircut del collaterale (`get_collateral_info` → *Method not found*); (ii) se +`account_summary('USDC').equity` **includa** i saldi BTC/ETH (il conto ne tiene $0,19: troppo poco +per discriminare); (iii) se `get_positions` restituisca lo spot. **Tutte e tre si risolvono con un +acquisto di prova da $7,73** leggendo equity/available/positions prima e dopo — **e' un ordine, +quindi decisione dell'operatore.** + +**VERDETTO: `IL LEAD REGGE E VALE [+1,55%, +1,66%]/ANNO NETTO, MA LA SEPARAZIONE DELLE GAMBE — LA +RAGIONE PER CUI IL FILONE E' STATO APERTO — NON AGGIUNGE NULLA`**: T1 sbloccato e' un declassamento, +il netting perso risparmia commissioni invece di costarle, il margine non era il vincolo. **Il valore +e' il funding e basta**, e in cambio si prendono due costi nuovi mai contati (comparti fiscali +separati, gamba TP01 senza disaster-SL) piu' un cambio al percorso di sizing del live. +📌 **Il prossimo passo non e' un backtest: e' la domanda al commercialista e un acquisto di prova da +$7,73.** **Libro, pesi, cron, config INVARIATI.**