diff --git a/docs/diary/2026-08-26-usde-analisi.md b/docs/diary/2026-08-26-usde-analisi.md new file mode 100644 index 0000000..df3085c --- /dev/null +++ b/docs/diary/2026-08-26-usde-analisi.md @@ -0,0 +1,52 @@ +# 2026-08-26 — USDE come collaterale a rendimento: analisi da candidato + +**Domanda dell'operatore:** *"analizziamo usde"* — dopo la chiusura della pista USDC rewards +(Italia esclusa da MiCA). **Script:** `scripts/research/r0826_usde_scenari.py` (N11). + +## Verificato SUL VENUE (API pubblica, oggi — N10) + +- `apr: 4.0` per USDE (era "fino a 9%" al lancio 03/2025: tasso = APR settimanale Ethena − 5% + di fee Deribit; comprime coi funding) · reward **giornalieri** ~12:00 UTC sul minimo di + equity USDE, voce nel Transaction Log → **falsificazione in 24-72h** +- spot `USDE_USDC` attivo: spread osservato **~3 bps**, fee spot **zero** +- **haircut cross-collateral 10%** (USDC 0%): il 90% fa margine — al nostro profilo di leva + (max realizzata 0,52x su tetto 1,0x) **non morde** +- **indice `usde_usd` multi-exchange con mediana e clamp ±0,5%** — NON il book interno: + è la differenza strutturale dal caso Binance del 10/10/2025 ($0,65 dall'oracle sul proprio + book da $8M mentre USDe quotava ~$0,99 altrove, riscatti regolari, peg tornato in 8h) +- eligibilità **per residenza, lista non pubblica** → si verifica sul CONTO, non sui documenti + (la lezione USDC di stamattina) + +## Rischi dichiarati (p non stimabile → si controlla con la QUOTA, N4) + +R1 **emittente**: basis trade (staking + short perp); fallimento = fino a −100% della quota — +si SOMMA al rischio venue accettato il 26/07, non lo sostituisce. R2 **marcatura in crash** +(P10: l'accoppiamento — il mark scende proprio quando il libro è lungo). R3 **tasso**: 9→4% +in 17 mesi; funding negativi prolungati → ~0. R4 **regolatorio EU** (Ethena GmbH liquidata +dopo BaFin; USDe non è EMT MiCA — per questo PUÒ pagare dove USDC non può). +📌 Nota a favore da misurare se si procede: il rendimento USDe sale coi **funding positivi**, +cioè quando il nostro libro long li PAGA (−2,16%/anno): sconto parziale correlato sulla tassa +di funding. + +## L'aritmetica (dallo script) + +| equity | quota 50% rende | −100% costa | note | +|---|---|---|---| +| $2.065 | $41/anno | $1.032 | conversione ripagata in ~3 giorni | +| $5.065 | $101/anno | $2.532 | scenario post-versamento | +| $20.000 | $400/anno | $10.000 | dove la posta diventa seria | + +Mark −1% = 3 mesi di resa · −3,5% = 11 mesi · **−100% = 25 anni: non si recupera mai** +→ la leva di controllo è la **quota**, non il tasso. + +## PROPOSTA (pre-registrata qui, esito da scrivere sotto) + +**Test di eligibilità sul conto**: convertire **~$500 USDC→USDE** (costo <$0,20 totale), +tenere **3 giorni**, guardare il Transaction Log alle ~12:00 UTC (reward atteso ~$0,05/g). +Regola dichiarata PRIMA di vedere l'esito: **≥1 voce reward in 3 giorni → idoneo**, e si apre +la decisione di quota (con un gate: quota massima, chi la decide, cosa la riapre); +**0 voci → non idoneo**, si riconverte e la pista si chiude come l'USDC. +L'esecuzione è dell'operatore (app: Spot → USDE/USDC) o autorizzata esplicitamente via gateway. +Il libro non c'entra: nessun codice del percorso soldi viene toccato dal test. + +*Esito del test: (da scrivere quando eseguito)* diff --git a/scripts/research/r0826_usde_scenari.py b/scripts/research/r0826_usde_scenari.py new file mode 100644 index 0000000..c28328f --- /dev/null +++ b/scripts/research/r0826_usde_scenari.py @@ -0,0 +1,100 @@ +"""r0826_usde_scenari.py — USDE come collaterale su Deribit: cosa compra, cosa rischia, sui NOSTRI numeri. + +DOMANDA (operatore, 2026-08-26): *"analizziamo usde"* — dopo la chiusura della pista USDC +(Italia esclusa da MiCA: i reward USDC li paga Coinbase, che li ha cessati nell'EEA dal 12/2024). + +FATTI VERIFICATI SUL VENUE (API pubblica, 2026-08-26 — N10): + - `public/get_currencies`: USDE `apr: 4.0` (era "fino a 9%" al lancio 03/2025: il tasso e' + l'APR settimanale di Ethena meno il 5% di fee Deribit, e comprime coi funding); + - spot `USDE_USDC` attivo, spread osservato ~3 bps (0.9999/1.0002), fee spot USDE = 0; + - indice `usde_usd` ESISTE: multi-exchange, mediana con clamp ±0,5% per fonte — NON e' il + book interno (la causa del $0,65 su Binance il 10/10/2025 fu l'oracle sul PROPRIO book + da $8M; sugli altri venue USDe quoto' ~$0,99 e i riscatti funzionarono); + - haircut cross-collateral USDE: **10%** (USDC 0%) -> il 90% del valore fa margine; + - reward GIORNALIERI (~12:00 UTC) sul minimo di equity USDE della finestra, snapshot ogni + 5 min, voce nel Transaction Log -> falsificazione in 24-72h, non in un mese; + - eligibilita' PER RESIDENZA, lista non pubblica -> stessa trappola dell'USDC: si verifica + SUL CONTO, non sui documenti (lezione di stamattina). + +RISCHI DICHIARATI (non modellabili con precisione — si dichiarano, non si inventano p): + R1 emittente: USDe = dollaro sintetico (basis trade: staking + short perp). Fallimento + Ethena = perdita fino al 100% della quota. p NON stimabile — stessa classe del rischio + venue accettato il 26/07, ma SI SOMMA a quello (N4: si prezza a parte). + R2 marcatura in crash: l'indice mediano protegge dal caso-Binance, ma in un crash + sistemico il mark puo' scendere qualche punto proprio quando il libro e' lungo (P10: + conta l'accoppiamento, non la marginale). + R3 tasso: 9% -> 4% in 17 mesi; nei regimi di funding negativo prolungato -> ~0. + R4 regolatorio EU: Ethena GmbH liquidata dopo il no di BaFin; USDe non e' un EMT MiCA + (per questo puo' pagare rendimento dove USDC non puo'), ma il perimetro puo' cambiare. + NOTA a favore, da misurare se si procede: il rendimento di USDe sale coi funding positivi, + cioe' ESATTAMENTE quando il nostro libro (long) li paga (-2,16%/anno misurato): la quota + USDE farebbe da parziale sconto sulla tassa di funding, con correlazione POSITIVA. + + uv run python scripts/research/r0826_usde_scenari.py +""" +from __future__ import annotations + +APR_NETTO = 0.04 # apr dall'API oggi (gia' al netto del 5% Deribit) +SPREAD_RT = 0.0003 # ~3 bps round-trip osservati sul book (fee spot = 0) +HAIRCUT = 0.10 +CAPITALI = (2_065.0, 5_065.0, 20_000.0) +QUOTE = (0.25, 0.50, 1.00) # frazione dell'equity convertita in USDE +DEPEG = (0.01, 0.035, 0.10, 1.00) # scenari di marcatura/perdita sulla quota USDE +LEVA_CAP = 1.0 # tetto di leva lorda del libro (config) +LEVA_MAX_REALIZZATA = 0.52 + + +def main() -> None: + print("=" * 100) + print(" USDE su Deribit — aritmetica sui numeri del conto (apr 4,0% · haircut 10% · spread 3 bps)") + print("=" * 100) + + print("\n (1) COSA RENDE, per capitale e quota convertita (netto conversione, primo anno)") + print(f" {'equity':>9} {'quota USDE':>11} {'$ in USDE':>10} {'$/anno':>8} " + f"{'giorni di spread':>17} {'margine usabile':>16}") + print(" " + "-" * 78) + for cap in CAPITALI: + for q in QUOTE: + usde = cap * q + resa = usde * APR_NETTO + giorni_be = SPREAD_RT / APR_NETTO * 365 + margine = (cap - usde * HAIRCUT) / cap + print(f" ${cap:>8,.0f} {q:>10.0%} ${usde:>9,.0f} ${resa:>7,.0f} " + f"{giorni_be:>16.1f}g {margine:>15.1%}") + print(f"\n la conversione si ripaga in ~{SPREAD_RT/APR_NETTO*365:.0f} giorni di rendimento;") + print(f" il margine usabile resta sopra il necessario: leva max realizzata " + f"{LEVA_MAX_REALIZZATA:.2f}x su tetto {LEVA_CAP:.2f}x -> l'haircut 10% oggi non morde") + print(f" (morderebbe a leva > {1/(1-0):.2f}x solo con quota 100%: 0,90x usabile)") + + print("\n (2) COSA COSTA UNO SCENARIO AVVERSO sulla quota USDE (equity $5.065)") + cap = 5_065.0 + print(f" {'scenario':>26} {'quota 25%':>12} {'quota 50%':>12} {'quota 100%':>12} " + f"{'mesi di resa persi (50%)':>25}") + print(" " + "-" * 92) + nomi = {0.01: "mark -1% (stress indice)", 0.035: "mark -3,5% (crash forte)", + 0.10: "-10% (depeg parziale)", 1.00: "-100% (fallimento Ethena)"} + for d in DEPEG: + riga = [] + for q in QUOTE: + perdita = cap * q * d + riga.append(f"${perdita:>10,.0f}") + mesi = d / APR_NETTO * 12 + mesi_s = f"{mesi:,.0f} mesi" if mesi < 240 else f"{mesi/12:,.0f} ANNI" + print(f" {nomi[d]:>26} {riga[0]:>12} {riga[1]:>12} {riga[2]:>12} {mesi_s:>25}") + print("\n la riga che decide: il -100% non si recupera MAI col rendimento (25 anni di apr") + print(" al 4%); percio' la QUOTA e' l'unica leva di controllo vera (N4), non il tasso.") + + print("\n (3) VERDETTO (runtime)") + resa50 = 5_065.0 * 0.50 * APR_NETTO + print(f" a $5.065 e quota 50%: ~${resa50:,.0f}/anno — utile ma non decisivo; il valore vero") + print(f" arriva col capitale (a $20k e 50%: ${20_000*0.5*APR_NETTO:,.0f}/anno).") + print(" PRIMA di qualunque allocazione: il TEST DI ELIGIBILITA' sul conto —") + print(" convertire ~$500 USDC->USDE (costo ~$0,08 di spread), tenerli 3 giorni,") + print(" guardare il Transaction Log alle ~12:00 UTC: reward giornaliero atteso ~$0,05/g.") + print(" Regola dichiarata PRIMA: >=1 voce reward in 3 giorni -> idoneo, si apre la") + print(" decisione di quota (con gate); 0 voci -> non idoneo, si riconverte e la pista") + print(" si chiude come l'USDC. Costo totale del test: < $0,20.") + + +if __name__ == "__main__": + main()