ib: more detailed comments on wait-for-quote-task todo
parent
543c11f377
commit
9165515811
|
@ -816,7 +816,10 @@ async def stream_quotes(
|
||||||
proxy: MethodProxy
|
proxy: MethodProxy
|
||||||
mkt: MktPair
|
mkt: MktPair
|
||||||
details: ibis.ContractDetails
|
details: ibis.ContractDetails
|
||||||
async with open_data_client() as proxy:
|
async with (
|
||||||
|
open_data_client() as proxy,
|
||||||
|
trio.open_nursery() as tn,
|
||||||
|
):
|
||||||
mkt, details = await get_mkt_info(
|
mkt, details = await get_mkt_info(
|
||||||
sym,
|
sym,
|
||||||
proxy=proxy, # passed to avoid implicit client load
|
proxy=proxy, # passed to avoid implicit client load
|
||||||
|
@ -844,18 +847,32 @@ async def stream_quotes(
|
||||||
f'{pformat(first_quote)}'
|
f'{pformat(first_quote)}'
|
||||||
)
|
)
|
||||||
|
|
||||||
# TODO: we should instead spawn a task that waits on a feed to start
|
# TODO: we should instead spawn a task that waits on a feed
|
||||||
# and let it wait indefinitely..instead of this hard coded stuff.
|
# to start and let it wait indefinitely..instead of this
|
||||||
|
# hard coded stuff.
|
||||||
|
# async def wait_for_first_quote():
|
||||||
|
# with trio.CancelScope() as cs:
|
||||||
|
|
||||||
with trio.move_on_after(1):
|
with trio.move_on_after(1):
|
||||||
first_ticker = await proxy.get_quote(
|
first_ticker = await proxy.get_quote(
|
||||||
contract=con,
|
contract=con,
|
||||||
raise_on_timeout=True,
|
raise_on_timeout=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
# it might be outside regular trading hours so see if we can at
|
# NOTE: it might be outside regular trading hours for
|
||||||
# least grab history.
|
# assets with "standard venue operating hours" so we
|
||||||
|
# only "pretend the feed is live" when the dst asset
|
||||||
|
# type is NOT within the NON-NORMAL-venue set: aka not
|
||||||
|
# commodities, forex or crypto currencies which CAN
|
||||||
|
# always return a NaN on a snap quote request during
|
||||||
|
# normal venue hours. In the case of a closed venue
|
||||||
|
# (equitiies, futes, bonds etc.) we at least try to
|
||||||
|
# grab the OHLC history.
|
||||||
if (
|
if (
|
||||||
isnan(first_ticker.last) # last quote price value is nan
|
isnan(first_ticker.last)
|
||||||
|
# SO, if the last quote price value is NaN we ONLY
|
||||||
|
# "pretend to do" `feed_is_live.set()` if it's a known
|
||||||
|
# dst asset venue with a lot of closed operating hours.
|
||||||
and mkt.dst.atype not in {
|
and mkt.dst.atype not in {
|
||||||
'commodity',
|
'commodity',
|
||||||
'fiat',
|
'fiat',
|
||||||
|
@ -895,7 +912,7 @@ async def stream_quotes(
|
||||||
|
|
||||||
# only on first entry at feed boot up
|
# only on first entry at feed boot up
|
||||||
if startup:
|
if startup:
|
||||||
startup = False
|
startup: bool = False
|
||||||
task_status.started((
|
task_status.started((
|
||||||
init_msgs,
|
init_msgs,
|
||||||
first_quote,
|
first_quote,
|
||||||
|
@ -923,7 +940,7 @@ async def stream_quotes(
|
||||||
|
|
||||||
# generally speaking these feeds don't
|
# generally speaking these feeds don't
|
||||||
# include vlm data.
|
# include vlm data.
|
||||||
atype = mkt.dst.atype
|
atype: str = mkt.dst.atype
|
||||||
log.info(
|
log.info(
|
||||||
f'No-vlm {mkt.fqme}@{atype}, skipping quote poll'
|
f'No-vlm {mkt.fqme}@{atype}, skipping quote poll'
|
||||||
)
|
)
|
||||||
|
@ -959,7 +976,8 @@ async def stream_quotes(
|
||||||
quote = normalize(ticker)
|
quote = normalize(ticker)
|
||||||
log.debug(f"First ticker received {quote}")
|
log.debug(f"First ticker received {quote}")
|
||||||
|
|
||||||
# tell caller quotes are now coming in live
|
# tell data-layer spawner-caller that live
|
||||||
|
# quotes are now streaming.
|
||||||
feed_is_live.set()
|
feed_is_live.set()
|
||||||
|
|
||||||
# last = time.time()
|
# last = time.time()
|
||||||
|
|
Loading…
Reference in New Issue