Fix _pairs_last_refresh_time storing the wrong date
Depending on the drop_incomplete settings, this can lead to implicit bugs
This commit is contained in:
parent
ff3aa7c1a9
commit
c8a4a773ee
@ -1961,7 +1961,8 @@ class Exchange:
|
|||||||
cache: bool, drop_incomplete: bool) -> DataFrame:
|
cache: bool, drop_incomplete: bool) -> DataFrame:
|
||||||
# keeping last candle time as last refreshed time of the pair
|
# keeping last candle time as last refreshed time of the pair
|
||||||
if ticks and cache:
|
if ticks and cache:
|
||||||
self._pairs_last_refresh_time[(pair, timeframe, c_type)] = ticks[-1][0] // 1000
|
idx = -2 if drop_incomplete and len(ticks) > 1 else -1
|
||||||
|
self._pairs_last_refresh_time[(pair, timeframe, c_type)] = ticks[idx][0] // 1000
|
||||||
# keeping parsed dataframe in cache
|
# keeping parsed dataframe in cache
|
||||||
ohlcv_df = ohlcv_to_dataframe(ticks, timeframe, pair=pair, fill_missing=True,
|
ohlcv_df = ohlcv_to_dataframe(ticks, timeframe, pair=pair, fill_missing=True,
|
||||||
drop_incomplete=drop_incomplete)
|
drop_incomplete=drop_incomplete)
|
||||||
@ -2034,7 +2035,9 @@ class Exchange:
|
|||||||
# Timeframe in seconds
|
# Timeframe in seconds
|
||||||
interval_in_sec = timeframe_to_seconds(timeframe)
|
interval_in_sec = timeframe_to_seconds(timeframe)
|
||||||
plr = self._pairs_last_refresh_time.get((pair, timeframe, candle_type), 0) + interval_in_sec
|
plr = self._pairs_last_refresh_time.get((pair, timeframe, candle_type), 0) + interval_in_sec
|
||||||
return plr < arrow.utcnow().int_timestamp
|
# current,active candle open date
|
||||||
|
now = int(timeframe_to_prev_date(timeframe).timestamp())
|
||||||
|
return plr < now
|
||||||
|
|
||||||
@retrier_async
|
@retrier_async
|
||||||
async def _async_get_candle_history(
|
async def _async_get_candle_history(
|
||||||
|
@ -2215,7 +2215,7 @@ def test_refresh_latest_ohlcv_cache(mocker, default_conf, candle_type, time_mach
|
|||||||
assert len(res[pair1]) == 99
|
assert len(res[pair1]) == 99
|
||||||
assert len(res[pair2]) == 99
|
assert len(res[pair2]) == 99
|
||||||
assert exchange._klines
|
assert exchange._klines
|
||||||
assert exchange._pairs_last_refresh_time[pair1] == ohlcv[-1][0] // 1000
|
assert exchange._pairs_last_refresh_time[pair1] == ohlcv[-2][0] // 1000
|
||||||
exchange._api_async.fetch_ohlcv.reset_mock()
|
exchange._api_async.fetch_ohlcv.reset_mock()
|
||||||
|
|
||||||
# Returned from cache
|
# Returned from cache
|
||||||
@ -2224,7 +2224,7 @@ def test_refresh_latest_ohlcv_cache(mocker, default_conf, candle_type, time_mach
|
|||||||
assert len(res) == 2
|
assert len(res) == 2
|
||||||
assert len(res[pair1]) == 99
|
assert len(res[pair1]) == 99
|
||||||
assert len(res[pair2]) == 99
|
assert len(res[pair2]) == 99
|
||||||
assert exchange._pairs_last_refresh_time[pair1] == ohlcv[-1][0] // 1000
|
assert exchange._pairs_last_refresh_time[pair1] == ohlcv[-2][0] // 1000
|
||||||
|
|
||||||
# Move time 1 candle further but result didn't change yet
|
# Move time 1 candle further but result didn't change yet
|
||||||
time_machine.move_to(start + timedelta(hours=101))
|
time_machine.move_to(start + timedelta(hours=101))
|
||||||
@ -2234,7 +2234,7 @@ def test_refresh_latest_ohlcv_cache(mocker, default_conf, candle_type, time_mach
|
|||||||
assert len(res[pair1]) == 99
|
assert len(res[pair1]) == 99
|
||||||
assert len(res[pair2]) == 99
|
assert len(res[pair2]) == 99
|
||||||
assert res[pair2].at[0, 'open']
|
assert res[pair2].at[0, 'open']
|
||||||
assert exchange._pairs_last_refresh_time[pair1] == ohlcv[-1][0] // 1000
|
assert exchange._pairs_last_refresh_time[pair1] == ohlcv[-2][0] // 1000
|
||||||
refresh_pior = exchange._pairs_last_refresh_time[pair1]
|
refresh_pior = exchange._pairs_last_refresh_time[pair1]
|
||||||
|
|
||||||
# New candle on exchange - return 100 candles - but skip one candle so we actually get 2 candles
|
# New candle on exchange - return 100 candles - but skip one candle so we actually get 2 candles
|
||||||
@ -2252,8 +2252,8 @@ def test_refresh_latest_ohlcv_cache(mocker, default_conf, candle_type, time_mach
|
|||||||
assert res[pair2].at[0, 'open']
|
assert res[pair2].at[0, 'open']
|
||||||
assert refresh_pior != exchange._pairs_last_refresh_time[pair1]
|
assert refresh_pior != exchange._pairs_last_refresh_time[pair1]
|
||||||
|
|
||||||
assert exchange._pairs_last_refresh_time[pair1] == ohlcv[-1][0] // 1000
|
assert exchange._pairs_last_refresh_time[pair1] == ohlcv[-2][0] // 1000
|
||||||
assert exchange._pairs_last_refresh_time[pair2] == ohlcv[-1][0] // 1000
|
assert exchange._pairs_last_refresh_time[pair2] == ohlcv[-2][0] // 1000
|
||||||
exchange._api_async.fetch_ohlcv.reset_mock()
|
exchange._api_async.fetch_ohlcv.reset_mock()
|
||||||
|
|
||||||
# Retry same call - from cache
|
# Retry same call - from cache
|
||||||
|
Loading…
Reference in New Issue
Block a user