Split existing live-open case into its own block
parent
e2cd8c4aef
commit
f6ba95a6c7
|
@ -741,6 +741,57 @@ async def handle_order_updates(
|
||||||
txid, update_msg = list(order_msg.items())[0]
|
txid, update_msg = list(order_msg.items())[0]
|
||||||
match update_msg:
|
match update_msg:
|
||||||
|
|
||||||
|
# EMS-unknown live order that needs to be
|
||||||
|
# delivered and loaded on the client-side.
|
||||||
|
case {
|
||||||
|
'userref': reqid,
|
||||||
|
|
||||||
|
# during a fill this field is **not**
|
||||||
|
# provided! but, it is always avail on
|
||||||
|
# actual status updates.. see case above.
|
||||||
|
'status': status,
|
||||||
|
**rest,
|
||||||
|
} if (
|
||||||
|
ids.inverse.get(reqid) is None
|
||||||
|
):
|
||||||
|
# parse out existing live order
|
||||||
|
descr = rest['descr']
|
||||||
|
fqsn = descr['pair'].replace(
|
||||||
|
'/', '').lower()
|
||||||
|
price = float(descr['price'])
|
||||||
|
size = float(rest['vol'])
|
||||||
|
action = descr['type']
|
||||||
|
|
||||||
|
# register the userref value from
|
||||||
|
# kraken (usually an `int` staring
|
||||||
|
# at 1?) as our reqid.
|
||||||
|
reqids2txids[reqid] = txid
|
||||||
|
oid = str(reqid)
|
||||||
|
ids[oid] = reqid # NOTE!: str -> int
|
||||||
|
|
||||||
|
# fill out ``Status`` + boxed ``Order``
|
||||||
|
status_msg = Status(
|
||||||
|
time_ns=time.time_ns(),
|
||||||
|
resp='open',
|
||||||
|
oid=oid,
|
||||||
|
reqid=reqid,
|
||||||
|
|
||||||
|
# embedded order info
|
||||||
|
req=Order(
|
||||||
|
action=action,
|
||||||
|
exec_mode='live',
|
||||||
|
oid=oid,
|
||||||
|
symbol=fqsn,
|
||||||
|
account=acc_name,
|
||||||
|
price=price,
|
||||||
|
size=size,
|
||||||
|
),
|
||||||
|
src='kraken',
|
||||||
|
)
|
||||||
|
apiflows[reqid].maps.append(status_msg)
|
||||||
|
await ems_stream.send(status_msg)
|
||||||
|
continue
|
||||||
|
|
||||||
# XXX: eg. of full msg schema:
|
# XXX: eg. of full msg schema:
|
||||||
# {'avg_price': _,
|
# {'avg_price': _,
|
||||||
# 'cost': _,
|
# 'cost': _,
|
||||||
|
@ -819,10 +870,6 @@ async def handle_order_updates(
|
||||||
)
|
)
|
||||||
|
|
||||||
oid = ids.inverse.get(reqid)
|
oid = ids.inverse.get(reqid)
|
||||||
|
|
||||||
if (
|
|
||||||
status == 'open'
|
|
||||||
and (
|
|
||||||
# XXX: too fast edit handled by the
|
# XXX: too fast edit handled by the
|
||||||
# request handler task: this
|
# request handler task: this
|
||||||
# scenario occurs when ems side
|
# scenario occurs when ems side
|
||||||
|
@ -848,17 +895,13 @@ async def handle_order_updates(
|
||||||
# coming in too quickly on the other
|
# coming in too quickly on the other
|
||||||
# side of the ems, aka the client
|
# side of the ems, aka the client
|
||||||
# <-> ems dialog.
|
# <-> ems dialog.
|
||||||
(toofast := isinstance(
|
if (
|
||||||
|
status == 'open'
|
||||||
|
and isinstance(
|
||||||
reqids2txids.get(reqid),
|
reqids2txids.get(reqid),
|
||||||
TooFastEdit
|
TooFastEdit
|
||||||
))
|
|
||||||
|
|
||||||
# pre-existing open order NOT from
|
|
||||||
# this EMS session.
|
|
||||||
or (noid := oid is None)
|
|
||||||
)
|
)
|
||||||
):
|
):
|
||||||
if toofast:
|
|
||||||
# TODO: don't even allow this case
|
# TODO: don't even allow this case
|
||||||
# by not moving the client side line
|
# by not moving the client side line
|
||||||
# until an edit confirmation
|
# until an edit confirmation
|
||||||
|
@ -878,47 +921,6 @@ async def handle_order_updates(
|
||||||
})
|
})
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# a non-ems-active order, emit live
|
|
||||||
# order embedded in status msg.
|
|
||||||
elif noid:
|
|
||||||
# parse out existing live order
|
|
||||||
descr = rest['descr']
|
|
||||||
fqsn = descr['pair'].replace(
|
|
||||||
'/', '').lower()
|
|
||||||
price = float(descr['price'])
|
|
||||||
size = float(rest['vol'])
|
|
||||||
action = descr['type']
|
|
||||||
|
|
||||||
# register the userref value from
|
|
||||||
# kraken (usually an `int` staring
|
|
||||||
# at 1?) as our reqid.
|
|
||||||
reqids2txids[reqid] = txid
|
|
||||||
oid = str(reqid)
|
|
||||||
ids[oid] = reqid # NOTE!: str -> int
|
|
||||||
|
|
||||||
# fill out ``Status`` + boxed ``Order``
|
|
||||||
status_msg = Status(
|
|
||||||
time_ns=time.time_ns(),
|
|
||||||
resp='open',
|
|
||||||
oid=oid,
|
|
||||||
reqid=reqid,
|
|
||||||
|
|
||||||
# embedded order info
|
|
||||||
req=Order(
|
|
||||||
action=action,
|
|
||||||
exec_mode='live',
|
|
||||||
oid=oid,
|
|
||||||
symbol=fqsn,
|
|
||||||
account=acc_name,
|
|
||||||
price=price,
|
|
||||||
size=size,
|
|
||||||
),
|
|
||||||
src='kraken',
|
|
||||||
)
|
|
||||||
apiflows[reqid].maps.append(status_msg)
|
|
||||||
await ems_stream.send(status_msg)
|
|
||||||
continue
|
|
||||||
|
|
||||||
# send BrokerdStatus messages for all
|
# send BrokerdStatus messages for all
|
||||||
# order state updates
|
# order state updates
|
||||||
resp = BrokerdStatus(
|
resp = BrokerdStatus(
|
||||||
|
|
Loading…
Reference in New Issue