Ensure we update the volume array, not graphics
Ugh, turns out the wacky `ChartView.maxmin` callback stuff we did (for determining y-range sizings) currently requires that the volume array has a "bars in view" result.. so let's make that keep working without rendering the graphics for the curve (since we're disabling them once $vlm comes up).big_data_lines
parent
eeca9eb4c7
commit
27e3d0ef80
|
@ -75,6 +75,7 @@ _tick_groups = {
|
||||||
|
|
||||||
def chart_maxmin(
|
def chart_maxmin(
|
||||||
chart: ChartPlotWidget,
|
chart: ChartPlotWidget,
|
||||||
|
ohlcv_shm: ShmArray,
|
||||||
vlm_chart: Optional[ChartPlotWidget] = None,
|
vlm_chart: Optional[ChartPlotWidget] = None,
|
||||||
|
|
||||||
) -> tuple[
|
) -> tuple[
|
||||||
|
@ -91,7 +92,8 @@ def chart_maxmin(
|
||||||
# https://arxiv.org/abs/cs/0610046
|
# https://arxiv.org/abs/cs/0610046
|
||||||
# https://github.com/lemire/pythonmaxmin
|
# https://github.com/lemire/pythonmaxmin
|
||||||
|
|
||||||
array = chart._arrays[chart.name]
|
# array = chart._arrays[chart.name]
|
||||||
|
array = ohlcv_shm.array
|
||||||
ifirst = array[0]['index']
|
ifirst = array[0]['index']
|
||||||
|
|
||||||
last_bars_range = chart.bars_range()
|
last_bars_range = chart.bars_range()
|
||||||
|
@ -183,7 +185,12 @@ async def graphics_update_loop(
|
||||||
if vlm_chart:
|
if vlm_chart:
|
||||||
vlm_sticky = vlm_chart._ysticks['volume']
|
vlm_sticky = vlm_chart._ysticks['volume']
|
||||||
|
|
||||||
maxmin = partial(chart_maxmin, chart, vlm_chart)
|
maxmin = partial(
|
||||||
|
chart_maxmin,
|
||||||
|
chart,
|
||||||
|
ohlcv,
|
||||||
|
vlm_chart,
|
||||||
|
)
|
||||||
last_bars_range: tuple[float, float]
|
last_bars_range: tuple[float, float]
|
||||||
(
|
(
|
||||||
last_bars_range,
|
last_bars_range,
|
||||||
|
@ -359,6 +366,7 @@ def graphics_update_cycle(
|
||||||
|
|
||||||
# compute the first available graphic's x-units-per-pixel
|
# compute the first available graphic's x-units-per-pixel
|
||||||
xpx = vlm_chart.view.xs_in_px()
|
xpx = vlm_chart.view.xs_in_px()
|
||||||
|
# print(f'vlm xpx {xpx}')
|
||||||
|
|
||||||
in_view = chart.in_view(ohlcv.array)
|
in_view = chart.in_view(ohlcv.array)
|
||||||
|
|
||||||
|
@ -436,14 +444,30 @@ def graphics_update_cycle(
|
||||||
):
|
):
|
||||||
# TODO: make it so this doesn't have to be called
|
# TODO: make it so this doesn't have to be called
|
||||||
# once the $vlm is up?
|
# once the $vlm is up?
|
||||||
vlm_chart.update_graphics_from_array('volume', array)
|
vlm_chart.update_graphics_from_array(
|
||||||
|
'volume',
|
||||||
|
array,
|
||||||
|
|
||||||
|
# UGGGh, see ``maxmin()`` impl in `._fsp` for
|
||||||
|
# the overlayed plotitems... we need a better
|
||||||
|
# bay to invoke a maxmin per overlay..
|
||||||
|
render=False,
|
||||||
|
# XXX: ^^^^ THIS IS SUPER IMPORTANT! ^^^^
|
||||||
|
# without this, since we disable the
|
||||||
|
# 'volume' (units) chart after the $vlm starts
|
||||||
|
# up we need to be sure to enable this
|
||||||
|
# auto-ranging otherwise there will be no handler
|
||||||
|
# connected to update accompanying overlay
|
||||||
|
# graphics..
|
||||||
|
)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
mx_vlm_in_view != vars['last_mx_vlm']
|
mx_vlm_in_view != vars['last_mx_vlm']
|
||||||
):
|
):
|
||||||
# print(f'mx vlm: {last_mx_vlm} -> {mx_vlm_in_view}')
|
# print(f'mx vlm: {last_mx_vlm} -> {mx_vlm_in_view}')
|
||||||
|
yrange = (0, mx_vlm_in_view * 1.375)
|
||||||
vlm_chart.view._set_yrange(
|
vlm_chart.view._set_yrange(
|
||||||
yrange=(0, mx_vlm_in_view * 1.375)
|
yrange=yrange,
|
||||||
)
|
)
|
||||||
vars['last_mx_vlm'] = mx_vlm_in_view
|
vars['last_mx_vlm'] = mx_vlm_in_view
|
||||||
|
|
||||||
|
@ -455,7 +479,10 @@ def graphics_update_cycle(
|
||||||
array_key=curve_name,
|
array_key=curve_name,
|
||||||
)
|
)
|
||||||
# is this even doing anything?
|
# is this even doing anything?
|
||||||
flow.plot.vb._set_yrange(
|
# (pretty sure it's the real-time
|
||||||
|
# resizing from last quote?)
|
||||||
|
fvb = flow.plot.vb
|
||||||
|
fvb._set_yrange(
|
||||||
autoscale_linked_plots=False,
|
autoscale_linked_plots=False,
|
||||||
name=curve_name,
|
name=curve_name,
|
||||||
)
|
)
|
||||||
|
@ -601,6 +628,9 @@ def graphics_update_cycle(
|
||||||
|
|
||||||
# run synchronous update on all derived fsp subplots
|
# run synchronous update on all derived fsp subplots
|
||||||
for name, subchart in ds.linked.subplots.items():
|
for name, subchart in ds.linked.subplots.items():
|
||||||
|
if name == 'volume':
|
||||||
|
continue
|
||||||
|
|
||||||
update_fsp_chart(
|
update_fsp_chart(
|
||||||
subchart,
|
subchart,
|
||||||
subchart._shm,
|
subchart._shm,
|
||||||
|
|
Loading…
Reference in New Issue