From e5f6ce97249630ce6a1c798bcf8a5045f6468df7 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 10 Jul 2024 19:40:19 +0200 Subject: [PATCH] Fix "needed_candle_for*" logic we can't compare this to "required_candle_call_count" - that'd yield 1 ... --- freqtrade/exchange/exchange.py | 27 ++++++++++++--------------- freqtrade/rpc/rpc.py | 2 ++ 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 481ddad22..e4e4e0e23 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -2617,25 +2617,22 @@ class Exchange: # fetch Trade data stuff - def needed_candle_ms(self, timeframe: str, candle_type: CandleType): - one_call = timeframe_to_msecs(timeframe) * self.ohlcv_candle_limit(timeframe, candle_type) - move_to = one_call * self.required_candle_call_count - now = timeframe_to_next_date(timeframe) - return int((now - timedelta(seconds=move_to // 1000)).timestamp() * 1000) + def needed_candle_for_trades_ms(self, timeframe: str, candle_type: CandleType) -> int: + candle_limit = self.ohlcv_candle_limit(timeframe, candle_type) + tf_s = timeframe_to_seconds(timeframe) + candles_fetched = candle_limit * self.required_candle_call_count - def needed_candle_for_trades_ms(self, timeframe: str, candle_type: CandleType): - one_call = timeframe_to_msecs(timeframe) * self.ohlcv_candle_limit(timeframe, candle_type) - config_orderflow = self._config["orderflow"] - required_candles = config_orderflow["max_candles"] - required_candles = ( - required_candles - if required_candles < self.required_candle_call_count - else self.required_candle_call_count + max_candles = self._config["orderflow"]["max_candles"] + + required_candles = min(max_candles, candles_fetched) + move_to = ( + tf_s * candle_limit * required_candles + if required_candles > candle_limit + else (max_candles + 1) * tf_s ) - move_to = one_call * required_candles now = timeframe_to_next_date(timeframe) - return int((now - timedelta(seconds=move_to // 1000)).timestamp() * 1000) + return int((now - timedelta(seconds=move_to)).timestamp() * 1000) def _process_trades_df( self, diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index 3513b7207..3067a5e97 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -1317,6 +1317,8 @@ class RPC: # replace NaT with `None` dataframe[date_column] = dataframe[date_column].astype(object).replace({NaT: None}) + # TODO: Temporary workaround for orderflow: drop orderflow columns + dataframe = dataframe.drop(["orderflow", "trades", "imbalances"], axis=1, errors="ignore") dataframe = dataframe.replace({inf: None, -inf: None, NAN: None}) res = {