research(wave-0822): TERM-STRUCTURE e OI-PIN scartati — la catena ereditata ha 74 giorni utili, non 3,7 mesi
This commit is contained in:
@@ -440,12 +440,19 @@ def main() -> None:
|
||||
rec = {"TP01": _crypto(1.0, 0.0)["R"], "SKH01": _crypto(0.0, 1.0)["R"],
|
||||
"XS01": pc.xsec_daily_tuples()["R"], "VRP01": vrp_daily_tuples()["R"],
|
||||
"GTAA01": gtaa_daily_tuples()["R"]}
|
||||
print("\n sanity — la ricostruzione (R) deve coincidere con lo sleeve ufficiale sulla chiusura:")
|
||||
print("\n sanity — ricostruzione vs sleeve ufficiale. XS01/VRP01/GTAA01 devono coincidere")
|
||||
print(" BARRA PER BARRA; TP01/SKH01 no per costruzione (il recon e' un mark-to-market ORARIO,")
|
||||
print(" lo sleeve marca a fine-trade) -> per loro il controllo giusto e' il log-totale.")
|
||||
print(f" {'sleeve':>8} {'max|delta| barra':>18} {'log-tot recon':>15} "
|
||||
f"{'log-tot sleeve':>16} {'scarto':>9}")
|
||||
for nm in SLEEVES:
|
||||
com = off[nm].index.intersection(rec[nm].index)
|
||||
dmax = float(np.abs(off[nm].reindex(com).values - rec[nm].reindex(com).values).max())
|
||||
note = "" if nm not in ("TP01", "SKH01") else " (recon MTM orario: lente diversa per costruzione)"
|
||||
print(f" {nm:>7}: max|delta| = {dmax:.2e} {'OK' if dmax < 1e-9 else 'DIVERGE'}{note}")
|
||||
a = off[nm].reindex(com).values
|
||||
b = rec[nm].reindex(com).values
|
||||
dmax = float(np.abs(a - b).max())
|
||||
la, lb = float(np.log1p(a).sum()), float(np.log1p(b).sum())
|
||||
flag = "OK" if dmax < 1e-9 else ("lente MTM" if nm in ("TP01", "SKH01") else "DIVERGE")
|
||||
print(f" {nm:>8} {dmax:>18.2e} {lb:>15.4f} {la:>16.4f} {lb-la:>+9.4f} {flag}")
|
||||
|
||||
hr("A. PROFILO DEGLI SLEEVE SOTTO BARRIERA — cio' che conta non e' lo Sharpe, e si vede qui")
|
||||
print(f" {'sleeve':>8} {'Sharpe':>7} {'vol a':>7} {'drift a':>8} {'skew':>7} "
|
||||
@@ -520,6 +527,22 @@ def main() -> None:
|
||||
f"{row['p_pass']:>8.1%} {row['p_alive']:>11.1%} {row['sharpe']:>7.2f} "
|
||||
f"{row['vol']:>6.1%} {row['e_payout']:>9,.0f}$ {row['t_pass']:>10.0f}")
|
||||
|
||||
dA, seA = paired_delta(w_argmax_dict := dict(zip(CRYPTO_PROP, [int(x)/100 for x in best["w"].split("/")])),
|
||||
float(best["lev"]),
|
||||
dict(zip(CRYPTO_PROP, [int(x)/100 for x in best_sh["w"].split("/")])),
|
||||
float(best_sh["lev"]), "HYRO", ev_idx, fu_idx)
|
||||
dB, seB = paired_delta(w_argmax_dict, float(best["lev"]),
|
||||
{"TP01": 0.75, "SKH01": 0.25}, float(best_live["lev"]),
|
||||
"HYRO", ev_idx, fu_idx)
|
||||
print(f"\n DIFFERENZE APPAIATE (stessi indici di bootstrap; un livello di J ha SE ~0.01, "
|
||||
f"una differenza molto meno):")
|
||||
print(f" argmax J - argmax SHARPE : {dA:+.4f} +- {seA:.4f} "
|
||||
f"-> {'INDISTINGUIBILI' if abs(dA) < 2*seA else 'differenza reale'}")
|
||||
print(f" argmax J - libro LIVE : {dB:+.4f} +- {seB:.4f} "
|
||||
f"-> {'INDISTINGUIBILI' if abs(dB) < 2*seB else 'differenza reale'}")
|
||||
print(" La prima riga E' il risultato del filone: progettare per la barriera invece che")
|
||||
print(" per lo Sharpe NON sposta i pesi. La seconda dice dove sta il guadagno vero.")
|
||||
|
||||
print("\n Le prime 8 celle per J:")
|
||||
print(f" {'#':>3} {'pesi':>16} {'leva':>6} {'J':>7} {'P(pass)':>8} {'P(vivo)':>8} "
|
||||
f"{'Sharpe':>7} {'E[pay/a]':>10}")
|
||||
@@ -566,8 +589,13 @@ def main() -> None:
|
||||
f"max {Jr.max():.3f} | frazione sopra il LIVE 75/25 = {(Jr > best_live['J']).mean():.0%}")
|
||||
print(f" percentile dell'argmax fra i casuali = {pctl:.1f}° contro la firma best-of-"
|
||||
f"{len(grid)} = {bestofk:.1f}°")
|
||||
print(f" -> {'DENTRO' if pctl <= bestofk else 'SOPRA'} la firma del massimo-di-k: "
|
||||
f"{'nessuna evidenza che quel vettore sia speciale' if pctl <= bestofk else 'vettore particolare'}")
|
||||
print(f" ⚠ RISOLUZIONE: con {len(rw)} estrazioni un percentile vale a passi di "
|
||||
f"{100/len(rw):.1f} punti -> {pctl:.1f}° e {bestofk:.1f}° NON sono distinguibili.")
|
||||
print(f" E il fatto che decide: il MASSIMO dei {len(rw)} pesi casuali e' {Jr.max():.3f} contro"
|
||||
f" {best['J']:.3f} dell'argmax")
|
||||
print(f" della griglia -> un vettore estratto a caso lo {'EGUAGLIA' if Jr.max() >= best['J'] - 1e-9 else 'non lo raggiunge'}."
|
||||
f" NESSUNA evidenza che quel vettore di pesi sia speciale:")
|
||||
print(" cio' che conta non e' QUALE punto del simplesso, ma STARE nella regione diversificata.")
|
||||
print(f" (la meta' bassa del null e' pero' informativa: il LIVE 75/25 e' battuto dal "
|
||||
f"{(Jr > best_live['J']).mean():.0%} dei pesi CASUALI)")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user