research: il piano dichiarato EUR 5.000 + EUR 500/mese, e la strozzatura del cap

L'operatore ha dato i numeri veri: EUR 5.000 subito + EUR 500/mese. Cambia la scala
(conto da $597 a $6.047 = 10.1x), quindi ricalcolato in dedicata invece che estrapolato.

QUANDO: traguardo EUR 50/g ($272.061) a p10 9.4a / MEDIANA 11.6a / p90 14.4a;
P(entro 15a) 94%, P(entro 20a) 100%. Rendita mediana: EUR 6.37/g a 3 anni, EUR 11.57/g a
5, EUR 35.18/g a 10, EUR 87.63/g a 15.

VALIDAZIONE INCROCIATA: la variante "solo EUR 500/mese da $600" da' 12.4 anni = esattamente
il numero pubblicato il 25/07 con macchineria diversa.

IL LUMP VALE 0.8 ANNI (12.4 -> 11.6), MENO di quanto suggerisse il "fattore 6" del
calendario, e la ragione e' aritmetica: EUR 5.000 sono ~10 mesi di versamenti a EUR 500,
quindi comprano ~10 mesi. Anticipare vale in proporzione a quanto si anticipa. La mia
aspettativa era piu' alta ed e' corretta.

SOGLIE: $3k e $5k superate il giorno 1 (GTAA01 e XSR01 diventano eseguibili); $13k a ~0.9
anni (GTAA01 entra nel book deployable); $20k a ~1.6 anni = LA DECISIONE VENUE DEL 26/07
SMETTE DI ESSERE UN'IPOTESI E DIVENTA UNA DATA (~19 mesi); $117k a ~7.6 anni (XS01).
Le soglie superate subito NON autorizzano ad anticipare il gate XSR01 del 23/10.

CON IL RISCHIO DI VENUE: P(traguardo) 100% -> 88% a p=1% (P(perso tutto) 23.2%); a p=5% il
capitale mediano e' ZERO. Il piano regge fino a p=2%.

⚠️ AZIONE OPERATIVA TROVATA (non eseguita, e' config su soldi veri): `book._cap` ripiega su
max_notional_per_asset_usd=$300 quando l'equity reale non e' leggibile. A $597 il fallback
era INERTE (equity/2 = $298 ~ $300); dopo il versamento equity/2 vale ~$3.023, quindi un
fallback strozzerebbe il book al ~10% del target, in silenzio. E' l'azione gia'
pre-registrata il 2026-07-02 ("al deposito alzare il cap a equity/2"). Cablato
test_il_cap_fisso_diventa_una_strozzatura_dopo_un_deposito, che FALLISCE se si deposita
senza adeguare il cap.

Aggiunta anche la sezione (F) frontiera di sostenibilita' a r0726_deposits.py: capitale e
rendita per (importo x anni sostenuti), e il confronto "tirare poco tempo vs comodo a
lungo" — EUR 400/m per 5a batte EUR 200/m per 20a, ma EUR 600/m per 3a perde contro
EUR 250/m per 15a.

Book, pesi, cron, config INVARIATI. 380 test verdi (+3).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Adriano Dal Pastro
2026-07-26 20:34:00 +00:00
parent d1cf44f874
commit 1227b2baab
4 changed files with 382 additions and 0 deletions
+56
View File
@@ -131,3 +131,59 @@ def test_hazard_giornaliero_ricompone_alla_probabilita_annua():
for p in (0.005, 0.01, 0.02, 0.05):
haz = 1.0 - (1.0 - p) ** (1.0 / 365.0)
assert (1.0 - haz) ** 365 == pytest.approx(1.0 - p, rel=1e-9)
# ===========================================================================
# il PIANO dichiarato (€5.000 subito + €500/mese) — r0726_piano_5k500.py
# ===========================================================================
def test_il_piano_riproduce_il_numero_gia_pubblicato_senza_lump():
"""Controllo incrociato: 'solo €500/mese da $600' deve dare ~12.4 anni, che e' il numero
pubblicato il 25/07 con macchineria DIVERSA. Se diverge, una delle due tabelle mente."""
import r0725_capcurve as CC2
import r0726_capwall_refresh as WR2
import r0726_piano_5k500 as PL
r = DP.deluck_returns()
gross = CC2.TARGET_EUR_DAY * 365 * CC2.EURUSD / (1 - CC2.TAX_RATE)
_, _, wall = WR2.perp_and_wall(r, 1.0, gross)
rng = np.random.default_rng(PL.SEED)
paths = CC2._boot_paths(r, 1500, 365 * 25, PL.BLOCK, rng)
res = PL.run(paths, PL.CONTO_OGGI, 500.0 * CC2.EURUSD, wall)
fin = res["yrs"][~np.isnan(res["yrs"])]
assert 11.5 < float(np.percentile(fin, 50)) < 13.5
def test_il_versamento_iniziale_anticipa_il_traguardo():
"""Direzione: partire da piu' in alto non puo' allungare il tempo."""
import r0725_capcurve as CC2
import r0726_capwall_refresh as WR2
import r0726_piano_5k500 as PL
r = DP.deluck_returns()
gross = CC2.TARGET_EUR_DAY * 365 * CC2.EURUSD / (1 - CC2.TAX_RATE)
_, _, wall = WR2.perp_and_wall(r, 1.0, gross)
rng = np.random.default_rng(PL.SEED)
paths = CC2._boot_paths(r, 1500, 365 * 25, PL.BLOCK, rng)
dep = 500.0 * CC2.EURUSD
senza = PL.run(paths, PL.CONTO_OGGI, dep, wall)["yrs"]
con = PL.run(paths, PL.CONTO_OGGI + 5_000 * CC2.EURUSD, dep, wall)["yrs"]
m_senza = float(np.nanpercentile(senza, 50))
m_con = float(np.nanpercentile(con, 50))
assert m_con < m_senza
def test_il_cap_fisso_diventa_una_strozzatura_dopo_un_deposito():
"""⚠️ Il punto operativo trovato col piano: `_cap` ripiega su max_notional_per_asset_usd
quando l'equity reale non e' leggibile. A $600 era INERTE (equity/2 = $300 = cap fisso);
dopo un deposito da €5.000 il fallback strozzerebbe il book a ~10% del target.
Questo test FALLISCE se qualcuno deposita senza adeguare il cap fisso — che e' l'azione
gia' pre-registrata il 2026-07-02 ('al deposito alzare il cap a equity/2')."""
import json
cfg = json.loads((ROOT / "config" / "live.json").read_text())
fisso = float(cfg["max_notional_per_asset_usd"])
frac = float(cfg["max_notional_per_asset_frac"])
equity_attuale = 596.92
assert fisso >= equity_attuale * frac * 0.95, (
f"cap fisso ${fisso:.0f} molto sotto equity/2 = ${equity_attuale*frac:.0f}: se l'equity "
"reale non e' leggibile il book gira strozzato. Alzare max_notional_per_asset_usd.")