From aaa960c5568e311eef00e4a7cccbfa3884920991 Mon Sep 17 00:00:00 2001 From: I Luk Kim Date: Mon, 13 Apr 2026 10:34:16 -0700 Subject: [PATCH] Handle invalid symbols (e.g. BF-B) gracefully in ORB detection Daily bars chunk loop: on failure, retry symbol-by-symbol to isolate and skip the bad ticker rather than crashing the entire detection. Intraday bars chunk loop: catch and log failures, continue with rest. Co-Authored-By: Claude Sonnet 4.6 --- apps/orb_trader/engine.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/apps/orb_trader/engine.py b/apps/orb_trader/engine.py index fa7a02c..9f4413d 100644 --- a/apps/orb_trader/engine.py +++ b/apps/orb_trader/engine.py @@ -105,7 +105,16 @@ class ORBTradingEngine: chunk_size = 200 for i in range(0, len(tickers), chunk_size): chunk = tickers[i : i + chunk_size] - raw_bars.update(self._broker.get_bars(chunk, start, today)) + try: + raw_bars.update(self._broker.get_bars(chunk, start, today)) + except Exception as e: + self._log(f" WARNING: daily bars chunk {i//chunk_size+1} failed ({e}) — skipping") + # Retry chunk symbol-by-symbol to isolate the bad ticker(s) + for sym in chunk: + try: + raw_bars.update(self._broker.get_bars([sym], start, today)) + except Exception: + self._log(f" Skipping invalid symbol: {sym}") daily_bars_dict = bars_to_enrichment_format(raw_bars) @@ -137,13 +146,16 @@ class ORBTradingEngine: chunk_size = 100 for i in range(0, len(tickers), chunk_size): chunk = tickers[i : i + chunk_size] - chunk_bars = self._broker.get_intraday_bars( - chunk, - start=market_open, - end=fetch_end, - timeframe_minutes=5, - ) - intraday_raw.update(chunk_bars) + try: + chunk_bars = self._broker.get_intraday_bars( + chunk, + start=market_open, + end=fetch_end, + timeframe_minutes=5, + ) + intraday_raw.update(chunk_bars) + except Exception as e: + self._log(f" WARNING: intraday bars chunk {i//chunk_size+1} failed ({e}) — skipping") bars_by_ticker = intraday_bars_to_format(intraday_raw) self._log(