diff --git a/freqtrade/data/btanalysis/bt_fileutils.py b/freqtrade/data/btanalysis/bt_fileutils.py index a97d5bef3..2e6b23662 100644 --- a/freqtrade/data/btanalysis/bt_fileutils.py +++ b/freqtrade/data/btanalysis/bt_fileutils.py @@ -308,7 +308,7 @@ def get_backtest_market_change(filename: Path, include_ts: bool = True) -> pd.Da else: df = pd.read_feather(filename) if include_ts: - df.loc[:, "__date_ts"] = df.loc[:, "date"].astype(np.int64) // 1000 // 1000 + df.loc[:, "__date_ts"] = df.loc[:, "date"].dt.as_unit("ms").astype(np.int64) return df @@ -326,7 +326,7 @@ def get_backtest_wallet_change(filename: Path, strategy_name: str) -> pd.DataFra data = load_file_from_zip(filename, f"{filename.stem}_{strategy_name}_wallet.feather") df = pd.read_feather(BytesIO(data)) - df.loc[:, "__date_ts"] = df.loc[:, "date"].astype(np.int64) // 1000 // 1000 + df.loc[:, "__date_ts"] = df.loc[:, "date"].dt.as_unit("ms").astype(np.int64) return df except ValueError: pass diff --git a/freqtrade/data/history/datahandlers/jsondatahandler.py b/freqtrade/data/history/datahandlers/jsondatahandler.py index 1a33b3e2f..e2ab5c408 100644 --- a/freqtrade/data/history/datahandlers/jsondatahandler.py +++ b/freqtrade/data/history/datahandlers/jsondatahandler.py @@ -35,8 +35,8 @@ class JsonDataHandler(IDataHandler): filename = self._pair_data_filename(self._datadir, pair, timeframe, candle_type) self.create_dir_if_needed(filename) _data = data.copy() - # Convert date to int - _data["date"] = _data["date"].astype(np.int64) // 1000 // 1000 + # Convert date to int (milliseconds) + _data["date"] = _data["date"].dt.as_unit("ms").astype(np.int64) # Reset index, select only appropriate columns and save as json _data.reset_index(drop=True).loc[:, self._columns].to_json( diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index 63f00a22d..82c66de0c 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -794,7 +794,7 @@ class RPC: results = read_sql("wallet_history", con=Trade.session.bind, parse_dates=["timestamp"]) results = results.rename({"timestamp": "date"}, axis=1) - results.loc[:, "__date_ts"] = results.loc[:, "date"].astype("int64") // 1000 // 1000 + results.loc[:, "__date_ts"] = results.loc[:, "date"].dt.as_unit("ms").astype("int64") # Exclude non-bot managed for now results_filtered = results.loc[results["bot_managed"]] @@ -1536,7 +1536,7 @@ class RPC: df_cols = [col for col in dataframe_columns if col in cols_set] dataframe = dataframe.loc[:, df_cols] - dataframe.loc[:, "__date_ts"] = dataframe.loc[:, "date"].astype(int64) // 1000 // 1000 + dataframe.loc[:, "__date_ts"] = dataframe.loc[:, "date"].dt.as_unit("ms").astype(int64) # Move signal close to separate column when signal for easy plotting for sig_type in signals.keys(): if sig_type in dataframe.columns: diff --git a/tests/conftest.py b/tests/conftest.py index 93d34fe18..a92144659 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -207,7 +207,7 @@ def generate_test_data( def generate_test_data_raw(timeframe: str, size: int, start: str = "2020-07-05", random_seed=42): """Generates data in the ohlcv format used by ccxt""" df = generate_test_data(timeframe, size, start, random_seed) - df["date"] = df.loc[:, "date"].astype(np.int64) // 1000 // 1000 + df["date"] = df.loc[:, "date"].dt.as_unit("ms").astype(np.int64) return list(list(x) for x in zip(*(df[x].values.tolist() for x in df.columns), strict=False))