Support line update from `Order` msg in `.on_submit()`

multi_client_order_mgt
Tyler Goodlet 2022-10-03 13:41:40 -04:00
parent 4877af9bc3
commit 35871d0213
1 changed files with 26 additions and 10 deletions

View File

@ -152,11 +152,11 @@ class OrderMode:
A callback applied for each level change to the line
which will recompute the order size based on allocator
settings. this is assigned inside
``OrderMode.line_from_order()``
``OrderMode.new_line_from_order()``
'''
# NOTE: the ``Order.account`` is set at order stage time inside
# ``OrderMode.line_from_order()`` or is inside ``Order`` msg
# ``OrderMode.new_line_from_order()`` or is inside ``Order`` msg
# field for loaded orders.
order_info = tracker.alloc.next_order_info(
startup_pp=tracker.startup_pp,
@ -174,7 +174,7 @@ class OrderMode:
# reflect the corresponding account and pos info.
self.pane.on_ui_settings_change('account', order.account)
def line_from_order(
def new_line_from_order(
self,
order: Order,
chart: Optional[ChartPlotWidget] = None,
@ -240,7 +240,7 @@ class OrderMode:
(self.hist_chart, {'only_show_markers_on_hover': True}),
]:
kwargs.update(line_kwargs)
line = self.line_from_order(
line = self.new_line_from_order(
order=order,
chart=chart,
**kwargs,
@ -300,7 +300,7 @@ class OrderMode:
# `LineEditor.unstage_line()` on all staged lines..
# lines = self.lines_from_order(
line = self.line_from_order(
line = self.new_line_from_order(
order,
chart=chart,
show_markers=True,
@ -428,10 +428,11 @@ class OrderMode:
) -> None:
level = line.value()
# updated by level change callback set in ``.line_from_order()``
# updated by level change callback set in ``.new_line_from_order()``
dialog = line.dialog
size = dialog.order.size
# NOTE: sends modified order msg to EMS
self.book.update(
uuid=line.dialog.uuid,
price=level,
@ -447,7 +448,8 @@ class OrderMode:
# EMS response msg handlers
def on_submit(
self,
uuid: str
uuid: str,
order: Optional[Order] = None,
) -> Dialog:
'''
@ -464,6 +466,20 @@ class OrderMode:
dialog.last_status_close()
for line in lines:
# if an order msg is provided update the line
# **from** that msg.
if order:
line.set_level(order.price)
self.on_level_change_update_next_order_info(
level=order.price,
line=line,
order=order,
# use the corresponding position tracker for the
# order's account.
tracker=self.trackers[order.account],
)
# hide any lines not currently moused-over
if not line.get_cursor():
line.hide_labels()
@ -980,9 +996,11 @@ async def process_trade_msg(
match msg:
case Status(resp='dark_open' | 'open'):
order = Order(**msg.req)
if dialog is not None:
# show line label once order is live
mode.on_submit(oid)
mode.on_submit(oid, order=order)
else:
log.warning(
@ -992,7 +1010,6 @@ async def process_trade_msg(
sym = mode.chart.linked.symbol
fqsn = sym.front_fqsn()
order = Order(**msg.req)
if (
((order.symbol + f'.{msg.src}') == fqsn)
@ -1009,7 +1026,6 @@ async def process_trade_msg(
msg.req = order
dialog = mode.load_unknown_dialog_from_msg(msg)
mode.on_submit(oid)
# return dialog, msg
case Status(resp='error'):
# delete level line from view