From: Jérôme Benoit Date: Thu, 30 Apr 2026 22:14:55 +0000 (+0200) Subject: fix: workaround freqtrade 2026.4 date column dtype regression X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=8b32c1084a817dcdba815dd40a69933f1c039039;p=freqai-strategies.git fix: workaround freqtrade 2026.4 date column dtype regression Freqtrade 2026.4 (commit 2c5dc72) changed feather/parquet handlers to use .dt.as_unit("ms") instead of to_datetime(col, unit="ms", utc=True). This breaks when data files store dates as int64 epoch-ms, causing AttributeError in feature_engineering_standard. Use pd.to_datetime(col, utc=True) defensively to handle both int64 and datetime inputs. Ref: https://github.com/freqtrade/freqtrade/issues/13107 --- diff --git a/ReforceXY/user_data/strategies/RLAgentStrategy.py b/ReforceXY/user_data/strategies/RLAgentStrategy.py index 769e84c..815e5a1 100644 --- a/ReforceXY/user_data/strategies/RLAgentStrategy.py +++ b/ReforceXY/user_data/strategies/RLAgentStrategy.py @@ -4,7 +4,7 @@ from functools import reduce from typing import Any, Final, Literal, Optional import numpy as np - +import pandas as pd # import talib.abstract as ta from freqtrade.persistence import Trade from freqtrade.strategy import IStrategy @@ -55,7 +55,7 @@ class RLAgentStrategy(IStrategy): def feature_engineering_standard( self, dataframe: DataFrame, metadata: dict[str, Any], **kwargs ) -> DataFrame: - dates = dataframe.get("date") + dates = pd.to_datetime(dataframe["date"], utc=True) dataframe["%-day_of_week"] = (dates.dt.dayofweek + 1) / 7 dataframe["%-hour_of_day"] = (dates.dt.hour + 1) / 25 diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index c010530..2e5108d 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -16,18 +16,18 @@ from typing import ( ) import numpy as np +import pandas as pd import pandas_ta as pta import talib.abstract as ta from freqtrade.exchange import timeframe_to_minutes, timeframe_to_prev_date from freqtrade.persistence import Trade from freqtrade.strategy import AnnotationType, stoploss_from_absolute from freqtrade.strategy.interface import IStrategy +from LabelTransformer import COMBINED_AGGREGATIONS, get_label_column_config from pandas import DataFrame, Series, isna from scipy.stats import pearsonr, t from technical.pivots_points import pivots_points -from LabelTransformer import COMBINED_AGGREGATIONS, get_label_column_config - from Utils import ( DEFAULT_FIT_LIVE_PREDICTIONS_CANDLES, EXTREMA_COLUMN, @@ -724,7 +724,7 @@ class QuickAdapterV3(IStrategy): def feature_engineering_standard( self, dataframe: DataFrame, metadata: dict[str, Any], **kwargs ) -> DataFrame: - dates = dataframe.get("date") + dates = pd.to_datetime(dataframe["date"], utc=True) dataframe["%-day_of_week"] = (dates.dt.dayofweek + 1) / 7 dataframe["%-hour_of_day"] = (dates.dt.hour + 1) / 25