From 7577613882e563a8d3efa078950c641864bcbf70 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 18 Aug 2023 07:43:29 +0200 Subject: [PATCH] Extract trades df type conversion --- freqtrade/data/converter.py | 21 +++++++++++++++++---- freqtrade/data/history/idatahandler.py | 8 ++++---- freqtrade/data/history/jsondatahandler.py | 2 +- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/freqtrade/data/converter.py b/freqtrade/data/converter.py index 5594f3dc4..c19d89f8f 100644 --- a/freqtrade/data/converter.py +++ b/freqtrade/data/converter.py @@ -226,16 +226,29 @@ def trades_dict_to_list(trades: List[Dict]) -> TradeList: return [[t[col] for col in DEFAULT_TRADES_COLUMNS] for t in trades] -def trades_list_to_df(trades: TradeList): +def trades_convert_types(trades: DataFrame) -> DataFrame: + """ + Convert Trades dtypes and add 'date' column + """ + trades = trades.astype(TRADES_DTYPES) + trades['date'] = to_datetime(trades['timestamp'], unit='ms', utc=True) + return trades + + +def trades_list_to_df(trades: TradeList, convert: bool = True): """ convert trades list to dataframe :param trades: List of Lists with constants.DEFAULT_TRADES_COLUMNS as columns """ if not trades: - return DataFrame(columns=DEFAULT_TRADES_COLUMNS).astype(TRADES_DTYPES) - df = DataFrame(trades, columns=DEFAULT_TRADES_COLUMNS) + df = DataFrame(columns=DEFAULT_TRADES_COLUMNS) + else: + df = DataFrame(trades, columns=DEFAULT_TRADES_COLUMNS) - return df.astype(TRADES_DTYPES) + if convert: + df = trades_convert_types(df) + + return df def trades_to_ohlcv(trades: DataFrame, timeframe: str) -> DataFrame: diff --git a/freqtrade/data/history/idatahandler.py b/freqtrade/data/history/idatahandler.py index af6f427a4..a840d8f93 100644 --- a/freqtrade/data/history/idatahandler.py +++ b/freqtrade/data/history/idatahandler.py @@ -16,8 +16,8 @@ from pandas import DataFrame, to_datetime from freqtrade import misc from freqtrade.configuration import TimeRange from freqtrade.constants import TRADES_DTYPES, ListPairsWithTimeframes, TradeList -from freqtrade.data.converter import (clean_ohlcv_dataframe, trades_df_remove_duplicates, - trim_dataframe) +from freqtrade.data.converter import (clean_ohlcv_dataframe, trades_convert_types, + trades_df_remove_duplicates, trim_dataframe) from freqtrade.enums import CandleType, TradingMode from freqtrade.exchange import timeframe_to_seconds @@ -218,8 +218,8 @@ class IDataHandler(ABC): :return: List of trades """ trades = trades_df_remove_duplicates(self._trades_load(pair, timerange=timerange)) - trades = trades.astype(TRADES_DTYPES) - trades['date'] = to_datetime(trades['timestamp'], unit='ms', utc=True) + + trades = trades_convert_types(trades) return trades def trades_load_aslist(self, pair: str, timerange: Optional[TimeRange] = None) -> TradeList: diff --git a/freqtrade/data/history/jsondatahandler.py b/freqtrade/data/history/jsondatahandler.py index 1ca83e0be..54d289bc0 100644 --- a/freqtrade/data/history/jsondatahandler.py +++ b/freqtrade/data/history/jsondatahandler.py @@ -134,7 +134,7 @@ class JsonDataHandler(IDataHandler): logger.info("Old trades format detected - converting") tradesdata = trades_dict_to_list(tradesdata) pass - return trades_list_to_df(tradesdata) + return trades_list_to_df(tradesdata, convert=False) @classmethod def _get_file_extension(cls):