merge: traiettoria di accumulo col fattore de-luck corretto (€500/m: 19.6a -> 12.4a)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -472,9 +472,22 @@ Prima ondata di ricerca onesta su BTC/ETH certificati (5 track, harness condivis
|
||||
restano refutati, come BIGLIETTO (prop) no. Rendita a $600: €0.12/g → **€0.18/g** (centesimi:
|
||||
il fattore conta per il MURO e le soglie prop, non per il conto attuale).
|
||||
Cio' che NON dipende dalla lente: **la rendita perpetua vale ~45-55% del CAGR**, quindi ogni muro
|
||||
calcolato come `target/CAGR` sbaglia di un fattore ~2. Traiettoria (bootstrap,
|
||||
de-luck): **0 depositi → 0% dei path in 20 anni**; €500/m mediana 19.6a; €1000/m mediana 14.8a
|
||||
(⚠️ calcolata a ×0.6: col fattore corretto i tempi si accorciano, non ricalcolata).
|
||||
calcolato come `target/CAGR` sbaglia di un fattore ~2.
|
||||
**TRAIETTORIA da $600, ricalcolata col fattore corretto (26/07).** Il fattore agisce **due
|
||||
volte**: alza il drift (si accumula prima) E abbassa il bersaglio (serve meno capitale), e i due
|
||||
effetti pesano quasi uguale. Mediana degli anni per toccare il capitale-rendita:
|
||||
| dep./mese | ×0.60 muro $495k (25/07) | ×0.89 muro $495k (solo drift) | ×0.89 muro $272k (26/07) |
|
||||
|---|---|---|---|
|
||||
| €0 | mai | mai | **mai** |
|
||||
| €250 | 22.4a (8% entro 20a) | 19.6a (53%) | **16.2a (91%)** |
|
||||
| €500 | 19.6a (48%) | 15.7a (94%) | **12.4a (100%)** |
|
||||
| €1000 | 14.8a (95%) | 12.0a (100%) | **9.0a (100%)** |
|
||||
| €2000 | 10.0a (100%) | 8.5a (100%) | **6.0a (100%)** |
|
||||
✅ La colonna ×0.60 **riproduce esattamente** i numeri del 25/07 (19.6a / 14.8a) = validazione
|
||||
indipendente della replica. ⚠️ **Cio' che NON cambia col fattore: senza depositi il
|
||||
capitale-rendita non si raggiunge mai** (0% dei path a 20 anni a OGNI fattore) — l'accumulo
|
||||
viene dai versamenti, non dal rendimento; e la mediana e' una MEDIANA (meta' dei path arriva
|
||||
dopo, una quota non arriva affatto).
|
||||
(3) **Diversificare NON crea reddito a pari nozionale — libera BUDGET DI RISCHIO.** Per tier:
|
||||
iso-nozionale 2 sleeve 5.98% → 4 sleeve 6.35% (nulla, il diversificatore a basso CAGR toglie vol e
|
||||
ritorno insieme); a **ISO-RISCHIO** (vol 15%) 7.51%/$395k → **9.25%/$321k (−19% di muro)**.
|
||||
|
||||
@@ -173,6 +173,32 @@ Cambia la taglia dell'errore, e cambia che il numero e' misurato invece che scel
|
||||
Rendita sul conto attuale: EUR 0.12/g (×0.6) → **EUR 0.18/g** (×0.89). A questa taglia sono
|
||||
centesimi: **il fattore conta per il MURO e per le soglie prop, non per il conto di oggi.**
|
||||
|
||||
### La traiettoria — il fattore agisce DUE volte
|
||||
|
||||
Correggere il fattore alza il drift (si accumula prima) **e** abbassa il bersaglio (serve meno
|
||||
capitale). I due effetti pesano quasi uguale, quindi vanno separati invece che sommati alla cieca:
|
||||
|
||||
```
|
||||
dep./mese ×0.60 muro $495k ×0.89 muro $495k ×0.89 muro $272k
|
||||
(25/07) (solo drift) (26/07)
|
||||
€0 mai mai mai
|
||||
€250 22.4a (8% <20a) 19.6a (53%) 16.2a (91%)
|
||||
€500 19.6a (48%) 15.7a (94%) 12.4a (100%)
|
||||
€1000 14.8a (95%) 12.0a (100%) 9.0a (100%)
|
||||
€2000 10.0a (100%) 8.5a (100%) 6.0a (100%)
|
||||
```
|
||||
|
||||
✅ **Validazione indipendente:** la colonna ×0.60 riproduce **esattamente** i numeri pubblicati il
|
||||
25/07 (€500/m → 19.6a, €1000/m → 14.8a). La replica e' fedele, quindi le altre due colonne sono
|
||||
confrontabili con quelle.
|
||||
|
||||
A €500/mese: dei ~7 anni guadagnati, ~4 vengono dal drift e ~3 dal bersaglio piu' basso.
|
||||
|
||||
⚠️ **Cio' che il fattore NON cambia:** senza depositi il capitale-rendita **non si raggiunge mai**
|
||||
(0% dei path a 20 anni, a ogni fattore). L'accumulo viene dai versamenti, non dal rendimento —
|
||||
correggere il ×0.6 accorcia i tempi, non crea una via che non c'era. E la mediana e' una mediana:
|
||||
meta' dei path arriva dopo, e una quota non arriva affatto.
|
||||
|
||||
---
|
||||
|
||||
## 5. Regole trasferibili
|
||||
|
||||
@@ -67,6 +67,33 @@ def perp_and_wall(r: np.ndarray, k: float, gross_needed: float) -> tuple[float,
|
||||
return lo2, perp, cap
|
||||
|
||||
|
||||
def trajectory(r: np.ndarray, cap_needed: float, n_paths: int = 3000,
|
||||
years: int = 25, seed: int = 725) -> dict:
|
||||
"""Da $600 al capitale-rendita, stocastico (block bootstrap): stessa logica di
|
||||
r0725_capcurve.part_d, parametrizzata sul fattore e sul bersaglio."""
|
||||
rng = np.random.default_rng(seed)
|
||||
n_days = 365 * years
|
||||
paths = CC._boot_paths(r, n_paths, n_days, 20, rng)
|
||||
out = {}
|
||||
for dep_eur in (0, 250, 500, 1_000, 2_000):
|
||||
dep = dep_eur * CC.EURUSD
|
||||
cap = np.full(n_paths, 600.0)
|
||||
hit = np.full(n_paths, -1, int)
|
||||
for t in range(n_days):
|
||||
cap = cap * (1.0 + paths[:, t])
|
||||
if t % 30 == 0 and t > 0:
|
||||
cap += dep
|
||||
newly = (hit < 0) & (cap >= cap_needed)
|
||||
hit[newly] = t
|
||||
yrs = np.where(hit >= 0, hit / 365.0, np.nan)
|
||||
fin = yrs[~np.isnan(yrs)]
|
||||
out[dep_eur] = dict(
|
||||
p50=float(np.percentile(fin, 50)) if len(fin) > 100 else float("nan"),
|
||||
p10=float(np.percentile(fin, 10)) if len(fin) > 100 else float("nan"),
|
||||
p20y=float((yrs <= 20).sum() / len(yrs)))
|
||||
return out
|
||||
|
||||
|
||||
def main() -> None:
|
||||
print("=" * 100)
|
||||
print(" r0726 — MURI DI CAPITALE col fattore de-luck MISURATO (era ×0.6 a occhio)")
|
||||
@@ -123,6 +150,36 @@ def main() -> None:
|
||||
print("\n (a questa taglia la differenza fra ×0.6 e ×0.89 sono centesimi al giorno:")
|
||||
print(" il fattore conta per il MURO e per le soglie prop, non per il conto attuale.)")
|
||||
|
||||
# ---------------------------------------------------------------- traiettoria
|
||||
print("\n" + "=" * 100)
|
||||
print(" TRAIETTORIA da $600 al capitale-rendita (block bootstrap, 3000 path, 25 anni)")
|
||||
print("=" * 100)
|
||||
print(" Il fattore agisce DUE VOLTE: alza il drift (si accumula piu' in fretta) E abbassa")
|
||||
print(" il bersaglio (serve meno capitale). Le due colonne centrali separano gli effetti.")
|
||||
cap_old = res[(0.60, 1.0)][2]
|
||||
cap_new = res[(0.89, 1.0)][2]
|
||||
scen = [
|
||||
(0.60, cap_old, f"×0.60, muro ${cap_old:,.0f} (25/07)"),
|
||||
(0.89, cap_old, f"×0.89, muro ${cap_old:,.0f} (solo drift)"),
|
||||
(0.89, cap_new, f"×0.89, muro ${cap_new:,.0f} (26/07)"),
|
||||
]
|
||||
T = {}
|
||||
for f, capn, lab in scen:
|
||||
r = (base - (1.0 - f) * mu).values.astype(float)
|
||||
T[lab] = trajectory(r, capn)
|
||||
|
||||
for dep in (0, 250, 500, 1_000, 2_000):
|
||||
print(f"\n deposito {dep:,}/mese")
|
||||
print(f" {'scenario':<34}{'p10':>8}{'MEDIANA':>10}{'P(entro 20a)':>14}")
|
||||
for _f, _c, lab in scen:
|
||||
d = T[lab][dep]
|
||||
fm = (lambda v: f"{v:.1f}a" if np.isfinite(v) else " —")
|
||||
print(f" {lab:<34}{fm(d['p10']):>8}{fm(d['p50']):>10}{d['p20y']:>13.0%}")
|
||||
|
||||
print("\n ⚠️ Restano vere le due cose che non dipendono dal fattore: senza depositi il")
|
||||
print(" capitale-rendita non si raggiunge, e la mediana e' una MEDIANA (meta' dei")
|
||||
print(" path arriva dopo, e una quota non arriva affatto).")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user