From 69f371bf63beb04f96c584520650795082eac95d Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 3 Dec 2021 14:43:49 +0100 Subject: [PATCH] Update download-data to download necessary data for futures --- freqtrade/commands/data_commands.py | 4 +++- freqtrade/data/history/history_utils.py | 20 ++++++++++++++++++-- freqtrade/exchange/exchange.py | 3 +-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/freqtrade/commands/data_commands.py b/freqtrade/commands/data_commands.py index a75b4bfd2..6330de274 100644 --- a/freqtrade/commands/data_commands.py +++ b/freqtrade/commands/data_commands.py @@ -83,7 +83,9 @@ def start_download_data(args: Dict[str, Any]) -> None: exchange, pairs=expanded_pairs, timeframes=config['timeframes'], datadir=config['datadir'], timerange=timerange, new_pairs_days=config['new_pairs_days'], - erase=bool(config.get('erase')), data_format=config['dataformat_ohlcv']) + erase=bool(config.get('erase')), data_format=config['dataformat_ohlcv'], + trading_mode=config.get('trading_mode', 'spot'), + ) except KeyboardInterrupt: sys.exit("SIGINT received, aborting ...") diff --git a/freqtrade/data/history/history_utils.py b/freqtrade/data/history/history_utils.py index e9c31259f..eff705d06 100644 --- a/freqtrade/data/history/history_utils.py +++ b/freqtrade/data/history/history_utils.py @@ -248,10 +248,10 @@ def _download_pair_history(pair: str, *, def refresh_backtest_ohlcv_data(exchange: Exchange, pairs: List[str], timeframes: List[str], - datadir: Path, timerange: Optional[TimeRange] = None, + datadir: Path, trading_mode: str, + timerange: Optional[TimeRange] = None, new_pairs_days: int = 30, erase: bool = False, data_format: str = None, - candle_type: CandleType = CandleType.SPOT ) -> List[str]: """ Refresh stored ohlcv data for backtesting and hyperopt operations. @@ -260,6 +260,7 @@ def refresh_backtest_ohlcv_data(exchange: Exchange, pairs: List[str], timeframes """ pairs_not_available = [] data_handler = get_datahandler(datadir, data_format) + candle_type = CandleType.FUTURES if trading_mode == 'futures' else CandleType.SPOT_ for idx, pair in enumerate(pairs, start=1): if pair not in exchange.markets: pairs_not_available.append(pair) @@ -279,6 +280,21 @@ def refresh_backtest_ohlcv_data(exchange: Exchange, pairs: List[str], timeframes timerange=timerange, data_handler=data_handler, timeframe=str(timeframe), new_pairs_days=new_pairs_days, candle_type=candle_type) + if trading_mode == 'futures': + # TODO-lev: Use correct candletype (and timeframe) depending on exchange + timeframe = '1h' + candle_type = CandleType.MARK + # TODO: this could be in most parts to the above. + if erase: + if data_handler.ohlcv_purge(pair, timeframe, candle_type=candle_type): + logger.info( + f'Deleting existing data for pair {pair}, interval {timeframe}.') + _download_pair_history(pair=pair, process=process, + datadir=datadir, exchange=exchange, + timerange=timerange, data_handler=data_handler, + timeframe=str(timeframe), new_pairs_days=new_pairs_days, + candle_type=candle_type) + return pairs_not_available diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index e75735c04..7ebf96619 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1326,7 +1326,6 @@ class Exchange: :param candle_type: '', mark, index, premiumIndex, or funding_rate :return: List with candle (OHLCV) data """ - data: List pair, _, _, data = asyncio.get_event_loop().run_until_complete( self._async_get_historic_ohlcv(pair=pair, timeframe=timeframe, since_ms=since_ms, is_new_pair=is_new_pair, @@ -1494,7 +1493,7 @@ class Exchange: pair, timeframe, since_ms, s ) params = deepcopy(self._ft_has.get('ohlcv_params', {})) - if candle_type: + if candle_type not in (CandleType.SPOT, CandleType.SPOT_): params.update({'price': candle_type}) data = await self._api_async.fetch_ohlcv(pair, timeframe=timeframe, since=since_ms,