Use `Viz` over charts where possible in display loop
Since `ChartPlotWidget.update_graphics_from_flow()` is more or less just a call to `Viz.update_graphics()` try to call that directly where possible. Changes include: - calling the viz in the display state specific `maxmin()`. - passing a viz instance to each `ChartView._set_yrange()` call (in prep of explicit group auto-ranging); not that this input is unused in the method for now. - drop `bars_range` var passing since we don't use it.multichartz
							parent
							
								
									fdda0c6f77
								
							
						
					
					
						commit
						e06a6c94eb
					
				| 
						 | 
				
			
			@ -88,7 +88,6 @@ log = get_logger(__name__)
 | 
			
		|||
def chart_maxmin(
 | 
			
		||||
    chart: ChartPlotWidget,
 | 
			
		||||
    fqsn: str,
 | 
			
		||||
    # ohlcv_shm: ShmArray,
 | 
			
		||||
    vlm_chart: ChartPlotWidget | None = None,
 | 
			
		||||
 | 
			
		||||
) -> tuple[
 | 
			
		||||
| 
						 | 
				
			
			@ -104,13 +103,18 @@ def chart_maxmin(
 | 
			
		|||
 | 
			
		||||
    '''
 | 
			
		||||
    main_viz = chart.get_viz(chart.name)
 | 
			
		||||
    last_bars_range = main_viz.bars_range()
 | 
			
		||||
    out = chart.maxmin(name=fqsn)
 | 
			
		||||
    out = main_viz.maxmin()
 | 
			
		||||
 | 
			
		||||
    if out is None:
 | 
			
		||||
        return (last_bars_range, 0, 0, 0)
 | 
			
		||||
        return (0, 0, 0)
 | 
			
		||||
 | 
			
		||||
    mn, mx = out
 | 
			
		||||
    (
 | 
			
		||||
        ixrng,
 | 
			
		||||
        read_slc,
 | 
			
		||||
        mxmn,
 | 
			
		||||
    ) = out
 | 
			
		||||
 | 
			
		||||
    mn, mx = mxmn
 | 
			
		||||
 | 
			
		||||
    mx_vlm_in_view = 0
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -123,10 +127,9 @@ def chart_maxmin(
 | 
			
		|||
            _, mx_vlm_in_view = out
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
        last_bars_range,
 | 
			
		||||
        mx,
 | 
			
		||||
        max(mn, 0),  # presuming price can't be negative?
 | 
			
		||||
        mx_vlm_in_view,
 | 
			
		||||
        mx_vlm_in_view,  # vlm max
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -220,7 +223,7 @@ async def increment_history_view(
 | 
			
		|||
                do_append
 | 
			
		||||
                and liv
 | 
			
		||||
            ):
 | 
			
		||||
                hist_viz.plot.vb._set_yrange()
 | 
			
		||||
                hist_viz.plot.vb._set_yrange(viz=hist_viz)
 | 
			
		||||
 | 
			
		||||
            # check if tread-in-place x-shift is needed
 | 
			
		||||
            if should_tread:
 | 
			
		||||
| 
						 | 
				
			
			@ -307,9 +310,7 @@ async def graphics_update_loop(
 | 
			
		|||
            fqsn,
 | 
			
		||||
            vlm_chart,
 | 
			
		||||
        )
 | 
			
		||||
        last_bars_range: tuple[float, float]
 | 
			
		||||
        (
 | 
			
		||||
            last_bars_range,
 | 
			
		||||
            last_mx,
 | 
			
		||||
            last_mn,
 | 
			
		||||
            last_mx_vlm,
 | 
			
		||||
| 
						 | 
				
			
			@ -496,12 +497,11 @@ def graphics_update_cycle(
 | 
			
		|||
    # TODO: we should only run mxmn when we know
 | 
			
		||||
    # an update is due via ``do_append`` above.
 | 
			
		||||
    (
 | 
			
		||||
        brange,
 | 
			
		||||
        mx_in_view,
 | 
			
		||||
        mn_in_view,
 | 
			
		||||
        mx_vlm_in_view,
 | 
			
		||||
    ) = ds.maxmin()
 | 
			
		||||
    l, lbar, rbar, r = brange
 | 
			
		||||
 | 
			
		||||
    mx = mx_in_view + tick_margin
 | 
			
		||||
    mn = mn_in_view - tick_margin
 | 
			
		||||
    profiler('`ds.maxmin()` call')
 | 
			
		||||
| 
						 | 
				
			
			@ -518,14 +518,12 @@ def graphics_update_cycle(
 | 
			
		|||
    ):
 | 
			
		||||
        chart.update_graphics_from_flow(
 | 
			
		||||
            fqsn,
 | 
			
		||||
            # chart.name,
 | 
			
		||||
            # do_append=do_append,
 | 
			
		||||
        )
 | 
			
		||||
        main_viz.draw_last(array_key=fqsn)
 | 
			
		||||
 | 
			
		||||
        hist_chart.update_graphics_from_flow(
 | 
			
		||||
            fqsn,
 | 
			
		||||
            # chart.name,
 | 
			
		||||
            # do_append=do_append,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -540,7 +538,7 @@ def graphics_update_cycle(
 | 
			
		|||
        or trigger_all
 | 
			
		||||
    ):
 | 
			
		||||
        chart.increment_view(datums=append_diff)
 | 
			
		||||
        main_viz.plot.vb._set_yrange()
 | 
			
		||||
        main_viz.plot.vb._set_yrange(viz=main_viz)
 | 
			
		||||
 | 
			
		||||
        # NOTE: since vlm and ohlc charts are axis linked now we don't
 | 
			
		||||
        # need the double increment request?
 | 
			
		||||
| 
						 | 
				
			
			@ -690,7 +688,7 @@ def graphics_update_cycle(
 | 
			
		|||
            is_1m=True,
 | 
			
		||||
        )
 | 
			
		||||
        if hist_liv:
 | 
			
		||||
            hist_viz.plot.vb._set_yrange()
 | 
			
		||||
            hist_viz.plot.vb._set_yrange(viz=hist_viz)
 | 
			
		||||
 | 
			
		||||
    # XXX: update this every draw cycle to make
 | 
			
		||||
    varz['last_mx'], varz['last_mn'] = mx, mn
 | 
			
		||||
| 
						 | 
				
			
			@ -705,7 +703,6 @@ def graphics_update_cycle(
 | 
			
		|||
            and not viz.is_ohlc
 | 
			
		||||
        ):
 | 
			
		||||
            update_fsp_chart(
 | 
			
		||||
                chart,
 | 
			
		||||
                viz,
 | 
			
		||||
                curve_name,
 | 
			
		||||
                array_key=curve_name,
 | 
			
		||||
| 
						 | 
				
			
			@ -788,7 +785,6 @@ def graphics_update_cycle(
 | 
			
		|||
                # and curve_name != fqsn
 | 
			
		||||
            ):
 | 
			
		||||
                update_fsp_chart(
 | 
			
		||||
                    vlm_chart,
 | 
			
		||||
                    viz,
 | 
			
		||||
                    curve_name,
 | 
			
		||||
                    array_key=curve_name,
 | 
			
		||||
| 
						 | 
				
			
			@ -800,7 +796,7 @@ def graphics_update_cycle(
 | 
			
		|||
                # resizing from last quote?)
 | 
			
		||||
                fvb = viz.plot.vb
 | 
			
		||||
                fvb._set_yrange(
 | 
			
		||||
                    name=curve_name,
 | 
			
		||||
                    viz=viz,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
            elif (
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,7 +78,6 @@ def has_vlm(ohlcv: ShmArray) -> bool:
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def update_fsp_chart(
 | 
			
		||||
    chart: ChartPlotWidget,
 | 
			
		||||
    viz,
 | 
			
		||||
    graphics_name: str,
 | 
			
		||||
    array_key: Optional[str],
 | 
			
		||||
| 
						 | 
				
			
			@ -101,18 +100,14 @@ 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_flow(
 | 
			
		||||
        graphics_name,
 | 
			
		||||
        array_key=array_key or graphics_name,
 | 
			
		||||
        **kwargs,
 | 
			
		||||
    )
 | 
			
		||||
    viz.update_graphics()
 | 
			
		||||
 | 
			
		||||
    # XXX: re: ``array_key``: fsp func names must be unique meaning we
 | 
			
		||||
    # can't have duplicates of the underlying data even if multiple
 | 
			
		||||
    # sub-charts reference it under different 'named charts'.
 | 
			
		||||
 | 
			
		||||
    # read from last calculated value and update any label
 | 
			
		||||
    last_val_sticky = chart.plotItem.getAxis(
 | 
			
		||||
    last_val_sticky = viz.plot.getAxis(
 | 
			
		||||
        'right')._stickies.get(graphics_name)
 | 
			
		||||
    if last_val_sticky:
 | 
			
		||||
        last = last_row[array_key]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,6 +45,7 @@ from . import _event
 | 
			
		|||
 | 
			
		||||
if TYPE_CHECKING:
 | 
			
		||||
    from ._chart import ChartPlotWidget
 | 
			
		||||
    from ._dataviz import Viz
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
log = get_logger(__name__)
 | 
			
		||||
| 
						 | 
				
			
			@ -728,6 +729,7 @@ class ChartView(ViewBox):
 | 
			
		|||
        *,
 | 
			
		||||
 | 
			
		||||
        yrange: Optional[tuple[float, float]] = None,
 | 
			
		||||
        viz: Viz | None = None,
 | 
			
		||||
 | 
			
		||||
        # NOTE: this value pairs (more or less) with L1 label text
 | 
			
		||||
        # height offset from from the bid/ask lines.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue