Limit real-time chart updates in "big data" cases

- the chart's uppx (units-per-pixel) is > 4 (i.e. zoomed out a lot)
- don't shift the chart (to keep the most recent step in view) if the
  last datum isn't in view (aka the user is probably looking at history)
m4_corrections
Tyler Goodlet 2022-03-11 14:49:45 -05:00
parent 850f664de9
commit 482c46acd0
1 changed files with 18 additions and 11 deletions

View File

@ -319,13 +319,13 @@ def graphics_update_cycle(
# are diffed on each draw cycle anyway; so updates to the # are diffed on each draw cycle anyway; so updates to the
# "curve" length is already automatic. # "curve" length is already automatic.
# compute the first available graphic's x-units-per-pixel
xpx = vlm_chart.view.xs_in_px()
# print(r)
# increment the view position by the sample offset. # increment the view position by the sample offset.
i_step = ohlcv.index i_step = ohlcv.index
i_diff = i_step - vars['i_last'] i_diff = i_step - vars['i_last']
if i_diff > 0:
chart.increment_view(
steps=i_diff,
)
vars['i_last'] = i_step vars['i_last'] = i_step
( (
@ -341,11 +341,12 @@ def graphics_update_cycle(
liv = r > i_step # the last datum is in view liv = r > i_step # the last datum is in view
# don't real-time "shift" the curve to the # don't real-time "shift" the curve to the
# left under the following conditions: # left unless we get one of the following:
if ( if (
( (
i_diff > 0 # no new sample step i_diff > 0 # no new sample step
and liv and xpx < 4 # chart is zoomed out very far
and r >= i_step # the last datum isn't in view
) )
or trigger_all or trigger_all
): ):
@ -354,7 +355,11 @@ def graphics_update_cycle(
# and then iff update curves and shift? # and then iff update curves and shift?
chart.increment_view(steps=i_diff) chart.increment_view(steps=i_diff)
if vlm_chart: if (
vlm_chart
# if zoomed out alot don't update the last "bar"
and xpx < 4
):
vlm_chart.update_curve_from_array('volume', array) vlm_chart.update_curve_from_array('volume', array)
ds.vlm_sticky.update_from_data(*array[-1][['index', 'volume']]) ds.vlm_sticky.update_from_data(*array[-1][['index', 'volume']])
@ -426,10 +431,12 @@ def graphics_update_cycle(
# for typ, tick in reversed(lasts.items()): # for typ, tick in reversed(lasts.items()):
# update ohlc sampled price bars # update ohlc sampled price bars
chart.update_ohlc_from_array(
chart.name, if xpx < 4 or i_diff > 0:
array, chart.update_ohlc_from_array(
) chart.name,
array,
)
# iterate in FIFO order per frame # iterate in FIFO order per frame
for typ, tick in lasts.items(): for typ, tick in lasts.items():