diff --git a/scripts/research/fetch_ib_equities.py b/scripts/research/fetch_ib_equities.py index c030e95..99ad707 100644 --- a/scripts/research/fetch_ib_equities.py +++ b/scripts/research/fetch_ib_equities.py @@ -129,7 +129,21 @@ def main(): sys.exit(2) ib = IB() try: - ib.connect("127.0.0.1", 4002, clientId=90, timeout=15) + # `readonly=True`: questo client SCARICA STORICO e non manda ordini mai. Non e' solo + # igiene — in `ib_async.IB.connectAsync` le richieste "open orders" e "completed orders" + # esistono SOLO se il client non e' readonly (`if not readonly: reqs[...]`), e sul gateway + # paper non rispondono: ogni notte, 63 giri su 63, il log del cron si prendeva + # open orders request timed out + # completed orders request timed out + # Due righe d'errore innocue ripetute per sempre sono il modo in cui un errore VERO + # smette di farsi notare (P14). Qui si toglie la CAUSA, non si filtra il messaggio. + # ⚠️ OSSERVATO il 2026-08-28: a meta' pomeriggio il gateway NON serve storico — + # `reqHistoricalData` va in timeout e lo script stampa "0 barre (subscription?)" per ogni + # simbolo. Quattro tentativi fra le 13:05 e le 15:35 UTC, tutti a zero, con e senza + # `readonly`; il giro del cron delle 00:30 riesce ogni notte. La causa sta nel gateway, + # non qui, e non e' stata diagnosticata. Non e' pericoloso: con 0 barre lo script NON + # sovrascrive i parquet, quindi un giro fallito lascia il dato di ieri invece di romperlo. + ib.connect("127.0.0.1", 4002, clientId=90, timeout=15, readonly=True) except Exception as e: print(f"[CONNESSIONE FALLITA] 127.0.0.1:4002 -> {repr(e)[:120]}\n Avvia: docker compose up -d ib-gateway") sys.exit(1)