From 45b9c8c53f51a1b1f6b9f3192661aac394563f75 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 27 Dec 2025 16:46:36 +0100 Subject: [PATCH] chore: use parent methods for proper error handling --- freqtrade/exchange/exchange.py | 12 +++++++----- freqtrade/exchange/hyperliquid.py | 25 +++++++++++++++---------- freqtrade/exchange/kraken.py | 2 +- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 9d6807fa2..2c26df993 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -1826,16 +1826,16 @@ class Exchange: return order @retrier - def get_balances(self) -> CcxtBalances: + def get_balances(self, params: dict | None = None) -> CcxtBalances: try: - balances = self._api.fetch_balance() + balances = self._api.fetch_balance(params or {}) # Remove additional info from ccxt results balances.pop("info", None) balances.pop("free", None) balances.pop("total", None) balances.pop("used", None) - self._log_exchange_response("fetch_balance", balances) + self._log_exchange_response("fetch_balance", balances, add_info=params) return balances except ccxt.DDoSProtection as e: raise DDosProtection(e) from e @@ -1847,7 +1847,9 @@ class Exchange: raise OperationalException(e) from e @retrier - def fetch_positions(self, pair: str | None = None) -> list[CcxtPosition]: + def fetch_positions( + self, pair: str | None = None, params: dict | None = None + ) -> list[CcxtPosition]: """ Fetch positions from the exchange. If no pair is given, all positions are returned. @@ -1859,7 +1861,7 @@ class Exchange: symbols = None if pair: symbols = [pair] - positions: list[CcxtPosition] = self._api.fetch_positions(symbols) + positions: list[CcxtPosition] = self._api.fetch_positions(symbols, params=params or {}) self._log_exchange_response("fetch_positions", positions) return positions except ccxt.DDoSProtection as e: diff --git a/freqtrade/exchange/hyperliquid.py b/freqtrade/exchange/hyperliquid.py index ceb13d92c..72152df36 100644 --- a/freqtrade/exchange/hyperliquid.py +++ b/freqtrade/exchange/hyperliquid.py @@ -9,7 +9,7 @@ from freqtrade.constants import BuySell from freqtrade.enums import MarginMode, TradingMode from freqtrade.exceptions import ExchangeError, OperationalException from freqtrade.exchange import Exchange -from freqtrade.exchange.exchange_types import CcxtOrder, CcxtPosition, FtHas +from freqtrade.exchange.exchange_types import CcxtBalances, CcxtOrder, CcxtPosition, FtHas from freqtrade.util.datetime_helpers import dt_from_ts @@ -99,13 +99,13 @@ class Hyperliquid(Exchange): return True - def get_balances(self) -> dict: + def get_balances(self, params: dict | None = None) -> CcxtBalances: """Fetch balances from default DEX and HIP-3 DEXes needed by tradable pairs.""" balances = super().get_balances() - - for dex in self._get_configured_hip3_dexes(): + dexes = self._get_configured_hip3_dexes() + for dex in dexes: try: - dex_balance = self._api.fetch_balance({"dex": dex}) + dex_balance = super().get_balances(params={"dex": dex}) for currency, amount_info in dex_balance.items(): if currency in ["info", "free", "used", "total", "datetime", "timestamp"]: @@ -121,18 +121,23 @@ class Hyperliquid(Exchange): except Exception as e: logger.error(f"Could not fetch balance for HIP-3 DEX '{dex}': {e}") + if dexes: + self._log_exchange_response("fetch_balance", balances, add_info="combined") return balances - def fetch_positions(self, pair: str | None = None) -> list[CcxtPosition]: + def fetch_positions( + self, pair: str | None = None, params: dict | None = None + ) -> list[CcxtPosition]: """Fetch positions from default DEX and HIP-3 DEXes needed by tradable pairs.""" positions = super().fetch_positions(pair) - - for dex in self._get_configured_hip3_dexes(): + dexes = self._get_configured_hip3_dexes() + for dex in dexes: try: - positions.extend(self._api.fetch_positions(params={"dex": dex})) + positions.extend(super().fetch_positions(pair, params={"dex": dex})) except Exception as e: logger.error(f"Could not fetch positions from HIP-3 DEX '{dex}': {e}") - + if dexes: + self._log_exchange_response("fetch_positions", positions, add_info="combined") return positions def get_max_leverage(self, pair: str, stake_amount: float | None) -> float: diff --git a/freqtrade/exchange/kraken.py b/freqtrade/exchange/kraken.py index 60efdf954..949f02530 100644 --- a/freqtrade/exchange/kraken.py +++ b/freqtrade/exchange/kraken.py @@ -70,7 +70,7 @@ class Kraken(Exchange): return consolidated @retrier - def get_balances(self) -> CcxtBalances: + def get_balances(self, params: dict | None = None) -> CcxtBalances: if self._config["dry_run"]: return {}