chore: use parent methods for proper error handling

This commit is contained in:
Matthias
2025-12-27 16:46:36 +01:00
parent bcd033bd0d
commit 45b9c8c53f
3 changed files with 23 additions and 16 deletions
+7 -5
View File
@@ -1826,16 +1826,16 @@ class Exchange:
return order return order
@retrier @retrier
def get_balances(self) -> CcxtBalances: def get_balances(self, params: dict | None = None) -> CcxtBalances:
try: try:
balances = self._api.fetch_balance() balances = self._api.fetch_balance(params or {})
# Remove additional info from ccxt results # Remove additional info from ccxt results
balances.pop("info", None) balances.pop("info", None)
balances.pop("free", None) balances.pop("free", None)
balances.pop("total", None) balances.pop("total", None)
balances.pop("used", None) balances.pop("used", None)
self._log_exchange_response("fetch_balance", balances) self._log_exchange_response("fetch_balance", balances, add_info=params)
return balances return balances
except ccxt.DDoSProtection as e: except ccxt.DDoSProtection as e:
raise DDosProtection(e) from e raise DDosProtection(e) from e
@@ -1847,7 +1847,9 @@ class Exchange:
raise OperationalException(e) from e raise OperationalException(e) from e
@retrier @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. Fetch positions from the exchange.
If no pair is given, all positions are returned. If no pair is given, all positions are returned.
@@ -1859,7 +1861,7 @@ class Exchange:
symbols = None symbols = None
if pair: if pair:
symbols = [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) self._log_exchange_response("fetch_positions", positions)
return positions return positions
except ccxt.DDoSProtection as e: except ccxt.DDoSProtection as e:
+15 -10
View File
@@ -9,7 +9,7 @@ from freqtrade.constants import BuySell
from freqtrade.enums import MarginMode, TradingMode from freqtrade.enums import MarginMode, TradingMode
from freqtrade.exceptions import ExchangeError, OperationalException from freqtrade.exceptions import ExchangeError, OperationalException
from freqtrade.exchange import Exchange 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 from freqtrade.util.datetime_helpers import dt_from_ts
@@ -99,13 +99,13 @@ class Hyperliquid(Exchange):
return True 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.""" """Fetch balances from default DEX and HIP-3 DEXes needed by tradable pairs."""
balances = super().get_balances() balances = super().get_balances()
dexes = self._get_configured_hip3_dexes()
for dex in self._get_configured_hip3_dexes(): for dex in dexes:
try: 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(): for currency, amount_info in dex_balance.items():
if currency in ["info", "free", "used", "total", "datetime", "timestamp"]: if currency in ["info", "free", "used", "total", "datetime", "timestamp"]:
@@ -121,18 +121,23 @@ class Hyperliquid(Exchange):
except Exception as e: except Exception as e:
logger.error(f"Could not fetch balance for HIP-3 DEX '{dex}': {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 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.""" """Fetch positions from default DEX and HIP-3 DEXes needed by tradable pairs."""
positions = super().fetch_positions(pair) positions = super().fetch_positions(pair)
dexes = self._get_configured_hip3_dexes()
for dex in self._get_configured_hip3_dexes(): for dex in dexes:
try: try:
positions.extend(self._api.fetch_positions(params={"dex": dex})) positions.extend(super().fetch_positions(pair, params={"dex": dex}))
except Exception as e: except Exception as e:
logger.error(f"Could not fetch positions from HIP-3 DEX '{dex}': {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 return positions
def get_max_leverage(self, pair: str, stake_amount: float | None) -> float: def get_max_leverage(self, pair: str, stake_amount: float | None) -> float:
+1 -1
View File
@@ -70,7 +70,7 @@ class Kraken(Exchange):
return consolidated return consolidated
@retrier @retrier
def get_balances(self) -> CcxtBalances: def get_balances(self, params: dict | None = None) -> CcxtBalances:
if self._config["dry_run"]: if self._config["dry_run"]:
return {} return {}