Nest async withs

cached_feeds
Tyler Goodlet 2021-04-05 08:09:26 -04:00
parent a18a4b5a4c
commit 3506bbe05c
1 changed files with 73 additions and 75 deletions

View File

@ -321,97 +321,95 @@ async def start_order_mode(
async with open_ems( async with open_ems(
brokername, brokername,
symbol, symbol,
) as (book, trades_stream): ) as (book, trades_stream), open_order_mode(
symbol,
chart,
book,
) as order_mode:
async with open_order_mode( def get_index(time: float):
symbol,
chart,
book,
) as order_mode:
def get_index(time: float): # XXX: not sure why the time is so off here
# looks like we're gonna have to do some fixing..
# XXX: not sure why the time is so off here ohlc = chart._shm.array
# looks like we're gonna have to do some fixing.. indexes = ohlc['time'] >= time
ohlc = chart._shm.array if any(indexes):
indexes = ohlc['time'] >= time return ohlc['index'][indexes[-1]]
else:
return ohlc['index'][-1]
if any(indexes): # Begin order-response streaming
return ohlc['index'][indexes[-1]]
else:
return ohlc['index'][-1]
# Begin order-response streaming # this is where we receive **back** messages
# about executions **from** the EMS actor
async for msg in trades_stream:
# this is where we receive **back** messages fmsg = pformat(msg)
# about executions **from** the EMS actor log.info(f'Received order msg:\n{fmsg}')
async for msg in trades_stream:
fmsg = pformat(msg) resp = msg['resp']
log.info(f'Received order msg:\n{fmsg}')
resp = msg['resp'] if resp in (
'position',
):
# show line label once order is live
order_mode.on_position_update(msg)
continue
if resp in ( # delete the line from view
'position', oid = msg['oid']
):
# show line label once order is live
order_mode.on_position_update(msg)
continue
# delete the line from view # response to 'action' request (buy/sell)
oid = msg['oid'] if resp in (
'dark_submitted',
'broker_submitted'
):
# response to 'action' request (buy/sell) # show line label once order is live
if resp in ( order_mode.on_submit(oid)
'dark_submitted',
'broker_submitted'
):
# show line label once order is live # resp to 'cancel' request or error condition
order_mode.on_submit(oid) # for action request
elif resp in (
'broker_cancelled',
'broker_inactive',
'dark_cancelled'
):
# delete level line from view
order_mode.on_cancel(oid)
# resp to 'cancel' request or error condition elif resp in (
# for action request 'dark_executed'
elif resp in ( ):
'broker_cancelled', log.info(f'Dark order triggered for {fmsg}')
'broker_inactive',
'dark_cancelled'
):
# delete level line from view
order_mode.on_cancel(oid)
elif resp in ( # for alerts add a triangle and remove the
'dark_executed' # level line
): if msg['cmd']['action'] == 'alert':
log.info(f'Dark order triggered for {fmsg}')
# for alerts add a triangle and remove the # should only be one "fill" for an alert
# level line
if msg['cmd']['action'] == 'alert':
# should only be one "fill" for an alert
order_mode.on_fill(
oid,
price=msg['trigger_price'],
arrow_index=get_index(time.time())
)
await order_mode.on_exec(oid, msg)
# response to completed 'action' request for buy/sell
elif resp in (
'broker_executed',
):
await order_mode.on_exec(oid, msg)
# each clearing tick is responded individually
elif resp in ('broker_filled',):
action = msg['action']
# TODO: some kinda progress system
order_mode.on_fill( order_mode.on_fill(
oid, oid,
price=msg['price'], price=msg['trigger_price'],
arrow_index=get_index(msg['broker_time']), arrow_index=get_index(time.time())
pointing='up' if action == 'buy' else 'down',
) )
await order_mode.on_exec(oid, msg)
# response to completed 'action' request for buy/sell
elif resp in (
'broker_executed',
):
await order_mode.on_exec(oid, msg)
# each clearing tick is responded individually
elif resp in ('broker_filled',):
action = msg['action']
# TODO: some kinda progress system
order_mode.on_fill(
oid,
price=msg['price'],
arrow_index=get_index(msg['broker_time']),
pointing='up' if action == 'buy' else 'down',
)