Files
Adriano Dal Pastro 562e95338b ricerca: USDE come collaterale a rendimento — analisi da candidato + test di eligibilita' pre-registrato
Verificato sul venue: apr 4.0 (netto fee), spot USDE_USDC spread ~3bps fee zero,
haircut 10% (non morde al nostro profilo di leva), indice usde_usd multi-exchange
con mediana+clamp (la differenza strutturale dal caso Binance 10/10/2025).
Rischi dichiarati R1-R4, p non stimabile -> la leva di controllo e' la QUOTA (N4).
Aritmetica: a $5k/quota 50% ~$101/anno; -100% = 25 anni di resa, non si recupera.
Pre-registrato il test di eligibilita' (~$500, 3 giorni, regola dichiarata prima).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B9UyJLHzR7EJzxR3iQ3RN1
2026-08-26 11:44:58 +00:00

101 lines
5.8 KiB
Python

"""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()