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)mkts_backup
							parent
							
								
									3da081c67a
								
							
						
					
					
						commit
						4ad06e4cc0
					
				| 
						 | 
					@ -324,16 +324,29 @@ 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if vlm_chart:
 | 
					        # don't real-time "shift" the curve to the
 | 
				
			||||||
 | 
					        # left under the following conditions:
 | 
				
			||||||
 | 
					        if (
 | 
				
			||||||
 | 
					            i_diff > 0  # no new sample step
 | 
				
			||||||
 | 
					            and xpx < 4  # chart is zoomed out very far
 | 
				
			||||||
 | 
					            and r >= i_step  # the last datum isn't in view
 | 
				
			||||||
 | 
					        ):
 | 
				
			||||||
 | 
					            chart.increment_view(steps=i_diff)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        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']])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -405,10 +418,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():
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue