research(cross-market): oltre SP500 (bond/commodity/indici esteri) -> niente, artefatto di confine UTC

Esteso il test crypto-lead a ZN(bond), ESTX50/DAX(Europa), NKD(Nikkei) via futures orari IB
(commodity GC/CL/HG bloccate da subscription). Test non-sovrapposto crypto[T-8h->T]->future[T->T+6h].

ES/NQ/RTY niente (gia'); ZN negativo; NKD debole (~overnight drift). ESTX50/DAX SEMBRANO fortissimi
(t_crypto 7.8, Sharpe 2.5, 3/3 anni) MA e' artefatto di confine UTC: picco a coltello a T=00:00,
morto a T=1h; GAP di 1h uccide l'effetto (Sharpe 2.45->-0.52); tutto l'edge nella singola barra
00:00->01:00 (Sh +2.93) vs ora dopo (-1.02). Firma esatta di day_boundary_robust (CLAUDE.md).

VERDETTO: nessuna anticipazione crypto->mercato sfruttabile, ne' SP500 ne' altro. Sempre co-movimento
contemporaneo (risk-beta) o artefatto di confine. Resta valido solo il diversificatore TP01+GTAA.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Adriano Dal Pastro
2026-06-23 12:12:16 +00:00
parent c4bc336a53
commit 09c8bb7de8
4 changed files with 239 additions and 4 deletions
+7 -4
View File
@@ -14,8 +14,11 @@ import numpy as np, pandas as pd
ROOT = Path(__file__).resolve().parents[2]
RAW = ROOT / "data" / "raw"
SYMS = ["ES", "NQ", "RTY"]
N_CHUNKS = 5 # ~5 anni se disponibili
# sym -> exchange (indici US + esteri + commodity + bond per la ricerca cross-mercato oltre SP500)
SYMS = {"ES": "CME", "NQ": "CME", "RTY": "CME",
"GC": "COMEX", "CL": "NYMEX", "HG": "COMEX", "ZN": "CBOT",
"ESTX50": "EUREX", "DAX": "EUREX", "NKD": "CME"}
N_CHUNKS = 5 # (non usato: ContFuture non accetta endDateTime -> chiamata singola)
def main():
@@ -26,11 +29,11 @@ def main():
except Exception as e:
print(f"[CONNESSIONE FALLITA] {repr(e)[:100]}"); sys.exit(1)
print(f" acct {ib.managedAccounts()} | fetch futures orari -> data/raw/fut_*")
for sym in SYMS:
for sym, exc in SYMS.items():
out = RAW / f"fut_{sym.lower()}_1h.parquet"
if out.exists():
print(f" {sym}: gia' su disco -> skip"); continue
cf = ContFuture(sym, exchange="CME")
cf = ContFuture(sym, exchange=exc)
try:
ib.qualifyContracts(cf)
except Exception as e: