research(wave-0822): versione finale di r0822_term_structure (sezione 7 + tre fix dell'agente)
This commit is contained in:
@@ -674,6 +674,28 @@ def main() -> None:
|
||||
print(f" {fct:>9.2f} " + " ".join(f"{v:>14.3f}" for v in cells)
|
||||
+ f" {b['w']:>14} {b['lev']:>11.3f}")
|
||||
|
||||
hr("E-bis. LO STRESS CHE DECIDE — XS01 e' stato SCOPERTO in questa finestra")
|
||||
print(" L'argmax mette il 50% su XS01, il cui unico campione (2024+) e' anche quello su cui e'")
|
||||
print(" stato scoperto e affinato (blend di lookback + gate di dispersione). CLAUDE.md lo")
|
||||
print(" dichiara: 'la TAGLIA del guadagno e' ottimista'. Qui si taglia il DRIFT di XS01 (non la")
|
||||
print(" vol, non la coda) e si guarda se la conclusione operativa sopravvive.")
|
||||
print(f"\n {'drift XS01':>12} {'config':>16} {'leva':>6} {'J':>7} {'P(pass)':>8} "
|
||||
f"{'P(vivo)':>8} {'E[pay/a]':>10}")
|
||||
for mult in (1.00, 0.75, 0.50, 0.25, 0.00):
|
||||
dmt = (("XS01", mult),)
|
||||
rows = []
|
||||
for w in top_w:
|
||||
for lv in LEVS:
|
||||
rows.append((w, lv, objective(w, lv, "HYRO", ev_idx, fu_idx, drift_mult=dmt)))
|
||||
w_, lv_, o_ = max(rows, key=lambda x: x[2]["J"])
|
||||
oL = max((objective({"TP01": 0.75, "SKH01": 0.25}, lv, "HYRO", ev_idx, fu_idx,
|
||||
drift_mult=dmt) for lv in LEVS), key=lambda x: x["J"])
|
||||
print(f" {mult:>12.2f} {wkey(w_):>16} {lv_:>6.3f} {o_['J']:>7.3f} {o_['p_pass']:>8.1%} "
|
||||
f"{o_['p_alive']:>8.1%} {o_['e_payout']:>9,.0f}$ (LIVE 75/25: J {oL['J']:.3f})")
|
||||
print("\n Se anche a drift XS01 = 0 (cioe' XS01 ridotto a pura diversificazione di VOLATILITA',")
|
||||
print(" senza alcun rendimento atteso) la configurazione diversificata batte il libro LIVE,")
|
||||
print(" allora il risultato NON dipende dall'edge di XS01 ma dalla sua DECORRELAZIONE.")
|
||||
|
||||
# ---------------------------------------------------------------- F. VRP01 / GTAA01
|
||||
tick("E. banda ancora")
|
||||
hr("F. E GLI SLEEVE 'INUTILI A $600'? — l'asimmetria del 25/07 §4 vale per XS01, non per tutti")
|
||||
@@ -775,12 +797,29 @@ def main() -> None:
|
||||
print(f"\n {'politica':>44} {'leva':>6} {'EUR/g med':>10} {'p90':>8} {'P(>=10/g)':>10} "
|
||||
f"{'P(>=50/g)':>10} {'P(zero)':>8}")
|
||||
for pname, (cfgs, slots) in pols.items():
|
||||
for lev in (float(best["lev"]), 0.75):
|
||||
for lev in sorted({round(float(best["lev"]), 3), 0.75}):
|
||||
r = pc.simulate(cfgs, slots, n_paths=1500, lev=lev, seed=20260822,
|
||||
lens="coupled", start=START_WIN)
|
||||
print(f" {pname:>44} {lev:>6.3f} {r['med']:>10.2f} {r['p90']:>8.2f} "
|
||||
f"{r['p_ge10']:>10.1%} {r['p_target']:>10.1%} {r['p_zero']:>8.1%}")
|
||||
|
||||
print("\n ⚠ QUESTO NUMERO REVISIONA UN HEADLINE DI CLAUDE.md ('EUR600 -> 50 EUR/g ~ 6% in 3")
|
||||
print(" anni, P(perdere i 600) 52-65%', 25/07). Due cose sono cambiate insieme: il fattore di")
|
||||
print(" de-luck (0.60 -> 0.89, ri-misurato il 26/07) e l'ALLOCAZIONE. Vanno separate, o il")
|
||||
print(" merito finisce sulla leva sbagliata. Decomposizione 2x2 (stessa macchina, stesso seme):")
|
||||
print(f"\n {'de-luck':>9} {'allocazione':>26} {'EUR/g med':>10} {'P(>=50/g)':>10} {'P(zero)':>8}")
|
||||
for fct in (0.60, 0.89):
|
||||
pc.DELUCK = fct
|
||||
for lab, cfg in (("LIVE 75/25 (25/07)", cfg_live), (f"argmax-J {best['w']}", cfg_best)):
|
||||
r = pc.simulate([cfg], [0] * pl.MAX_CONCURRENT, n_paths=1500, lev=0.75,
|
||||
seed=20260822, lens="coupled", start=START_WIN)
|
||||
print(f" {fct:>9.2f} {lab:>26} {r['med']:>10.2f} {r['p_target']:>10.1%} "
|
||||
f"{r['p_zero']:>8.1%}")
|
||||
pc.DELUCK = DELUCK
|
||||
print("\n La cella in alto a sinistra (0.60 + LIVE) e' la configurazione del 25/07 e va letta")
|
||||
print(" come replica: se riproduce ~6% di P(>=50/g) e ~52-65% di P(zero), la macchina e' la")
|
||||
print(" stessa e le altre tre celle misurano cio' che dichiarano.")
|
||||
|
||||
print("\n" + "=" * 104)
|
||||
print(f" fatto in {time.time()-t0:.0f}s")
|
||||
print("=" * 104)
|
||||
|
||||
Reference in New Issue
Block a user