diff --git a/piker/brokers/ib/feed.py b/piker/brokers/ib/feed.py index 51305ced..c4f91533 100644 --- a/piker/brokers/ib/feed.py +++ b/piker/brokers/ib/feed.py @@ -178,8 +178,8 @@ async def open_history_client( async def get_hist( timeframe: float, - end_dt: datetime | None = None, - start_dt: datetime | None = None, + end_dt: datetime|None = None, + start_dt: datetime|None = None, ) -> tuple[np.ndarray, str]: @@ -262,7 +262,29 @@ async def open_history_client( vlm = bars_array['volume'] vlm[vlm < 0] = 0 - return bars_array, first_dt, last_dt + # XXX, if a start-limit was passed ensure we only + # return history that far back! + if ( + start_dt + and + last_dt < start_dt + ): + bars_array = bars_array[ + bars_array['time'] >= start_dt.timestamp() + ] + # TODO! rm this once we're more confident it never hits! + breakpoint() + raise RuntimeError( + f'OHLC-bars array start is gt `start_dt` limit !!\n' + f'start_dt: {start_dt}\n' + f'last_dt: {last_dt}\n' + ) + + return ( + bars_array, + first_dt, + last_dt, + ) # TODO: it seems like we can do async queries for ohlc # but getting the order right still isn't working and I'm not @@ -397,7 +419,7 @@ async def get_bars( # blank to start which tells ib to look up the latest datum end_dt: str = '', - start_dt: str | None = '', + start_dt: str|None = '', # TODO: make this more dynamic based on measured frame rx latency? # how long before we trigger a feed reset (seconds) @@ -451,6 +473,8 @@ async def get_bars( dt_duration, ) = await proxy.bars( fqme=fqme, + # XXX TODO! lol we're not using this.. + # start_dt=start_dt, end_dt=end_dt, sample_period_s=timeframe, diff --git a/piker/tsp/_history.py b/piker/tsp/_history.py index 361b0e23..e11f967d 100644 --- a/piker/tsp/_history.py +++ b/piker/tsp/_history.py @@ -242,6 +242,13 @@ async def maybe_fill_null_segments( end_dt=end_dt, ) + if ( + from_timestamp( + array['time'][0] + ) < backfill_until_dt + ): + await tractor.pause() + # XXX TODO: pretty sure if i plot tsla, btcusdt.binance # and mnq.cme.ib this causes a Qt crash XXDDD