From ee7b505dcbb262fda5266d0e44f6b561877e2302 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 12 Jan 2023 20:59:43 +0100 Subject: [PATCH] Add data migration method --- freqtrade/data/history/idatahandler.py | 15 +++++++++++++++ freqtrade/util/binance_mig.py | 23 +++++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/freqtrade/data/history/idatahandler.py b/freqtrade/data/history/idatahandler.py index 57441b4be..be265ca34 100644 --- a/freqtrade/data/history/idatahandler.py +++ b/freqtrade/data/history/idatahandler.py @@ -374,6 +374,21 @@ class IDataHandler(ABC): logger.warning(f"{pair}, {candle_type}, {timeframe}, " f"data ends at {pairdata.iloc[-1]['date']:%Y-%m-%d %H:%M:%S}") + def rename_futures_data( + self, pair: str, new_pair: str, timeframe: str, candle_type: CandleType): + """ + Temporary method to migrate data from old naming to new naming (BTC/USDT -> BTC/USDT:USDT) + Only used for binance to support the binance futures naming unification. + """ + + file_old = self._pair_data_filename(self._datadir, pair, timeframe, candle_type) + file_new = self._pair_data_filename(self._datadir, new_pair, timeframe, candle_type) + # print(file_old, file_new) + if file_new.exists(): + logger.warning(f"{file_new} exists already, can't migrate {pair}.") + return + file_old.rename(file_new) + def get_datahandlerclass(datatype: str) -> Type[IDataHandler]: """ diff --git a/freqtrade/util/binance_mig.py b/freqtrade/util/binance_mig.py index 8fa47d16a..627ee2a89 100644 --- a/freqtrade/util/binance_mig.py +++ b/freqtrade/util/binance_mig.py @@ -18,10 +18,11 @@ def migrate_binance_futures_names(config: Config): # only act on new futures return _migrate_binance_futures_db(config) + _migrate_binance_futures_data(config) def _migrate_binance_futures_db(config: Config): - logger.warning('Migrating binance futures pairs') + logger.warning('Migrating binance futures pairs in database.') trades = Trade.get_trades([Trade.exchange == 'binance', Trade.trading_mode == 'FUTURES']).all() for trade in trades: if ':' in trade.pair: @@ -41,4 +42,22 @@ def _migrate_binance_futures_db(config: Config): # print(pls) # pls.update({'pair': concat(PairLock.pair,':USDT')}) Trade.commit() - logger.warning('Done migrating binance futures pairs') + logger.warning('Done migrating binance futures pairs in database.') + + +def _migrate_binance_futures_data(config: Config): + + from freqtrade.data.history.idatahandler import get_datahandler + dhc = get_datahandler(config['datadir'], config['dataformat_ohlcv']) + + paircombs = dhc.ohlcv_get_available_data( + config['datadir'], + config.get('trading_mode', TradingMode.SPOT) + ) + + for pair, timeframe, candle_type in paircombs: + if ':' in pair: + # already migrated + continue + new_pair = f"{pair}:{config['stake_currency']}" + dhc.rename_futures_data(pair, new_pair, timeframe, candle_type)