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
@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:
+15 -10
View File
@@ -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:
+1 -1
View File
@@ -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 {}