Move fill case-block earlier, log broker errors
parent
91fdc7c5c7
commit
bec32956a8
|
@ -754,13 +754,40 @@ async def translate_and_relay_brokerd_events(
|
||||||
status_msg = book._active.pop(oid)
|
status_msg = book._active.pop(oid)
|
||||||
|
|
||||||
elif status == 'canceled':
|
elif status == 'canceled':
|
||||||
log.info(f'Cancellation for {oid} is complete!')
|
log.cancel(f'Cancellation for {oid} is complete!')
|
||||||
|
|
||||||
else: # open
|
else: # open
|
||||||
# relayed from backend but probably not handled so
|
# relayed from backend but probably not handled so
|
||||||
# just log it
|
# just log it
|
||||||
log.info(f'{broker} opened order {msg}')
|
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
|
# ``Status`` containing an embedded order msg which
|
||||||
# should be loaded as a "pre-existing open order" from the
|
# should be loaded as a "pre-existing open order" from the
|
||||||
# brokerd backend.
|
# brokerd backend.
|
||||||
|
@ -816,6 +843,14 @@ async def translate_and_relay_brokerd_events(
|
||||||
# don't fall through
|
# don't fall through
|
||||||
continue
|
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
|
# TOO FAST ``BrokerdStatus`` that arrives
|
||||||
# before the ``BrokerdAck``.
|
# before the ``BrokerdAck``.
|
||||||
case {
|
case {
|
||||||
|
@ -830,37 +865,11 @@ async def translate_and_relay_brokerd_events(
|
||||||
}:
|
}:
|
||||||
status_msg = book._active[oid]
|
status_msg = book._active[oid]
|
||||||
log.warning(
|
log.warning(
|
||||||
'Unhandled broker status:\n'
|
'Unhandled broker status for dialog:\n'
|
||||||
|
f'{pformat(status_msg)}\n'
|
||||||
f'{pformat(brokerd_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 _:
|
case _:
|
||||||
raise ValueError(f'Brokerd message {brokerd_msg} is invalid')
|
raise ValueError(f'Brokerd message {brokerd_msg} is invalid')
|
||||||
|
|
||||||
|
|
|
@ -234,6 +234,7 @@ class BrokerdStatus(Struct):
|
||||||
'canceled',
|
'canceled',
|
||||||
'fill',
|
'fill',
|
||||||
'pending',
|
'pending',
|
||||||
|
'error',
|
||||||
]
|
]
|
||||||
|
|
||||||
account: str
|
account: str
|
||||||
|
|
Loading…
Reference in New Issue