]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
fix: workaround freqtrade 2026.4 date column dtype regression
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 30 Apr 2026 22:14:55 +0000 (00:14 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 30 Apr 2026 22:14:55 +0000 (00:14 +0200)
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

ReforceXY/user_data/strategies/RLAgentStrategy.py
quickadapter/user_data/strategies/QuickAdapterV3.py

index 769e84c6f86ebe64ed22e9cdbd4ccf1f88dcb4c3..815e5a14609436ffcdce2c396c1c65872f6f661c 100644 (file)
@@ -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
 
index c0105302faee8d8587ccfce936875e54c8d24507..2e5108dd14fccd665b67971237c25d8724a679b9 100644 (file)
@@ -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