Update exchange_ws get_ohlcv logic

This commit is contained in:
Matthias
2023-08-02 18:11:25 +02:00
parent f90574abee
commit 55ed505f94
3 changed files with 14 additions and 11 deletions

View File

@@ -7,7 +7,6 @@ import asyncio
import inspect import inspect
import logging import logging
import signal import signal
import time
from copy import deepcopy from copy import deepcopy
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
from math import floor, isnan from math import floor, isnan
@@ -2258,7 +2257,7 @@ class Exchange:
# Usable result ... # Usable result ...
logger.info(f"reuse watch result for {pair}, {timeframe}, {x}") logger.info(f"reuse watch result for {pair}, {timeframe}, {x}")
return self._exchange_ws.get_ohlcv(pair, timeframe, candle_type) return self._exchange_ws.get_ohlcv(pair, timeframe, candle_type, candle_date)
# Check if 1 call can get us updated candles without hole in the data. # Check if 1 call can get us updated candles without hole in the data.
if min_date < last_refresh: if min_date < last_refresh:

View File

@@ -101,18 +101,24 @@ class ExchangeWS():
self, self,
pair: str, pair: str,
timeframe: str, timeframe: str,
candle_type: CandleType candle_type: CandleType,
candle_date: int,
) -> OHLCVResponse: ) -> OHLCVResponse:
""" """
Returns cached klines from ccxt's "watch" cache. Returns cached klines from ccxt's "watch" cache.
:param candle_date: timestamp of the end-time of the candle.
""" """
candles = self.ccxt_object.ohlcvs.get(pair, {}).get(timeframe) candles = self.ccxt_object.ohlcvs.get(pair, {}).get(timeframe)
refresh_time = int(self.klines_last_refresh[(pair, timeframe, candle_type)] * 1000) refresh_date = self.klines_last_refresh[(pair, timeframe, candle_type)]
drop_hint = False
if refresh_date > candle_date:
# Refreshed after candle was complete.
logger.info(f"{candles[-1][0] // 1000} >= {candle_date}")
drop_hint = (candles[-1][0] // 1000) >= candle_date
logger.info( logger.info(
f"watch result for {pair}, {timeframe} with length {len(candles)}, " f"watch result for {pair}, {timeframe} with length {len(candles)}, "
f"{datetime.fromtimestamp(candles[-1][0] // 1000)}, " f"{datetime.fromtimestamp(candles[-1][0] // 1000)}, "
f"lref={datetime.fromtimestamp(self.klines_last_refresh[(pair, timeframe, candle_type)])}") f"lref={datetime.fromtimestamp(self.klines_last_refresh[(pair, timeframe, candle_type)])}"
# Fake 1 candle - which is then removed again f"candle_date={datetime.fromtimestamp(candle_date)}, {drop_hint=}"
# TODO: is this really a good idea?? )
# candles.append([refresh_time, 0, 0, 1, 2, 0]) return pair, timeframe, candle_type, candles, drop_hint
return pair, timeframe, candle_type, candles

View File

@@ -1,5 +1,3 @@
import asyncio import asyncio
import threading import threading
from time import sleep from time import sleep