Port ui components to use flows, drop all late assignments of shm
parent
c097016fd2
commit
599c77ff84
|
@ -223,8 +223,9 @@ class DynamicDateAxis(Axis):
|
|||
) -> list[str]:
|
||||
|
||||
chart = self.linkedsplits.chart
|
||||
bars = chart._arrays[chart.name]
|
||||
shm = self.linkedsplits.chart._shm
|
||||
flow = chart._flows[chart.name]
|
||||
shm = flow.shm
|
||||
bars = shm.array
|
||||
first = shm._first.value
|
||||
|
||||
bars_len = len(bars)
|
||||
|
|
|
@ -254,13 +254,13 @@ class ContentsLabels:
|
|||
def update_labels(
|
||||
self,
|
||||
index: int,
|
||||
# array_name: str,
|
||||
|
||||
) -> None:
|
||||
# for name, (label, update) in self._labels.items():
|
||||
for chart, name, label, update in self._labels:
|
||||
|
||||
array = chart._arrays[name]
|
||||
flow = chart._flows[name]
|
||||
array = flow.shm.array
|
||||
|
||||
if not (
|
||||
index >= 0
|
||||
and index < array[-1]['index']
|
||||
|
@ -269,8 +269,6 @@ class ContentsLabels:
|
|||
print('WTF out of range?')
|
||||
continue
|
||||
|
||||
# array = chart._arrays[name]
|
||||
|
||||
# call provided update func with data point
|
||||
try:
|
||||
label.show()
|
||||
|
@ -472,9 +470,12 @@ class Cursor(pg.GraphicsObject):
|
|||
) -> LineDot:
|
||||
# if this plot contains curves add line dot "cursors" to denote
|
||||
# the current sample under the mouse
|
||||
main_flow = plot._flows[plot.name]
|
||||
# read out last index
|
||||
i = main_flow.shm.array[-1]['index']
|
||||
cursor = LineDot(
|
||||
curve,
|
||||
index=plot._arrays[plot.name][-1]['index'],
|
||||
index=i,
|
||||
plot=plot
|
||||
)
|
||||
plot.addItem(cursor)
|
||||
|
|
|
@ -408,9 +408,8 @@ def graphics_update_cycle(
|
|||
):
|
||||
# TODO: make it so this doesn't have to be called
|
||||
# once the $vlm is up?
|
||||
vlm_chart.update_graphics_from_array(
|
||||
vlm_chart.update_graphics_from_flow(
|
||||
'volume',
|
||||
array,
|
||||
|
||||
# UGGGh, see ``maxmin()`` impl in `._fsp` for
|
||||
# the overlayed plotitems... we need a better
|
||||
|
@ -436,6 +435,11 @@ def graphics_update_cycle(
|
|||
vars['last_mx_vlm'] = mx_vlm_in_view
|
||||
|
||||
for curve_name, flow in vlm_chart._flows.items():
|
||||
|
||||
if not flow.render:
|
||||
print(f'skipping flow {curve_name}?')
|
||||
continue
|
||||
|
||||
update_fsp_chart(
|
||||
vlm_chart,
|
||||
flow,
|
||||
|
@ -500,9 +504,8 @@ def graphics_update_cycle(
|
|||
or i_diff > 0
|
||||
or trigger_all
|
||||
):
|
||||
chart.update_graphics_from_array(
|
||||
chart.update_graphics_from_flow(
|
||||
chart.name,
|
||||
array,
|
||||
)
|
||||
|
||||
# iterate in FIFO order per tick-frame
|
||||
|
@ -515,8 +518,9 @@ def graphics_update_cycle(
|
|||
# tick frames to determine the y-range for chart
|
||||
# auto-scaling.
|
||||
# TODO: we need a streaming minmax algo here, see def above.
|
||||
mx = max(price + tick_margin, mx)
|
||||
mn = min(price - tick_margin, mn)
|
||||
if liv:
|
||||
mx = max(price + tick_margin, mx)
|
||||
mn = min(price - tick_margin, mn)
|
||||
|
||||
if typ in clear_types:
|
||||
|
||||
|
@ -539,9 +543,8 @@ def graphics_update_cycle(
|
|||
|
||||
if wap_in_history:
|
||||
# update vwap overlay line
|
||||
chart.update_graphics_from_array(
|
||||
chart.update_graphics_from_flow(
|
||||
'bar_wap',
|
||||
array,
|
||||
)
|
||||
|
||||
# L1 book label-line updates
|
||||
|
@ -557,7 +560,7 @@ def graphics_update_cycle(
|
|||
|
||||
if (
|
||||
label is not None
|
||||
# and liv
|
||||
and liv
|
||||
):
|
||||
label.update_fields(
|
||||
{'level': price, 'size': size}
|
||||
|
@ -571,7 +574,7 @@ def graphics_update_cycle(
|
|||
typ in _tick_groups['asks']
|
||||
# TODO: instead we could check if the price is in the
|
||||
# y-view-range?
|
||||
# and liv
|
||||
and liv
|
||||
):
|
||||
l1.ask_label.update_fields({'level': price, 'size': size})
|
||||
|
||||
|
@ -579,7 +582,7 @@ def graphics_update_cycle(
|
|||
typ in _tick_groups['bids']
|
||||
# TODO: instead we could check if the price is in the
|
||||
# y-view-range?
|
||||
# and liv
|
||||
and liv
|
||||
):
|
||||
l1.bid_label.update_fields({'level': price, 'size': size})
|
||||
|
||||
|
@ -692,9 +695,10 @@ async def display_symbol_data(
|
|||
# create main OHLC chart
|
||||
chart = linked.plot_ohlc_main(
|
||||
symbol,
|
||||
bars,
|
||||
ohlcv,
|
||||
sidepane=pp_pane,
|
||||
)
|
||||
chart.default_view()
|
||||
chart._feeds[symbol.key] = feed
|
||||
chart.setFocus()
|
||||
|
||||
|
@ -714,10 +718,6 @@ async def display_symbol_data(
|
|||
# size view to data once at outset
|
||||
chart.cv._set_yrange()
|
||||
|
||||
# TODO: a data view api that makes this less shit
|
||||
chart._shm = ohlcv
|
||||
chart._flows[chart.data_key].shm = ohlcv
|
||||
|
||||
# NOTE: we must immediately tell Qt to show the OHLC chart
|
||||
# to avoid a race where the subplots get added/shown to
|
||||
# the linked set *before* the main price chart!
|
||||
|
@ -780,6 +780,5 @@ async def display_symbol_data(
|
|||
sbar._status_groups[loading_sym_key][1]()
|
||||
|
||||
# let the app run.. bby
|
||||
chart.default_view()
|
||||
# linked.graphics_cycle()
|
||||
await trio.sleep_forever()
|
||||
|
|
|
@ -343,7 +343,7 @@ class SelectRect(QtGui.QGraphicsRectItem):
|
|||
nbars = ixmx - ixmn + 1
|
||||
|
||||
chart = self._chart
|
||||
data = chart._arrays[chart.name][ixmn:ixmx]
|
||||
data = chart._flows[chart.name].shm.array[ixmn:ixmx]
|
||||
|
||||
if len(data):
|
||||
std = data['close'].std()
|
||||
|
|
|
@ -93,9 +93,8 @@ def update_fsp_chart(
|
|||
# update graphics
|
||||
# NOTE: this does a length check internally which allows it
|
||||
# staying above the last row check below..
|
||||
chart.update_graphics_from_array(
|
||||
chart.update_graphics_from_flow(
|
||||
graphics_name,
|
||||
array,
|
||||
array_key=array_key or graphics_name,
|
||||
)
|
||||
|
||||
|
@ -106,9 +105,6 @@ def update_fsp_chart(
|
|||
# read from last calculated value and update any label
|
||||
last_val_sticky = chart._ysticks.get(graphics_name)
|
||||
if last_val_sticky:
|
||||
# array = shm.array[array_key]
|
||||
# if len(array):
|
||||
# value = array[-1]
|
||||
last = last_row[array_key]
|
||||
last_val_sticky.update_from_data(-1, last)
|
||||
|
||||
|
@ -246,20 +242,18 @@ async def run_fsp_ui(
|
|||
|
||||
chart.draw_curve(
|
||||
name=name,
|
||||
data=shm.array,
|
||||
shm=shm,
|
||||
overlay=True,
|
||||
color='default_light',
|
||||
array_key=name,
|
||||
**conf.get('chart_kwargs', {})
|
||||
)
|
||||
# specially store ref to shm for lookup in display loop
|
||||
chart._flows[name].shm = shm
|
||||
|
||||
else:
|
||||
# create a new sub-chart widget for this fsp
|
||||
chart = linkedsplits.add_plot(
|
||||
name=name,
|
||||
array=shm.array,
|
||||
shm=shm,
|
||||
|
||||
array_key=name,
|
||||
sidepane=sidepane,
|
||||
|
@ -271,12 +265,6 @@ async def run_fsp_ui(
|
|||
**conf.get('chart_kwargs', {})
|
||||
)
|
||||
|
||||
# XXX: ONLY for sub-chart fsps, overlays have their
|
||||
# data looked up from the chart's internal array set.
|
||||
# TODO: we must get a data view api going STAT!!
|
||||
chart._shm = shm
|
||||
chart._flows[chart.data_key].shm = shm
|
||||
|
||||
# should **not** be the same sub-chart widget
|
||||
assert chart.name != linkedsplits.chart.name
|
||||
|
||||
|
@ -626,7 +614,7 @@ async def open_vlm_displays(
|
|||
shm = ohlcv
|
||||
chart = linked.add_plot(
|
||||
name='volume',
|
||||
array=shm.array,
|
||||
shm=shm,
|
||||
|
||||
array_key='volume',
|
||||
sidepane=sidepane,
|
||||
|
@ -639,7 +627,6 @@ async def open_vlm_displays(
|
|||
# the curve item internals are pretty convoluted.
|
||||
style='step',
|
||||
)
|
||||
chart._flows['volume'].shm = ohlcv
|
||||
|
||||
# force 0 to always be in view
|
||||
def maxmin(
|
||||
|
@ -666,11 +653,6 @@ async def open_vlm_displays(
|
|||
# chart.hideAxis('right')
|
||||
# chart.showAxis('left')
|
||||
|
||||
# XXX: ONLY for sub-chart fsps, overlays have their
|
||||
# data looked up from the chart's internal array set.
|
||||
# TODO: we must get a data view api going STAT!!
|
||||
chart._shm = shm
|
||||
|
||||
# send back new chart to caller
|
||||
task_status.started(chart)
|
||||
|
||||
|
@ -685,9 +667,9 @@ async def open_vlm_displays(
|
|||
|
||||
last_val_sticky.update_from_data(-1, value)
|
||||
|
||||
vlm_curve = chart.update_graphics_from_array(
|
||||
vlm_curve = chart.update_graphics_from_flow(
|
||||
'volume',
|
||||
shm.array,
|
||||
# shm.array,
|
||||
)
|
||||
|
||||
# size view to data once at outset
|
||||
|
@ -795,9 +777,8 @@ async def open_vlm_displays(
|
|||
color = 'bracket'
|
||||
|
||||
curve, _ = chart.draw_curve(
|
||||
# name='dolla_vlm',
|
||||
name=name,
|
||||
data=shm.array,
|
||||
shm=shm,
|
||||
array_key=name,
|
||||
overlay=pi,
|
||||
color=color,
|
||||
|
@ -812,7 +793,6 @@ async def open_vlm_displays(
|
|||
# ``.draw_curve()``.
|
||||
flow = chart._flows[name]
|
||||
assert flow.plot is pi
|
||||
flow.shm = shm
|
||||
|
||||
chart_curves(
|
||||
fields,
|
||||
|
@ -847,7 +827,9 @@ async def open_vlm_displays(
|
|||
# liquidity events (well at least on low OHLC periods - 1s).
|
||||
vlm_curve.hide()
|
||||
chart.removeItem(vlm_curve)
|
||||
chart._flows.pop('volume')
|
||||
vflow = chart._flows['volume']
|
||||
vflow.render = False
|
||||
|
||||
# avoid range sorting on volume once disabled
|
||||
chart.view.disable_auto_yrange()
|
||||
|
||||
|
|
Loading…
Reference in New Issue