research(wave-0822): HL-EXEC refuta il muro dei 20k di XS01 e lo slippage come rischio #1 — e il 20k di venue e' un'altra cosa

This commit is contained in:
Adriano Dal Pastro
2026-08-22 17:33:55 +00:00
parent ea22a0e20c
commit 090129359b
7 changed files with 920 additions and 31 deletions
+35
View File
@@ -702,6 +702,41 @@ def main() -> None:
print(" scoperta; se resta a drift 0, il vantaggio e' pura DECORRELAZIONE e non dipende da")
print(" quell'ipotesi. Il numero, non la narrazione, dice quale delle due.")
hr("E-ter. IL BUCO CHE LA FINESTRA NON PUO' CHIUDERE — 2024-2026 non contiene un CRASH")
print(" L'ottimizzazione toglie peso a TP01 (Sharpe 0.79 su questa finestra). Ma TP01 e' lo")
print(" sleeve DIFENSIVO: il LOO del 26/07 misura il suo contributo hold-out NEGATIVO nel 99.1%")
print(" delle ancore e conclude 'uno sleeve difensivo si giudica sul SINISTRO, non sul premio'.")
print(" Su un conto funded la barriera morde PROPRIO nel sinistro. Qui la coppia crypto (che ha")
print(" storia dal 2019, quindi il 2022 dentro) e' ri-ottimizzata sulle due finestre:")
cry_full = pc.crypto_daily_tuples(1.0, 0.0).index
W2 = [{"TP01": i / 8, "SKH01": 1 - i / 8} for i in range(9)]
print(f"\n {'finestra':>26} {'giorni':>7} {'argmax TP/SKH':>15} {'leva':>6} {'J':>7} "
f"{'J del 75/25':>12} {'Sharpe argmax':>14}")
for st, lab in (("2019-03-14", "FULL 2019+ (col 2022)"), (START_WIN, "2024+ (senza crash)")):
pairs = {}
for w in W2:
c = pc.crypto_daily_tuples(w["TP01"], w["SKH01"])
c = c[c.index >= pd.Timestamp(st, tz="UTC")]
pairs[wkey(w)] = (deluck(c["R"].values), np.minimum(c["m"].values, c["R"].values) - c["R"].values)
nh = len(next(iter(pairs.values()))[0])
ev2 = boot_idx(nh, EV_H, N_PATHS, seed=8230)
fu2 = boot_idx(nh, FU_H, N_PATHS, seed=8231)
res = []
for k, (R_, G_) in pairs.items():
for lv in LEVS:
jj = (eval_sim(R_, G_, ev2, lv, "HYRO")["p_pass"]
* funded_sim(R_, G_, fu2, lv, "HYRO", 100_000.0)["p_alive"])
res.append((k, lv, jj, R_.mean() * 365 / (R_.std() * np.sqrt(365))))
bk, blv, bj, bsh = max(res, key=lambda x: x[2])
j75 = max(x[2] for x in res if x[0] == "75/25/0")
print(f" {lab:>26} {nh:>7d} {bk.rsplit('/', 1)[0]:>15} {blv:>6.3f} {bj:>7.3f} "
f"{j75:>12.3f} {bsh:>14.2f}")
print("\n Se anche sulla finestra che CONTIENE il 2022 l'ottimo scarta TP01, la sua sotto-")
print(" pesatura non e' un artefatto di finestra. Se invece li' TP01 pesa, allora la")
print(" raccomandazione del 2024+ e' una scommessa sull'assenza di crash — e su una barriera")
print(" di rovina quella scommessa la paghi una volta sola. **Questa finestra NON puo' dirlo")
print(" per XS01**, che nasce nel 2024: il buco resta aperto per lui, per costruzione.")
# ---------------------------------------------------------------- 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")