diff --git a/freqtrade/constants.py b/freqtrade/constants.py index 9a8d17909..91186ff43 100644 --- a/freqtrade/constants.py +++ b/freqtrade/constants.py @@ -50,6 +50,15 @@ DEFAULT_DATAFRAME_COLUMNS = ['date', 'open', 'high', 'low', 'close', 'volume'] # Don't modify sequence of DEFAULT_TRADES_COLUMNS # it has wide consequences for stored trades files DEFAULT_TRADES_COLUMNS = ['timestamp', 'id', 'type', 'side', 'price', 'amount', 'cost'] +TRADES_DTYPES = { + 'timestamp': 'int64', + 'id': 'str', + 'type': 'str', + 'side': 'str', + 'price': 'float64', + 'amount': 'float64', + 'cost': 'float64', +} TRADING_MODES = ['spot', 'margin', 'futures'] MARGIN_MODES = ['cross', 'isolated', ''] diff --git a/freqtrade/data/converter.py b/freqtrade/data/converter.py index 69ceed90e..5594f3dc4 100644 --- a/freqtrade/data/converter.py +++ b/freqtrade/data/converter.py @@ -10,7 +10,8 @@ import numpy as np import pandas as pd from pandas import DataFrame, to_datetime -from freqtrade.constants import DEFAULT_DATAFRAME_COLUMNS, DEFAULT_TRADES_COLUMNS, Config, TradeList +from freqtrade.constants import (DEFAULT_DATAFRAME_COLUMNS, DEFAULT_TRADES_COLUMNS, TRADES_DTYPES, + Config, TradeList) from freqtrade.enums import CandleType, TradingMode @@ -231,9 +232,10 @@ def trades_list_to_df(trades: TradeList): :param trades: List of Lists with constants.DEFAULT_TRADES_COLUMNS as columns """ if not trades: - return DataFrame(columns=DEFAULT_TRADES_COLUMNS) + return DataFrame(columns=DEFAULT_TRADES_COLUMNS).astype(TRADES_DTYPES) df = DataFrame(trades, columns=DEFAULT_TRADES_COLUMNS) - return df + + return df.astype(TRADES_DTYPES) def trades_to_ohlcv(trades: DataFrame, timeframe: str) -> DataFrame: diff --git a/freqtrade/data/history/idatahandler.py b/freqtrade/data/history/idatahandler.py index db0f7ade7..af6f427a4 100644 --- a/freqtrade/data/history/idatahandler.py +++ b/freqtrade/data/history/idatahandler.py @@ -15,7 +15,7 @@ from pandas import DataFrame, to_datetime from freqtrade import misc from freqtrade.configuration import TimeRange -from freqtrade.constants import ListPairsWithTimeframes, TradeList +from freqtrade.constants import TRADES_DTYPES, ListPairsWithTimeframes, TradeList from freqtrade.data.converter import (clean_ohlcv_dataframe, trades_df_remove_duplicates, trim_dataframe) from freqtrade.enums import CandleType, TradingMode @@ -218,6 +218,7 @@ 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) return trades diff --git a/tests/conftest.py b/tests/conftest.py index 4d0377796..732fffd8f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -14,7 +14,7 @@ import pytest from freqtrade import constants from freqtrade.commands import Arguments -from freqtrade.data.converter import ohlcv_to_dataframe +from freqtrade.data.converter import ohlcv_to_dataframe, trades_list_to_df from freqtrade.edge import PairInfo from freqtrade.enums import CandleType, MarginMode, RunMode, SignalDirection, TradingMode from freqtrade.exchange import Exchange @@ -2352,8 +2352,8 @@ def trades_history(): @pytest.fixture(scope="function") def trades_history_df(trades_history): - trades = pd.DataFrame(trades_history, columns=constants.DEFAULT_TRADES_COLUMNS) - trades['timestamp'] = pd.to_datetime(trades['timestamp'], unit='ms', utc=True) + trades = trades_list_to_df(trades_history) + trades['date'] = pd.to_datetime(trades['timestamp'], unit='ms', utc=True) return trades