add ohlcv_has_history - disabling kraken downloads
This commit is contained in:
		| @@ -79,6 +79,12 @@ def start_download_data(args: Dict[str, Any]) -> None: | ||||
|                 data_format_trades=config['dataformat_trades'], | ||||
|             ) | ||||
|         else: | ||||
|             if not exchange._ft_has.get('ohlcv_has_history', True): | ||||
|                 raise OperationalException( | ||||
|                     f"Historic klines not available for {exchange.name}. " | ||||
|                     "Please use `--dl-trades` instead for this exchange " | ||||
|                     "(will unfortunately take a long time)." | ||||
|                     ) | ||||
|             pairs_not_available = refresh_backtest_ohlcv_data( | ||||
|                 exchange, pairs=expanded_pairs, timeframes=config['timeframes'], | ||||
|                 datadir=config['datadir'], timerange=timerange, | ||||
|   | ||||
| @@ -64,6 +64,7 @@ class Exchange: | ||||
|         "time_in_force_parameter": "timeInForce", | ||||
|         "ohlcv_params": {}, | ||||
|         "ohlcv_candle_limit": 500, | ||||
|         "ohlcv_has_history": True,  # Some exchanges (Kraken) don't provide history via ohlcv | ||||
|         "ohlcv_partial_candle": True, | ||||
|         "ohlcv_require_since": False, | ||||
|         # Check https://github.com/ccxt/ccxt/issues/10767 for removal of ohlcv_volume_currency | ||||
| @@ -621,13 +622,17 @@ class Exchange: | ||||
|         # Allow 5 calls to the exchange per pair | ||||
|         required_candle_call_count = int( | ||||
|             (candle_count / candle_limit) + (0 if candle_count % candle_limit == 0 else 1)) | ||||
|         if self._ft_has['ohlcv_has_history']: | ||||
|  | ||||
|         if required_candle_call_count > 5: | ||||
|             # Only allow 5 calls per pair to somewhat limit the impact | ||||
|             if required_candle_call_count > 5: | ||||
|                 # Only allow 5 calls per pair to somewhat limit the impact | ||||
|                 raise OperationalException( | ||||
|                     f"This strategy requires {startup_candles} candles to start, which is more than 5x " | ||||
|                     f"the amount of candles {self.name} provides for {timeframe}.") | ||||
|         elif required_candle_call_count > 1: | ||||
|             raise OperationalException( | ||||
|                 f"This strategy requires {startup_candles} candles to start, which is more than 5x " | ||||
|                 f"This strategy requires {startup_candles} candles to start, which is more than " | ||||
|                 f"the amount of candles {self.name} provides for {timeframe}.") | ||||
|  | ||||
|         if required_candle_call_count > 1: | ||||
|             logger.warning(f"Using {required_candle_call_count} calls to get OHLCV. " | ||||
|                            f"This can result in slower operations for the bot. Please check " | ||||
|   | ||||
| @@ -23,6 +23,7 @@ class Kraken(Exchange): | ||||
|     _ft_has: Dict = { | ||||
|         "stoploss_on_exchange": True, | ||||
|         "ohlcv_candle_limit": 720, | ||||
|         "ohlcv_has_history": False, | ||||
|         "trades_pagination": "id", | ||||
|         "trades_pagination_arg": "since", | ||||
|         "mark_ohlcv_timeframe": "4h", | ||||
|   | ||||
| @@ -835,6 +835,23 @@ def test_download_data_trades(mocker, caplog): | ||||
|         start_download_data(pargs) | ||||
|  | ||||
|  | ||||
| def test_download_data_data_invalid(mocker): | ||||
|     patch_exchange(mocker, id="kraken") | ||||
|     mocker.patch( | ||||
|         'freqtrade.exchange.Exchange.markets', PropertyMock(return_value={}) | ||||
|     ) | ||||
|     args = [ | ||||
|         "download-data", | ||||
|         "--exchange", "kraken", | ||||
|         "--pairs", "ETH/BTC", "XRP/BTC", | ||||
|         "--days", "20", | ||||
|     ] | ||||
|     pargs = get_args(args) | ||||
|     pargs['config'] = None | ||||
|     with pytest.raises(OperationalException, match=r"Historic klines not available for .*"): | ||||
|         start_download_data(pargs) | ||||
|  | ||||
|  | ||||
| def test_start_convert_trades(mocker, caplog): | ||||
|     convert_mock = mocker.patch('freqtrade.commands.data_commands.convert_trades_to_ohlcv', | ||||
|                                 MagicMock(return_value=[])) | ||||
|   | ||||
| @@ -219,7 +219,7 @@ class TestCCXTExchange(): | ||||
|                     assert len(l2['asks']) == next_limit | ||||
|                     assert len(l2['asks']) == next_limit | ||||
|  | ||||
|     def test_fetch_ohlcv(self, exchange): | ||||
|     def test_ccxt_fetch_ohlcv(self, exchange): | ||||
|         exchange, exchangename = exchange | ||||
|         pair = EXCHANGES[exchangename]['pair'] | ||||
|         timeframe = EXCHANGES[exchangename]['timeframe'] | ||||
|   | ||||
| @@ -1084,6 +1084,13 @@ def test_validate_required_startup_candles(default_conf, mocker, caplog): | ||||
|     with pytest.raises(OperationalException, match=r'This strategy requires 6000.*'): | ||||
|         Exchange(default_conf) | ||||
|  | ||||
|     # Emulate kraken mode | ||||
|     ex._ft_has['ohlcv_has_history'] = False | ||||
|     with pytest.raises(OperationalException, | ||||
|                        match=r'This strategy requires 2500.*, ' | ||||
|                              r'which is more than the amount.*'): | ||||
|         ex.validate_required_startup_candles(2500, '5m') | ||||
|  | ||||
|  | ||||
| def test_exchange_has(default_conf, mocker): | ||||
|     exchange = get_patched_exchange(mocker, default_conf) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user