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:
@@ -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.")
|
||||
|
||||
Reference in New Issue
Block a user