research(wave-0822): VRP-QUOTE-VERE scartato — e collect_chain raccoglie la famiglia di contratti che il conto non puo' marginare
This commit is contained in:
@@ -46,6 +46,25 @@ migliore su ingressi E uscite). Banda d'ancora = **23 offset**, la griglia a pri
|
||||
(`A.anchor_luck_delta`), mai differenza delle mediane. L'ancora di TP01 e' tenuta canonica in
|
||||
entrambe le braccia — §6 verifica che il segno non dipenda da lei.
|
||||
|
||||
⚠️ IL CONTROLLO CHE DECIDE — ISO-PESO. Quasi ogni variante di size alza la VOL della gamba SKH,
|
||||
e quindi il suo peso EFFETTIVO nel libro (i nominali restano 75/25). Ma "alzare il peso di SKH01"
|
||||
e' gia' stato misurato e RESPINTO il 26/07 (argmax w=0.35, `weights_tilt_null` fallito: alzarlo non
|
||||
compra Sharpe, compra dipendenza dall'ancora). Percio' il confronto pubblicato non e' vs il
|
||||
baseline nudo ma vs il baseline **RI-SCALATO allo stesso peso effettivo** (colonne ISO): li' resta
|
||||
solo la FORMA — quale trade pesa quanto. E' la regola dell'iso-rischio gia' codificata (25/07 §3).
|
||||
Corollario: siccome lo Sharpe e' invariante alla scala, `sh(k*baseline) == sh(baseline)`, quindi il
|
||||
null del de-levering in questa famiglia COINCIDE col confronto degli Sharpe. `k_iso` resta come
|
||||
diagnostica di quanto si e' mosso il DD.
|
||||
|
||||
DECOMPOSIZIONE DEL MECCANISMO (famiglia ACT). La vol trailing di uno sleeve all'88% di zeri
|
||||
contiene DUE canali: la MAGNITUDINE degli esiti e la FREQUENZA dei trade. `VTL ... attive` isola
|
||||
il primo (vol sulle sole barre attive), `ACT` isola il secondo (conteggio di barre attive nella
|
||||
finestra). Se il guadagno vive in ACT la variante non e' "controllo del rischio" ma un filtro di
|
||||
frequenza, e va detto.
|
||||
|
||||
NULL DI PERMUTAZIONE (§10). Lo stesso MULTINSIEME di size riassegnato a caso ai trade: separa
|
||||
"conta QUALE trade riceve quale size" (informazione) da "conta la DISTRIBUZIONE delle size".
|
||||
|
||||
PRESENTAZIONE. Lo Sharpe e' invariante alla scala, maxDD e CAGR no: ogni variante e' riportata
|
||||
anche a **ISO-VOL** (costante che pareggia la deviazione standard piena a quella del baseline).
|
||||
E' una scelta di presentazione, post-hoc e dichiarata; non cambia lo Sharpe, che e' cio' che
|
||||
@@ -690,7 +709,10 @@ def main() -> None:
|
||||
print(" un contributo positivo si scompone per ANNO prima di crederci) + deriva della size")
|
||||
print("-" * 112)
|
||||
yrs = sorted({int(y) for y in BK["BASE"][can].index.year})
|
||||
top = list(dict.fromkeys([best, best_iso, max(ACT, key=lambda x: RES[x]["iF"]),
|
||||
best_iv = max([n for n in SZ if n.startswith("IV")], key=lambda x: RES[x]["iF"])
|
||||
best_rk = max([n for n in SZ if n.startswith("RISK")], key=lambda x: RES[x]["iF"])
|
||||
top = list(dict.fromkeys([best, best_iso, best_iv, best_rk,
|
||||
max(ACT, key=lambda x: RES[x]["iF"]),
|
||||
max(BVT, key=lambda x: RES[x]["iF"])]))
|
||||
print(f" {'variante':<28}" + "".join(f"{y:>8}" for y in yrs))
|
||||
for nm in top:
|
||||
@@ -731,13 +753,14 @@ def main() -> None:
|
||||
rng = np.random.default_rng(20260822)
|
||||
a10 = list(offs[:: max(1, len(offs) // 3)])[:3]
|
||||
NDRAW = 150
|
||||
for nm in dict.fromkeys([best_iso, best_sleeve]):
|
||||
for nm in dict.fromkeys([best_iso, best_sleeve, best_iv, best_rk]):
|
||||
real = float(np.median([sh(BK[nm][o]) - sh(CTRL[nm][o]) for o in a10]))
|
||||
sz0 = {o: {a: sizes_of(nm, EX[o][a], SZ, VTL, ACT) for a in ASSETS} for o in a10}
|
||||
nul = []
|
||||
for _ in range(NDRAW):
|
||||
v = []
|
||||
for o in a10:
|
||||
szp = {a: rng.permutation(sizes_of(nm, EX[o][a], SZ, VTL, ACT)) for a in ASSETS}
|
||||
szp = {a: rng.permutation(sz0[o][a]) for a in ASSETS}
|
||||
lg = leg_daily(EX[o], szp)
|
||||
m_s = vol(lg) / vol(SLE["BASE"][o]) if vol(SLE["BASE"][o]) > 0 else 1.0
|
||||
v.append(sh(book(TP, lg)) - sh(book(TP, SLE["BASE"][o] * m_s)))
|
||||
|
||||
Reference in New Issue
Block a user