Update vlm sticky
							parent
							
								
									0a4bc72341
								
							
						
					
					
						commit
						9b7c8ed01b
					
				| 
						 | 
				
			
			@ -19,7 +19,7 @@ Real-time display tasks for charting / graphics.
 | 
			
		|||
 | 
			
		||||
'''
 | 
			
		||||
from contextlib import asynccontextmanager
 | 
			
		||||
from pprint import pformat
 | 
			
		||||
# from pprint import pformat
 | 
			
		||||
import time
 | 
			
		||||
from types import ModuleType
 | 
			
		||||
from typing import Optional
 | 
			
		||||
| 
						 | 
				
			
			@ -57,11 +57,12 @@ _clear_throttle_rate: int = 58  # Hz
 | 
			
		|||
_book_throttle_rate: int = 16  # Hz
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def chart_from_quotes(
 | 
			
		||||
async def update_chart_from_quotes(
 | 
			
		||||
 | 
			
		||||
    chart: ChartPlotWidget,
 | 
			
		||||
    stream: tractor.MsgStream,
 | 
			
		||||
    ohlcv: np.ndarray,
 | 
			
		||||
 | 
			
		||||
    wap_in_history: bool = False,
 | 
			
		||||
    vlm_chart: Optional[ChartPlotWidget] = None,
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -78,7 +79,8 @@ async def chart_from_quotes(
 | 
			
		|||
    # - handle odd lot orders
 | 
			
		||||
    # - update last open price correctly instead
 | 
			
		||||
    #   of copying it from last bar's close
 | 
			
		||||
    # - 5 sec bar lookback-autocorrection like tws does?
 | 
			
		||||
    # - 1-5 sec bar lookback-autocorrection like tws does?
 | 
			
		||||
    #   (would require a background history checker task)
 | 
			
		||||
 | 
			
		||||
    # update last price sticky
 | 
			
		||||
    last_price_sticky = chart._ysticks[chart.name]
 | 
			
		||||
| 
						 | 
				
			
			@ -86,6 +88,9 @@ async def chart_from_quotes(
 | 
			
		|||
        *ohlcv.array[-1][['index', 'close']]
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    if vlm_chart:
 | 
			
		||||
        vlm_sticky = vlm_chart._ysticks['volume']
 | 
			
		||||
 | 
			
		||||
    def maxmin():
 | 
			
		||||
        # TODO: implement this
 | 
			
		||||
        # https://arxiv.org/abs/cs/0610046
 | 
			
		||||
| 
						 | 
				
			
			@ -127,11 +132,11 @@ async def chart_from_quotes(
 | 
			
		|||
 | 
			
		||||
    # TODO:
 | 
			
		||||
    # - in theory we should be able to read buffer data faster
 | 
			
		||||
    # then msgs arrive.. needs some tinkering and testing
 | 
			
		||||
    #   then msgs arrive.. needs some tinkering and testing
 | 
			
		||||
 | 
			
		||||
    # - if trade volume jumps above / below prior L1 price
 | 
			
		||||
    # levels this might be dark volume we need to
 | 
			
		||||
    # present differently?
 | 
			
		||||
    #   levels this might be dark volume we need to
 | 
			
		||||
    #   present differently -> likely dark vlm
 | 
			
		||||
 | 
			
		||||
    tick_size = chart.linked.symbol.tick_size
 | 
			
		||||
    tick_margin = 2 * tick_size
 | 
			
		||||
| 
						 | 
				
			
			@ -152,7 +157,8 @@ async def chart_from_quotes(
 | 
			
		|||
 | 
			
		||||
            for tick in quote.get('ticks', ()):
 | 
			
		||||
 | 
			
		||||
                # log.info(f"quotes: {pformat(quote['symbol'])}: {pformat(tick)}")
 | 
			
		||||
                # log.info(
 | 
			
		||||
                #   f"quotes: {pformat(quote['symbol'])}: {pformat(tick)}")
 | 
			
		||||
                ticktype = tick.get('type')
 | 
			
		||||
                price = tick.get('price')
 | 
			
		||||
                size = tick.get('size')
 | 
			
		||||
| 
						 | 
				
			
			@ -193,9 +199,14 @@ async def chart_from_quotes(
 | 
			
		|||
                        # update vwap overlay line
 | 
			
		||||
                        chart.update_curve_from_array('bar_wap', ohlcv.array)
 | 
			
		||||
 | 
			
		||||
                    # TODO: show dark trades differently
 | 
			
		||||
                    # https://github.com/pikers/piker/issues/116
 | 
			
		||||
                    if vlm_chart:
 | 
			
		||||
                        print(f"volume: {end['volume']}")
 | 
			
		||||
                        vlm_chart.update_curve_from_array('volume', ohlcv.array)
 | 
			
		||||
                        # print(f"volume: {end['volume']}")
 | 
			
		||||
                        vlm_chart.update_curve_from_array(
 | 
			
		||||
                            'volume', ohlcv.array
 | 
			
		||||
                        )
 | 
			
		||||
                        vlm_sticky.update_from_data(*end[['index', 'volume']])
 | 
			
		||||
 | 
			
		||||
                # l1 book events
 | 
			
		||||
                # throttle the book graphics updates at a lower rate
 | 
			
		||||
| 
						 | 
				
			
			@ -697,9 +708,13 @@ async def maybe_open_vlm_display(
 | 
			
		|||
 | 
			
		||||
                # curve by default
 | 
			
		||||
                ohlc=False,
 | 
			
		||||
 | 
			
		||||
                # Draw vertical bars from zero.
 | 
			
		||||
                # we do this internally ourselves since
 | 
			
		||||
                # the curve item internals are pretty convoluted.
 | 
			
		||||
                style='step',
 | 
			
		||||
 | 
			
		||||
                # vertical bars, we do this internally ourselves
 | 
			
		||||
                # original pyqtgraph flag for reference
 | 
			
		||||
                # stepMode=True,
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -877,7 +892,7 @@ async def display_symbol_data(
 | 
			
		|||
 | 
			
		||||
            # start graphics update loop(s)after receiving first live quote
 | 
			
		||||
            ln.start_soon(
 | 
			
		||||
                chart_from_quotes,
 | 
			
		||||
                update_chart_from_quotes,
 | 
			
		||||
                chart,
 | 
			
		||||
                feed.stream,
 | 
			
		||||
                ohlcv,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue