research(capitale): 3k o 5k -> ~3.7 mesi su 11.5 anni, non e' una decisione importante

r0727_3k_vs_5k.py. Domanda dell'operatore, poi ristretta a "fregatene del fuori": quanto
versare su Deribit dei 6.043 EUR fermi in XEON.

Tutto su Deribit, 500 EUR/mese, bersaglio 272.061$:
  3.000 EUR -> 11.73 anni    4.000 -> 11.58    5.000 -> 11.42    6.043 -> 11.28
Ogni 1.000 EUR in piu' all'inizio vale ~1.8 MESI. P(entro 20a) 100% in tutti i casi.

Il motivo strutturale: fino al traguardo entrano ~69.000 EUR di versamenti, quindi il
versamento iniziale e' il 4-9% del flusso totale. La decisione che conta e' la SOSTENIBILITA'
dei 500/mese (26/07: smettere al 5o anno porta P(muro) dal 90% al 53% = venti volte l'effetto
misurato qui).

Aggiunto anche il taglio con il venue dentro (quota fuori 46% vs 16%) e il fatto che con i
versamenti su Deribit quella quota si DILUISCE: 4.0 anni di copertura versando 3k, 0.7 anni
versando 5k -> la differenza fra i due e' temporanea, non una postura permanente.

simulate() accetta dep_to (dove vanno i versamenti); replica del 26/07 preservata.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Adriano Dal Pastro
2026-07-27 19:17:59 +00:00
parent 17b0f2cb47
commit 1aa5a0616a
2 changed files with 170 additions and 2 deletions
+12 -2
View File
@@ -80,7 +80,7 @@ IB_HAIRCUT_YR = 0.008 + 0.001
def simulate(cfg: dict, series: dict, p_annual: float | dict, lump_usd: float = 0.0,
dep_eur: float = 250.0, n_paths: int = N_PATHS, years: int = YEARS,
seed: int = SEED) -> dict:
seed: int = SEED, dep_to: str | None = None) -> dict:
"""Accumulo con capitale iniziale `START + lump_usd` e jump di venue.
Generalizza `r0726_venue_risk.simulate` sul capitale iniziale, sul deposito e sul rischio
@@ -90,6 +90,11 @@ def simulate(cfg: dict, series: dict, p_annual: float | dict, lump_usd: float =
`p_annual` puo' essere un dict {venue: p}: un conto bancario/liquidita' NON fallisce come un
exchange (tutela dei depositi fino a €100k), e attribuirgli lo stesso hazard e' una scelta
CONSERVATIVA contro lo split — che va poi misurata, non assunta.
`dep_to`: dove vanno i VERSAMENTI. None = ripartiti per peso fra i superstiti (convenzione
del 26/07, mantiene la quota costante); un nome di venue = tutti li'. La differenza non e'
cosmetica: con versamenti concentrati su un venue la quota tenuta fuori si DILUISCE nel
tempo, e la protezione iniziale ha una vita utile finita.
"""
rng = np.random.default_rng(seed)
n_days = years * 365
@@ -119,7 +124,12 @@ def simulate(cfg: dict, series: dict, p_annual: float | dict, lump_usd: float =
if jm.any():
salvage[jm] = cap[jm].sum(axis=1)
if t % 30 == 0 and t > 0 and dep > 0:
wa = alive * w0
if dep_to is None:
wa = alive * w0
else: # tutti i versamenti su un venue solo
wa = np.zeros_like(cap)
wa[:, names.index(dep_to)] = 1.0
wa = wa * alive
tot = wa.sum(axis=1, keepdims=True)
share = np.divide(wa, tot, out=np.zeros_like(wa), where=tot > 0)
cap += dep * share