3838 _create_and_merge_informative_pair ,
3939 _format_pair_name ,
4040)
41+ from freqtrade .strategy .strategy_validation import StrategyResultValidator
4142from freqtrade .strategy .strategy_wrapper import strategy_safe_wrapper
4243from freqtrade .util import dt_now
4344from freqtrade .wallets import Wallets
@@ -1213,13 +1214,13 @@ def analyze_pair(self, pair: str) -> None:
12131214 return
12141215
12151216 try :
1216- df_len , df_close , df_date = self . preserve_df (dataframe )
1217+ validator = StrategyResultValidator (dataframe , self . disable_dataframe_checks )
12171218
12181219 dataframe = strategy_safe_wrapper (self ._analyze_ticker_internal , message = "" )(
12191220 dataframe , {"pair" : pair }
12201221 )
12211222
1222- self .assert_df (dataframe , df_len , df_close , df_date )
1223+ validator .assert_df (dataframe )
12231224 except StrategyError as error :
12241225 logger .warning (f"Unable to analyze candle (OHLCV) data for pair { pair } : { error } " )
12251226 return
@@ -1236,31 +1237,6 @@ def analyze(self, pairs: list[str]) -> None:
12361237 for pair in pairs :
12371238 self .analyze_pair (pair )
12381239
1239- @staticmethod
1240- def preserve_df (dataframe : DataFrame ) -> tuple [int , float , datetime ]:
1241- """keep some data for dataframes"""
1242- return len (dataframe ), dataframe ["close" ].iloc [- 1 ], dataframe ["date" ].iloc [- 1 ]
1243-
1244- def assert_df (self , dataframe : DataFrame , df_len : int , df_close : float , df_date : datetime ):
1245- """
1246- Ensure dataframe (length, last candle) was not modified, and has all elements we need.
1247- """
1248- message_template = "Dataframe returned from strategy has mismatching {}."
1249- message = ""
1250- if dataframe is None :
1251- message = "No dataframe returned (return statement missing?)."
1252- elif df_len != len (dataframe ):
1253- message = message_template .format ("length" )
1254- elif df_close != dataframe ["close" ].iloc [- 1 ]:
1255- message = message_template .format ("last close price" )
1256- elif df_date != dataframe ["date" ].iloc [- 1 ]:
1257- message = message_template .format ("last date" )
1258- if message :
1259- if self .disable_dataframe_checks :
1260- logger .warning (message )
1261- else :
1262- raise StrategyError (message )
1263-
12641240 def get_latest_candle (
12651241 self ,
12661242 pair : str ,
0 commit comments