diff --git a/docs/bot-optimization.md b/docs/bot-optimization.md index 7fee559b8..979adcd08 100644 --- a/docs/bot-optimization.md +++ b/docs/bot-optimization.md @@ -235,11 +235,11 @@ if self.dp: if dp.runmode == 'live': if 'ETH/BTC' in self.dp.available_pairs: data_eth = self.dp.ohlcv(pair='ETH/BTC', - ticker_interval=ticker_interval) + ticker_interval=ticker_interval) else: # Get historic ohlcv data (cached on disk). history_eth = self.dp.historic_ohlcv(pair='ETH/BTC', - ticker_interval='1h') + ticker_interval='1h') ``` All methods return `None` in case of failure (do not raise an exception). diff --git a/freqtrade/tests/data/test_dataprovider.py b/freqtrade/tests/data/test_dataprovider.py index 9f17da391..89b709572 100644 --- a/freqtrade/tests/data/test_dataprovider.py +++ b/freqtrade/tests/data/test_dataprovider.py @@ -9,27 +9,31 @@ from freqtrade.tests.conftest import get_patched_exchange def test_ohlcv(mocker, default_conf, ticker_history): default_conf['runmode'] = RunMode.DRY_RUN + tick_interval = default_conf['ticker_interval'] exchange = get_patched_exchange(mocker, default_conf) - exchange._klines['XRP/BTC'] = ticker_history - exchange._klines['UNITTEST/BTC'] = ticker_history + exchange._klines[('XRP/BTC', tick_interval)] = ticker_history + exchange._klines[('UNITTEST/BTC', tick_interval)] = ticker_history dp = DataProvider(default_conf, exchange) assert dp.runmode == RunMode.DRY_RUN - assert ticker_history.equals(dp.ohlcv('UNITTEST/BTC')) - assert isinstance(dp.ohlcv('UNITTEST/BTC'), DataFrame) - assert dp.ohlcv('UNITTEST/BTC') is not ticker_history - assert dp.ohlcv('UNITTEST/BTC', copy=False) is ticker_history - assert not dp.ohlcv('UNITTEST/BTC').empty - assert dp.ohlcv('NONESENSE/AAA').empty + assert ticker_history.equals(dp.ohlcv('UNITTEST/BTC', tick_interval)) + assert isinstance(dp.ohlcv('UNITTEST/BTC', tick_interval), DataFrame) + assert dp.ohlcv('UNITTEST/BTC', tick_interval) is not ticker_history + assert dp.ohlcv('UNITTEST/BTC', tick_interval, copy=False) is ticker_history + assert not dp.ohlcv('UNITTEST/BTC', tick_interval).empty + assert dp.ohlcv('NONESENSE/AAA', tick_interval).empty + + # Test with and without parameter + assert dp.ohlcv('UNITTEST/BTC', tick_interval).equals(dp.ohlcv('UNITTEST/BTC')) default_conf['runmode'] = RunMode.LIVE dp = DataProvider(default_conf, exchange) assert dp.runmode == RunMode.LIVE - assert isinstance(dp.ohlcv('UNITTEST/BTC'), DataFrame) + assert isinstance(dp.ohlcv('UNITTEST/BTC', tick_interval), DataFrame) default_conf['runmode'] = RunMode.BACKTEST dp = DataProvider(default_conf, exchange) assert dp.runmode == RunMode.BACKTEST - assert dp.ohlcv('UNITTEST/BTC').empty + assert dp.ohlcv('UNITTEST/BTC', tick_interval).empty def test_historic_ohlcv(mocker, default_conf, ticker_history): @@ -49,8 +53,10 @@ def test_historic_ohlcv(mocker, default_conf, ticker_history): def test_available_pairs(mocker, default_conf, ticker_history): exchange = get_patched_exchange(mocker, default_conf) - exchange._klines['XRP/BTC'] = ticker_history - exchange._klines['UNITTEST/BTC'] = ticker_history + + tick_interval = default_conf['ticker_interval'] + exchange._klines[('XRP/BTC', tick_interval)] = ticker_history + exchange._klines[('UNITTEST/BTC', tick_interval)] = ticker_history dp = DataProvider(default_conf, exchange) assert len(dp.available_pairs) == 2 diff --git a/freqtrade/tests/exchange/test_exchange.py b/freqtrade/tests/exchange/test_exchange.py index eaf48fa56..8fc3f1a32 100644 --- a/freqtrade/tests/exchange/test_exchange.py +++ b/freqtrade/tests/exchange/test_exchange.py @@ -802,10 +802,10 @@ def test_refresh_latest_ohlcv(mocker, default_conf, caplog) -> None: exchange = get_patched_exchange(mocker, default_conf) exchange._api_async.fetch_ohlcv = get_mock_coro(tick) - pairs = ['IOTA/ETH', 'XRP/ETH'] + pairs = [('IOTA/ETH', '5m'), ('XRP/ETH', '5m')] # empty dicts assert not exchange._klines - exchange.refresh_latest_ohlcv(['IOTA/ETH', 'XRP/ETH'], '5m') + exchange.refresh_latest_ohlcv([('IOTA/ETH', '5m'), ('XRP/ETH', '5m')]) assert log_has(f'Refreshing ohlcv data for {len(pairs)} pairs', caplog.record_tuples) assert exchange._klines @@ -822,10 +822,11 @@ def test_refresh_latest_ohlcv(mocker, default_conf, caplog) -> None: assert exchange.klines(pair, copy=False) is exchange.klines(pair, copy=False) # test caching - exchange.refresh_latest_ohlcv(['IOTA/ETH', 'XRP/ETH'], '5m') + exchange.refresh_latest_ohlcv([('IOTA/ETH', '5m'), ('XRP/ETH', '5m')]) assert exchange._api_async.fetch_ohlcv.call_count == 2 - assert log_has(f"Using cached ohlcv data for {pairs[0]} ...", caplog.record_tuples) + assert log_has(f"Using cached ohlcv data for {pairs[0][0]}, {pairs[0][1]} ...", + caplog.record_tuples) @pytest.mark.asyncio