Generate tick data correctly using .etime
							parent
							
								
									ad92188703
								
							
						
					
					
						commit
						d976f3d074
					
				|  | @ -14,7 +14,7 @@ import numpy as np | |||
| import tractor | ||||
| 
 | ||||
| from ._util import resproc, SymbolNotFound, BrokerError | ||||
| from ..log import get_logger | ||||
| from ..log import get_logger, get_console_log | ||||
| 
 | ||||
| log = get_logger(__name__) | ||||
| 
 | ||||
|  | @ -119,11 +119,15 @@ async def stream_quotes( | |||
|     # they are looked up inside this routine. | ||||
|     symbols: List[str] = ['XBTUSD', 'XMRUSD'], | ||||
|     sub_type: str = 'ohlc', | ||||
|     loglevel: str = None, | ||||
| ) -> None: | ||||
|     """Subscribe for ohlc stream of quotes for ``pairs``. | ||||
| 
 | ||||
|     ``pairs`` must be formatted <crypto_symbol>/<fiat_symbol>. | ||||
|     """ | ||||
|     # XXX: required to propagate ``tractor`` loglevel to piker logging | ||||
|     get_console_log(loglevel or tractor.current_actor().loglevel) | ||||
| 
 | ||||
|     ws_pairs = {} | ||||
|     async with get_client() as client: | ||||
|         for sym in symbols: | ||||
|  | @ -175,7 +179,7 @@ async def stream_quotes( | |||
|             low: float  # Low price within interval | ||||
|             close: float  # Close price of interval | ||||
|             vwap: float  # Volume weighted average price within interval | ||||
|             volume: float  # Accumulated volume within interval | ||||
|             volume: float  # Accumulated volume **within interval** | ||||
|             count: int  # Number of trades within interval | ||||
|             # (sampled) generated tick data | ||||
|             ticks: List[Any] = field(default_factory=list) | ||||
|  | @ -191,16 +195,28 @@ async def stream_quotes( | |||
|         ohlc_last = await ohlc_gen.__anext__() | ||||
|         yield asdict(ohlc_last) | ||||
| 
 | ||||
|         # keep start of last interval for volume tracking | ||||
|         last_interval_start = ohlc_last.etime | ||||
| 
 | ||||
|         async for ohlc in ohlc_gen: | ||||
|             # debug | ||||
|             print(ohlc) | ||||
| 
 | ||||
|             # generate tick values to match time & sales pane: | ||||
|             # https://trade.kraken.com/charts/KRAKEN:BTC-USD?period=1m | ||||
|             volume = ohlc.volume | ||||
|             vol_diff = volume - ohlc_last.volume | ||||
|             if vol_diff: | ||||
|             if ohlc.etime > last_interval_start: # new interval | ||||
|                 log.debug( | ||||
|                     f"New interval last: {ohlc_last.time}, now: {ohlc.time}") | ||||
|                 last_interval_start = ohlc.etime | ||||
|                 tick_volume = volume | ||||
|             else: | ||||
|                 # this is the tick volume *within the interval* | ||||
|                 tick_volume = volume - ohlc_last.volume | ||||
| 
 | ||||
|             if tick_volume: | ||||
|                 ohlc.ticks.append({ | ||||
|                     'type': 'trade', | ||||
|                     'price': ohlc.close, | ||||
|                     'size': vol_diff, | ||||
|                     'size': tick_volume, | ||||
|                 }) | ||||
|             yield asdict(ohlc) | ||||
|             ohlc_last = ohlc | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue