Tests need to pass pair to parse_ticker_dataframe
This commit is contained in:
		| @@ -112,7 +112,7 @@ pair = "XLM/BTC"  # Make sure to use a pair that exists on that exchange! | |||||||
| raw = ct.fetch_ohlcv(pair, timeframe=timeframe) | raw = ct.fetch_ohlcv(pair, timeframe=timeframe) | ||||||
|  |  | ||||||
| # convert to dataframe | # convert to dataframe | ||||||
| df1 = parse_ticker_dataframe(raw, timeframe, drop_incomplete=False) | df1 = parse_ticker_dataframe(raw, timeframe, pair=pair, drop_incomplete=False) | ||||||
|  |  | ||||||
| print(df1["date"].tail(1)) | print(df1["date"].tail(1)) | ||||||
| print(datetime.utcnow()) | print(datetime.utcnow()) | ||||||
|   | |||||||
| @@ -17,6 +17,7 @@ def parse_ticker_dataframe(ticker: list, ticker_interval: str, pair: str, *, | |||||||
|     Converts a ticker-list (format ccxt.fetch_ohlcv) to a Dataframe |     Converts a ticker-list (format ccxt.fetch_ohlcv) to a Dataframe | ||||||
|     :param ticker: ticker list, as returned by exchange.async_get_candle_history |     :param ticker: ticker list, as returned by exchange.async_get_candle_history | ||||||
|     :param ticker_interval: ticker_interval (e.g. 5m). Used to fill up eventual missing data |     :param ticker_interval: ticker_interval (e.g. 5m). Used to fill up eventual missing data | ||||||
|  |     :param pair: Pair this data is for (used to warn if fillup was necessary) | ||||||
|     :param fill_missing: fill up missing candles with 0 candles |     :param fill_missing: fill up missing candles with 0 candles | ||||||
|                          (see ohlcv_fill_up_missing_data for details) |                          (see ohlcv_fill_up_missing_data for details) | ||||||
|     :param drop_incomplete: Drop the last candle of the dataframe, assuming it's incomplete |     :param drop_incomplete: Drop the last candle of the dataframe, assuming it's incomplete | ||||||
|   | |||||||
| @@ -650,7 +650,7 @@ def ticker_history_list(): | |||||||
|  |  | ||||||
| @pytest.fixture | @pytest.fixture | ||||||
| def ticker_history(ticker_history_list): | def ticker_history(ticker_history_list): | ||||||
|     return parse_ticker_dataframe(ticker_history_list, "5m", fill_missing=True) |     return parse_ticker_dataframe(ticker_history_list, "5m", pair="UNITTEST/BTC", fill_missing=True) | ||||||
|  |  | ||||||
|  |  | ||||||
| @pytest.fixture | @pytest.fixture | ||||||
| @@ -855,7 +855,8 @@ def tickers(): | |||||||
| @pytest.fixture | @pytest.fixture | ||||||
| def result(): | def result(): | ||||||
|     with open('freqtrade/tests/testdata/UNITTEST_BTC-1m.json') as data_file: |     with open('freqtrade/tests/testdata/UNITTEST_BTC-1m.json') as data_file: | ||||||
|         return parse_ticker_dataframe(json.load(data_file), '1m', fill_missing=True) |         return parse_ticker_dataframe(json.load(data_file), '1m', | ||||||
|  |                                       pair="UNITTEST/BTC", fill_missing=True) | ||||||
|  |  | ||||||
| # FIX: | # FIX: | ||||||
| # Create an fixture/function | # Create an fixture/function | ||||||
|   | |||||||
| @@ -15,7 +15,8 @@ def test_parse_ticker_dataframe(ticker_history_list, caplog): | |||||||
|  |  | ||||||
|     caplog.set_level(logging.DEBUG) |     caplog.set_level(logging.DEBUG) | ||||||
|     # Test file with BV data |     # Test file with BV data | ||||||
|     dataframe = parse_ticker_dataframe(ticker_history_list, '5m', fill_missing=True) |     dataframe = parse_ticker_dataframe(ticker_history_list, '5m', | ||||||
|  |                                        pair="UNITTEST/BTC", fill_missing=True) | ||||||
|     assert dataframe.columns.tolist() == columns |     assert dataframe.columns.tolist() == columns | ||||||
|     assert log_has('Parsing tickerlist to dataframe', caplog.record_tuples) |     assert log_has('Parsing tickerlist to dataframe', caplog.record_tuples) | ||||||
|  |  | ||||||
| @@ -27,12 +28,13 @@ def test_ohlcv_fill_up_missing_data(caplog): | |||||||
|                              pair='UNITTEST/BTC', |                              pair='UNITTEST/BTC', | ||||||
|                              fill_up_missing=False) |                              fill_up_missing=False) | ||||||
|     caplog.set_level(logging.DEBUG) |     caplog.set_level(logging.DEBUG) | ||||||
|     data2 = ohlcv_fill_up_missing_data(data, '1m') |     data2 = ohlcv_fill_up_missing_data(data, '1m', 'UNITTEST/BTC') | ||||||
|     assert len(data2) > len(data) |     assert len(data2) > len(data) | ||||||
|     # Column names should not change |     # Column names should not change | ||||||
|     assert (data.columns == data2.columns).all() |     assert (data.columns == data2.columns).all() | ||||||
|  |  | ||||||
|     assert log_has(f"Missing data fillup: before: {len(data)} - after: {len(data2)}", |     assert log_has(f"Missing data fillup for UNITTEST/BTC: before: " | ||||||
|  |                    f"{len(data)} - after: {len(data2)}", | ||||||
|                    caplog.record_tuples) |                    caplog.record_tuples) | ||||||
|  |  | ||||||
|     # Test fillup actually fixes invalid backtest data |     # Test fillup actually fixes invalid backtest data | ||||||
| @@ -78,10 +80,10 @@ def test_ohlcv_fill_up_missing_data2(caplog): | |||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     # Generate test-data without filling missing |     # Generate test-data without filling missing | ||||||
|     data = parse_ticker_dataframe(ticks, ticker_interval, fill_missing=False) |     data = parse_ticker_dataframe(ticks, ticker_interval, pair="UNITTEST/BTC", fill_missing=False) | ||||||
|     assert len(data) == 3 |     assert len(data) == 3 | ||||||
|     caplog.set_level(logging.DEBUG) |     caplog.set_level(logging.DEBUG) | ||||||
|     data2 = ohlcv_fill_up_missing_data(data, ticker_interval) |     data2 = ohlcv_fill_up_missing_data(data, ticker_interval, "UNITTEST/BTC") | ||||||
|     assert len(data2) == 4 |     assert len(data2) == 4 | ||||||
|     # 3rd candle has been filled |     # 3rd candle has been filled | ||||||
|     row = data2.loc[2, :] |     row = data2.loc[2, :] | ||||||
| @@ -94,7 +96,7 @@ def test_ohlcv_fill_up_missing_data2(caplog): | |||||||
|     # Column names should not change |     # Column names should not change | ||||||
|     assert (data.columns == data2.columns).all() |     assert (data.columns == data2.columns).all() | ||||||
|  |  | ||||||
|     assert log_has(f"Missing data fillup: before: {len(data)} - after: {len(data2)}", |     assert log_has(f"Missing data fillup for UNITTEST/BTC: before: {len(data)} - after: {len(data2)}", | ||||||
|                    caplog.record_tuples) |                    caplog.record_tuples) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -134,12 +136,14 @@ def test_ohlcv_drop_incomplete(caplog): | |||||||
|      ] |      ] | ||||||
|     ] |     ] | ||||||
|     caplog.set_level(logging.DEBUG) |     caplog.set_level(logging.DEBUG) | ||||||
|     data = parse_ticker_dataframe(ticks, ticker_interval, fill_missing=False, drop_incomplete=False) |     data = parse_ticker_dataframe(ticks, ticker_interval, pair="UNITTEST/BTC", | ||||||
|  |                                   fill_missing=False, drop_incomplete=False) | ||||||
|     assert len(data) == 4 |     assert len(data) == 4 | ||||||
|     assert not log_has("Dropping last candle", caplog.record_tuples) |     assert not log_has("Dropping last candle", caplog.record_tuples) | ||||||
|  |  | ||||||
|     # Drop last candle |     # Drop last candle | ||||||
|     data = parse_ticker_dataframe(ticks, ticker_interval, fill_missing=False, drop_incomplete=True) |     data = parse_ticker_dataframe(ticks, ticker_interval, pair="UNITTEST/BTC", | ||||||
|  |                                   fill_missing=False, drop_incomplete=True) | ||||||
|     assert len(data) == 3 |     assert len(data) == 3 | ||||||
|  |  | ||||||
|     assert log_has("Dropping last candle", caplog.record_tuples) |     assert log_has("Dropping last candle", caplog.record_tuples) | ||||||
|   | |||||||
| @@ -263,7 +263,7 @@ def mocked_load_data(datadir, pairs=[], ticker_interval='0m', refresh_pairs=Fals | |||||||
|     hz = 0.1 |     hz = 0.1 | ||||||
|     base = 0.001 |     base = 0.001 | ||||||
|  |  | ||||||
|     ETHBTC = [ |     NEOBTC = [ | ||||||
|         [ |         [ | ||||||
|             ticker_start_time.shift(minutes=(x * ticker_interval_in_minute)).timestamp * 1000, |             ticker_start_time.shift(minutes=(x * ticker_interval_in_minute)).timestamp * 1000, | ||||||
|             math.sin(x * hz) / 1000 + base, |             math.sin(x * hz) / 1000 + base, | ||||||
| @@ -285,8 +285,8 @@ def mocked_load_data(datadir, pairs=[], ticker_interval='0m', refresh_pairs=Fals | |||||||
|             123.45 |             123.45 | ||||||
|         ] for x in range(0, 500)] |         ] for x in range(0, 500)] | ||||||
|  |  | ||||||
|     pairdata = {'NEO/BTC': parse_ticker_dataframe(ETHBTC, '1h', fill_missing=True), |     pairdata = {'NEO/BTC': parse_ticker_dataframe(NEOBTC, '1h', pair="NEO/BTC", fill_missing=True), | ||||||
|                 'LTC/BTC': parse_ticker_dataframe(LTCBTC, '1h', fill_missing=True)} |                 'LTC/BTC': parse_ticker_dataframe(LTCBTC, '1h', pair="LTC/BTC", fill_missing=True)} | ||||||
|     return pairdata |     return pairdata | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -78,7 +78,8 @@ def load_data_test(what): | |||||||
|                 pair[x][5]  # Keep old volume |                 pair[x][5]  # Keep old volume | ||||||
|             ] for x in range(0, datalen) |             ] for x in range(0, datalen) | ||||||
|         ] |         ] | ||||||
|     return {'UNITTEST/BTC': parse_ticker_dataframe(data, '1m', fill_missing=True)} |     return {'UNITTEST/BTC': parse_ticker_dataframe(data, '1m', pair="UNITTEST/BTC", | ||||||
|  |                                                    fill_missing=True)} | ||||||
|  |  | ||||||
|  |  | ||||||
| def simple_backtest(config, contour, num_results, mocker) -> None: | def simple_backtest(config, contour, num_results, mocker) -> None: | ||||||
| @@ -107,7 +108,8 @@ def simple_backtest(config, contour, num_results, mocker) -> None: | |||||||
| def mocked_load_data(datadir, pairs=[], ticker_interval='0m', refresh_pairs=False, | def mocked_load_data(datadir, pairs=[], ticker_interval='0m', refresh_pairs=False, | ||||||
|                      timerange=None, exchange=None, live=False): |                      timerange=None, exchange=None, live=False): | ||||||
|     tickerdata = history.load_tickerdata_file(datadir, 'UNITTEST/BTC', '1m', timerange=timerange) |     tickerdata = history.load_tickerdata_file(datadir, 'UNITTEST/BTC', '1m', timerange=timerange) | ||||||
|     pairdata = {'UNITTEST/BTC': parse_ticker_dataframe(tickerdata, '1m', fill_missing=True)} |     pairdata = {'UNITTEST/BTC': parse_ticker_dataframe(tickerdata, '1m', pair="UNITTEST/BTC", | ||||||
|  |                                                        fill_missing=True)} | ||||||
|     return pairdata |     return pairdata | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -355,7 +357,8 @@ def test_tickerdata_to_dataframe_bt(default_conf, mocker) -> None: | |||||||
|     patch_exchange(mocker) |     patch_exchange(mocker) | ||||||
|     timerange = TimeRange(None, 'line', 0, -100) |     timerange = TimeRange(None, 'line', 0, -100) | ||||||
|     tick = history.load_tickerdata_file(None, 'UNITTEST/BTC', '1m', timerange=timerange) |     tick = history.load_tickerdata_file(None, 'UNITTEST/BTC', '1m', timerange=timerange) | ||||||
|     tickerlist = {'UNITTEST/BTC': parse_ticker_dataframe(tick, '1m', fill_missing=True)} |     tickerlist = {'UNITTEST/BTC': parse_ticker_dataframe(tick, '1m', pair="UNITTEST/BTC", | ||||||
|  |                                                          fill_missing=True)} | ||||||
|  |  | ||||||
|     backtesting = Backtesting(default_conf) |     backtesting = Backtesting(default_conf) | ||||||
|     data = backtesting.strategy.tickerdata_to_dataframe(tickerlist) |     data = backtesting.strategy.tickerdata_to_dataframe(tickerlist) | ||||||
|   | |||||||
| @@ -427,7 +427,8 @@ def test_has_space(hyperopt): | |||||||
|  |  | ||||||
| def test_populate_indicators(hyperopt) -> None: | def test_populate_indicators(hyperopt) -> None: | ||||||
|     tick = load_tickerdata_file(None, 'UNITTEST/BTC', '1m') |     tick = load_tickerdata_file(None, 'UNITTEST/BTC', '1m') | ||||||
|     tickerlist = {'UNITTEST/BTC': parse_ticker_dataframe(tick, '1m', fill_missing=True)} |     tickerlist = {'UNITTEST/BTC': parse_ticker_dataframe(tick, '1m', pair="UNITTEST/BTC", | ||||||
|  |                                                          fill_missing=True)} | ||||||
|     dataframes = hyperopt.strategy.tickerdata_to_dataframe(tickerlist) |     dataframes = hyperopt.strategy.tickerdata_to_dataframe(tickerlist) | ||||||
|     dataframe = hyperopt.custom_hyperopt.populate_indicators(dataframes['UNITTEST/BTC'], |     dataframe = hyperopt.custom_hyperopt.populate_indicators(dataframes['UNITTEST/BTC'], | ||||||
|                                                              {'pair': 'UNITTEST/BTC'}) |                                                              {'pair': 'UNITTEST/BTC'}) | ||||||
| @@ -440,7 +441,8 @@ def test_populate_indicators(hyperopt) -> None: | |||||||
|  |  | ||||||
| def test_buy_strategy_generator(hyperopt) -> None: | def test_buy_strategy_generator(hyperopt) -> None: | ||||||
|     tick = load_tickerdata_file(None, 'UNITTEST/BTC', '1m') |     tick = load_tickerdata_file(None, 'UNITTEST/BTC', '1m') | ||||||
|     tickerlist = {'UNITTEST/BTC': parse_ticker_dataframe(tick, '1m', fill_missing=True)} |     tickerlist = {'UNITTEST/BTC': parse_ticker_dataframe(tick, '1m', pair="UNITTEST/BTC", | ||||||
|  |                                                          fill_missing=True)} | ||||||
|     dataframes = hyperopt.strategy.tickerdata_to_dataframe(tickerlist) |     dataframes = hyperopt.strategy.tickerdata_to_dataframe(tickerlist) | ||||||
|     dataframe = hyperopt.custom_hyperopt.populate_indicators(dataframes['UNITTEST/BTC'], |     dataframe = hyperopt.custom_hyperopt.populate_indicators(dataframes['UNITTEST/BTC'], | ||||||
|                                                              {'pair': 'UNITTEST/BTC'}) |                                                              {'pair': 'UNITTEST/BTC'}) | ||||||
|   | |||||||
| @@ -10,7 +10,8 @@ from freqtrade.strategy.default_strategy import DefaultStrategy | |||||||
| @pytest.fixture | @pytest.fixture | ||||||
| def result(): | def result(): | ||||||
|     with open('freqtrade/tests/testdata/ETH_BTC-1m.json') as data_file: |     with open('freqtrade/tests/testdata/ETH_BTC-1m.json') as data_file: | ||||||
|         return parse_ticker_dataframe(json.load(data_file), '1m', fill_missing=True) |         return parse_ticker_dataframe(json.load(data_file), '1m', pair="UNITTEST/BTC", | ||||||
|  |                                       fill_missing=True) | ||||||
|  |  | ||||||
|  |  | ||||||
| def test_default_strategy_structure(): | def test_default_strategy_structure(): | ||||||
|   | |||||||
| @@ -111,7 +111,8 @@ def test_tickerdata_to_dataframe(default_conf) -> None: | |||||||
|  |  | ||||||
|     timerange = TimeRange(None, 'line', 0, -100) |     timerange = TimeRange(None, 'line', 0, -100) | ||||||
|     tick = load_tickerdata_file(None, 'UNITTEST/BTC', '1m', timerange=timerange) |     tick = load_tickerdata_file(None, 'UNITTEST/BTC', '1m', timerange=timerange) | ||||||
|     tickerlist = {'UNITTEST/BTC': parse_ticker_dataframe(tick, '1m', fill_missing=True)} |     tickerlist = {'UNITTEST/BTC': parse_ticker_dataframe(tick, '1m', pair="UNITTEST/BTC", | ||||||
|  |                                                          fill_missing=True)} | ||||||
|     data = strategy.tickerdata_to_dataframe(tickerlist) |     data = strategy.tickerdata_to_dataframe(tickerlist) | ||||||
|     assert len(data['UNITTEST/BTC']) == 102       # partial candle was removed |     assert len(data['UNITTEST/BTC']) == 102       # partial candle was removed | ||||||
|  |  | ||||||
|   | |||||||
| @@ -17,7 +17,8 @@ def test_shorten_date() -> None: | |||||||
|  |  | ||||||
|  |  | ||||||
| def test_datesarray_to_datetimearray(ticker_history_list): | def test_datesarray_to_datetimearray(ticker_history_list): | ||||||
|     dataframes = parse_ticker_dataframe(ticker_history_list, "5m", fill_missing=True) |     dataframes = parse_ticker_dataframe(ticker_history_list, "5m", pair="UNITTEST/BTC", | ||||||
|  |                                         fill_missing=True) | ||||||
|     dates = datesarray_to_datetimearray(dataframes['date']) |     dates = datesarray_to_datetimearray(dataframes['date']) | ||||||
|  |  | ||||||
|     assert isinstance(dates[0], datetime.datetime) |     assert isinstance(dates[0], datetime.datetime) | ||||||
| @@ -34,7 +35,8 @@ def test_datesarray_to_datetimearray(ticker_history_list): | |||||||
| def test_common_datearray(default_conf) -> None: | def test_common_datearray(default_conf) -> None: | ||||||
|     strategy = DefaultStrategy(default_conf) |     strategy = DefaultStrategy(default_conf) | ||||||
|     tick = load_tickerdata_file(None, 'UNITTEST/BTC', '1m') |     tick = load_tickerdata_file(None, 'UNITTEST/BTC', '1m') | ||||||
|     tickerlist = {'UNITTEST/BTC': parse_ticker_dataframe(tick, "1m", fill_missing=True)} |     tickerlist = {'UNITTEST/BTC': parse_ticker_dataframe(tick, "1m", pair="UNITTEST/BTC", | ||||||
|  |                                                          fill_missing=True)} | ||||||
|     dataframes = strategy.tickerdata_to_dataframe(tickerlist) |     dataframes = strategy.tickerdata_to_dataframe(tickerlist) | ||||||
|  |  | ||||||
|     dates = common_datearray(dataframes) |     dates = common_datearray(dataframes) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user