diff --git a/freqtrade/data/dataprovider.py b/freqtrade/data/dataprovider.py index 5b71c21a8..7e2a6b407 100644 --- a/freqtrade/data/dataprovider.py +++ b/freqtrade/data/dataprovider.py @@ -66,8 +66,7 @@ class DataProvider(): return load_pair_history(pair=pair, ticker_interval=ticker_interval or self._config['ticker_interval'], refresh_pairs=False, - datadir=Path(self._config['datadir']) if self._config.get( - 'datadir') else None + datadir=Path(self._config['datadir']) ) def get_pair_dataframe(self, pair: str, ticker_interval: str = None) -> DataFrame: diff --git a/freqtrade/data/history.py b/freqtrade/data/history.py index aff9f5c74..a71dc373c 100644 --- a/freqtrade/data/history.py +++ b/freqtrade/data/history.py @@ -57,7 +57,7 @@ def trim_tickerlist(tickerlist: List[Dict], timerange: TimeRange) -> List[Dict]: return tickerlist[start_index:stop_index] -def load_tickerdata_file(datadir: Optional[Path], pair: str, ticker_interval: str, +def load_tickerdata_file(datadir: Path, pair: str, ticker_interval: str, timerange: Optional[TimeRange] = None) -> Optional[list]: """ Load a pair from file, either .json.gz or .json @@ -73,7 +73,7 @@ def load_tickerdata_file(datadir: Optional[Path], pair: str, ticker_interval: st return pairdata -def store_tickerdata_file(datadir: Optional[Path], pair: str, +def store_tickerdata_file(datadir: Path, pair: str, ticker_interval: str, data: list, is_zip: bool = False): """ Stores tickerdata to file @@ -84,7 +84,7 @@ def store_tickerdata_file(datadir: Optional[Path], pair: str, def load_pair_history(pair: str, ticker_interval: str, - datadir: Optional[Path], + datadir: Path, timerange: TimeRange = TimeRange(None, None, 0, 0), refresh_pairs: bool = False, exchange: Optional[Exchange] = None, @@ -135,7 +135,7 @@ def load_pair_history(pair: str, return None -def load_data(datadir: Optional[Path], +def load_data(datadir: Path, ticker_interval: str, pairs: List[str], refresh_pairs: bool = False, @@ -172,19 +172,13 @@ def load_data(datadir: Optional[Path], return result -def make_testdata_path(datadir: Optional[Path]) -> Path: - """Return the path where testdata files are stored""" - return datadir or (Path(__file__).parent.parent / "tests" / "testdata").resolve() - - -def pair_data_filename(datadir: Optional[Path], pair: str, ticker_interval: str) -> Path: - path = make_testdata_path(datadir) +def pair_data_filename(datadir: Path, pair: str, ticker_interval: str) -> Path: pair_s = pair.replace("/", "_") - filename = path.joinpath(f'{pair_s}-{ticker_interval}.json') + filename = datadir.joinpath(f'{pair_s}-{ticker_interval}.json') return filename -def load_cached_data_for_updating(datadir: Optional[Path], pair: str, ticker_interval: str, +def load_cached_data_for_updating(datadir: Path, pair: str, ticker_interval: str, timerange: Optional[TimeRange]) -> Tuple[List[Any], Optional[int]]: """ @@ -224,7 +218,7 @@ def load_cached_data_for_updating(datadir: Optional[Path], pair: str, ticker_int return (data, since_ms) -def download_pair_history(datadir: Optional[Path], +def download_pair_history(datadir: Path, exchange: Optional[Exchange], pair: str, ticker_interval: str = '5m', diff --git a/freqtrade/edge/__init__.py b/freqtrade/edge/__init__.py index 2d3097ec4..807fd8825 100644 --- a/freqtrade/edge/__init__.py +++ b/freqtrade/edge/__init__.py @@ -93,7 +93,7 @@ class Edge(): logger.info('Using local backtesting data (using whitelist in given config) ...') data = history.load_data( - datadir=Path(self.config['datadir']) if self.config.get('datadir') else None, + datadir=Path(self.config['datadir']), pairs=pairs, ticker_interval=self.strategy.ticker_interval, refresh_pairs=self._refresh_pairs, diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 4fba47243..708b60144 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -407,7 +407,7 @@ class Backtesting(object): timerange = TimeRange.parse_timerange(None if self.config.get( 'timerange') is None else str(self.config.get('timerange'))) data = history.load_data( - datadir=Path(self.config['datadir']) if self.config.get('datadir') else None, + datadir=Path(self.config['datadir']), pairs=pairs, ticker_interval=self.ticker_interval, refresh_pairs=self.config.get('refresh_pairs', False), diff --git a/freqtrade/optimize/hyperopt.py b/freqtrade/optimize/hyperopt.py index eaa9ced7d..bdd0ba258 100644 --- a/freqtrade/optimize/hyperopt.py +++ b/freqtrade/optimize/hyperopt.py @@ -349,7 +349,7 @@ class Hyperopt: timerange = TimeRange.parse_timerange(None if self.config.get( 'timerange') is None else str(self.config.get('timerange'))) data = load_data( - datadir=Path(self.config['datadir']) if self.config.get('datadir') else None, + datadir=Path(self.config['datadir']), pairs=self.config['exchange']['pair_whitelist'], ticker_interval=self.backtesting.ticker_interval, refresh_pairs=self.config.get('refresh_pairs', False), diff --git a/freqtrade/tests/conftest.py b/freqtrade/tests/conftest.py index e7b8b386a..81358e003 100644 --- a/freqtrade/tests/conftest.py +++ b/freqtrade/tests/conftest.py @@ -182,7 +182,7 @@ def init_persistence(default_conf): @pytest.fixture(scope="function") -def default_conf(): +def default_conf(testdatadir): """ Returns validated configuration suitable for most tests """ configuration = { "max_open_trades": 1, @@ -237,6 +237,7 @@ def default_conf(): "token": "token", "chat_id": "0" }, + "datadir": str(testdatadir), "initial_state": "running", "db_url": "sqlite://", "user_data_dir": Path("user_data"), diff --git a/freqtrade/tests/data/test_dataprovider.py b/freqtrade/tests/data/test_dataprovider.py index 2272f69a3..441e242f8 100644 --- a/freqtrade/tests/data/test_dataprovider.py +++ b/freqtrade/tests/data/test_dataprovider.py @@ -45,7 +45,6 @@ def test_historic_ohlcv(mocker, default_conf, ticker_history): data = dp.historic_ohlcv("UNITTEST/BTC", "5m") assert isinstance(data, DataFrame) assert historymock.call_count == 1 - assert historymock.call_args_list[0][1]["datadir"] is None assert historymock.call_args_list[0][1]["refresh_pairs"] is False assert historymock.call_args_list[0][1]["ticker_interval"] == "5m" diff --git a/freqtrade/tests/edge/test_edge.py b/freqtrade/tests/edge/test_edge.py index 09fa1d93e..d30285a95 100644 --- a/freqtrade/tests/edge/test_edge.py +++ b/freqtrade/tests/edge/test_edge.py @@ -291,7 +291,6 @@ def mocked_load_data(datadir, pairs=[], ticker_interval='0m', refresh_pairs=Fals def test_edge_process_downloaded_data(mocker, edge_conf): - edge_conf['datadir'] = None freqtrade = get_patched_freqtradebot(mocker, edge_conf) mocker.patch('freqtrade.exchange.Exchange.get_fee', MagicMock(return_value=0.001)) mocker.patch('freqtrade.data.history.load_data', mocked_load_data) @@ -303,7 +302,6 @@ def test_edge_process_downloaded_data(mocker, edge_conf): def test_edge_process_no_data(mocker, edge_conf, caplog): - edge_conf['datadir'] = None freqtrade = get_patched_freqtradebot(mocker, edge_conf) mocker.patch('freqtrade.exchange.Exchange.get_fee', MagicMock(return_value=0.001)) mocker.patch('freqtrade.data.history.load_data', MagicMock(return_value={})) @@ -316,7 +314,6 @@ def test_edge_process_no_data(mocker, edge_conf, caplog): def test_edge_process_no_trades(mocker, edge_conf, caplog): - edge_conf['datadir'] = None freqtrade = get_patched_freqtradebot(mocker, edge_conf) mocker.patch('freqtrade.exchange.Exchange.get_fee', MagicMock(return_value=0.001)) mocker.patch('freqtrade.data.history.load_data', mocked_load_data) diff --git a/freqtrade/tests/optimize/test_backtesting.py b/freqtrade/tests/optimize/test_backtesting.py index 8e6459d8a..b1b6dfa06 100644 --- a/freqtrade/tests/optimize/test_backtesting.py +++ b/freqtrade/tests/optimize/test_backtesting.py @@ -489,7 +489,7 @@ def test_backtesting_start(default_conf, mocker, testdatadir, caplog) -> None: assert log_has(line, caplog) -def test_backtesting_start_no_data(default_conf, mocker, caplog) -> None: +def test_backtesting_start_no_data(default_conf, mocker, caplog, testdatadir) -> None: def get_timeframe(input1): return Arrow(2017, 11, 14, 21, 17), Arrow(2017, 11, 14, 22, 59) @@ -505,7 +505,7 @@ def test_backtesting_start_no_data(default_conf, mocker, caplog) -> None: default_conf['exchange']['pair_whitelist'] = ['UNITTEST/BTC'] default_conf['ticker_interval'] = "1m" - default_conf['datadir'] = None + default_conf['datadir'] = testdatadir default_conf['export'] = None default_conf['timerange'] = '20180101-20180102'