Move fill case-block earlier, log broker errors
parent
2d92ed2052
commit
db8a3dd1b7
|
@ -754,13 +754,40 @@ async def translate_and_relay_brokerd_events(
|
|||
status_msg = book._active.pop(oid)
|
||||
|
||||
elif status == 'canceled':
|
||||
log.info(f'Cancellation for {oid} is complete!')
|
||||
log.cancel(f'Cancellation for {oid} is complete!')
|
||||
|
||||
else: # open
|
||||
# relayed from backend but probably not handled so
|
||||
# just log it
|
||||
log.info(f'{broker} opened order {msg}')
|
||||
|
||||
# BrokerdFill
|
||||
case {
|
||||
'name': 'fill',
|
||||
'reqid': reqid, # brokerd generated order-request id
|
||||
# 'symbol': sym, # paper engine doesn't have this, nbd?
|
||||
} if (
|
||||
oid := book._ems2brokerd_ids.inverse.get(reqid)
|
||||
):
|
||||
# proxy through the "fill" result(s)
|
||||
msg = BrokerdFill(**brokerd_msg)
|
||||
log.info(f'Fill for {oid} cleared with:\n{pformat(msg)}')
|
||||
|
||||
ems_client_order_stream = router.dialogues[oid]
|
||||
|
||||
# wtf a fill can come after 'closed' from ib?
|
||||
status_msg = book._active[oid]
|
||||
|
||||
# only if we already rxed a 'closed'
|
||||
# this clear is fully complete? (frickin ib..)
|
||||
# if status_msg.resp == 'closed':
|
||||
# status_msg = book._active.pop(oid)
|
||||
|
||||
status_msg.resp = 'fill'
|
||||
status_msg.reqid = reqid
|
||||
status_msg.brokerd_msg = msg
|
||||
await ems_client_order_stream.send(status_msg)
|
||||
|
||||
# ``Status`` containing an embedded order msg which
|
||||
# should be loaded as a "pre-existing open order" from the
|
||||
# brokerd backend.
|
||||
|
@ -816,6 +843,14 @@ async def translate_and_relay_brokerd_events(
|
|||
# don't fall through
|
||||
continue
|
||||
|
||||
# brokerd error
|
||||
case {
|
||||
'name': 'status',
|
||||
'status': 'error',
|
||||
}:
|
||||
log.error(f'Broker error:\n{pformat(brokerd_msg)}')
|
||||
# XXX: we presume the brokerd cancels its own order
|
||||
|
||||
# TOO FAST ``BrokerdStatus`` that arrives
|
||||
# before the ``BrokerdAck``.
|
||||
case {
|
||||
|
@ -830,37 +865,11 @@ async def translate_and_relay_brokerd_events(
|
|||
}:
|
||||
status_msg = book._active[oid]
|
||||
log.warning(
|
||||
'Unhandled broker status:\n'
|
||||
'Unhandled broker status for dialog:\n'
|
||||
f'{pformat(status_msg)}\n'
|
||||
f'{pformat(brokerd_msg)}\n'
|
||||
)
|
||||
|
||||
# BrokerdFill
|
||||
case {
|
||||
'name': 'fill',
|
||||
'reqid': reqid, # brokerd generated order-request id
|
||||
# 'symbol': sym, # paper engine doesn't have this, nbd?
|
||||
} if (
|
||||
oid := book._ems2brokerd_ids.inverse.get(reqid)
|
||||
):
|
||||
# proxy through the "fill" result(s)
|
||||
msg = BrokerdFill(**brokerd_msg)
|
||||
log.info(f'Fill for {oid} cleared with:\n{pformat(msg)}')
|
||||
|
||||
ems_client_order_stream = router.dialogues[oid]
|
||||
|
||||
# wtf a fill can come after 'closed' from ib?
|
||||
status_msg = book._active[oid]
|
||||
|
||||
# only if we already rxed a 'closed'
|
||||
# this clear is fully complete? (frickin ib..)
|
||||
if status_msg.resp == 'closed':
|
||||
status_msg = book._active.pop(oid)
|
||||
|
||||
status_msg.resp = 'fill'
|
||||
status_msg.reqid = reqid
|
||||
status_msg.brokerd_msg = msg
|
||||
await ems_client_order_stream.send(status_msg)
|
||||
|
||||
case _:
|
||||
raise ValueError(f'Brokerd message {brokerd_msg} is invalid')
|
||||
|
||||
|
|
|
@ -234,6 +234,7 @@ class BrokerdStatus(Struct):
|
|||
'canceled',
|
||||
'fill',
|
||||
'pending',
|
||||
'error',
|
||||
]
|
||||
|
||||
account: str
|
||||
|
|
Loading…
Reference in New Issue