refactor: invert balance logic to simplify function

This commit is contained in:
Matthias
2026-02-12 19:51:26 +01:00
parent b190079aa8
commit b25defb8b9
+26 -33
View File
@@ -73,40 +73,33 @@ class Krakenfutures(Exchange):
# Only synthesize USD if stake_currency is USD # Only synthesize USD if stake_currency is USD
stake = str(self._config.get("stake_currency", "")).upper() stake = str(self._config.get("stake_currency", "")).upper()
if stake != "USD": if stake == "USD":
# Skip USD synthesis for non-USD stake currencies # Only synthesize if USD stake - flex only applies for these currencies.
balances.pop("info", None) # For flex accounts, synthesize USD balance from margin values
balances.pop("free", None) info = balances.get("info", {})
balances.pop("total", None) accounts = info.get("accounts", {}) if isinstance(info, dict) else {}
balances.pop("used", None) flex = accounts.get("flex", {}) if isinstance(accounts, dict) else {}
self._log_exchange_response("fetch_balance", balances, add_info=params)
return balances
# For flex accounts, synthesize USD balance from margin values if flex:
info = balances.get("info", {}) usd_free = self._safe_float(flex.get("availableMargin"))
accounts = info.get("accounts", {}) if isinstance(info, dict) else {} # Prefer marginEquity for consistency (same basis as availableMargin)
flex = accounts.get("flex", {}) if isinstance(accounts, dict) else {} raw_total = (
flex.get("marginEquity")
if flex: or flex.get("portfolioValue")
usd_free = self._safe_float(flex.get("availableMargin")) or flex.get("balanceValue")
# Prefer marginEquity for consistency (same basis as availableMargin) )
raw_total = ( usd_total = self._safe_float(raw_total)
flex.get("marginEquity") if usd_free is not None or usd_total is not None:
or flex.get("portfolioValue") # Use available value for both if only one is present
or flex.get("balanceValue") usd_free_value = usd_free if usd_free is not None else usd_total
) usd_total_value = usd_total if usd_total is not None else usd_free
usd_total = self._safe_float(raw_total) if usd_free_value is not None and usd_total_value is not None:
if usd_free is not None or usd_total is not None: usd_used = max(0.0, usd_total_value - usd_free_value)
# Use available value for both if only one is present balances["USD"] = {
usd_free_value = usd_free if usd_free is not None else usd_total "free": usd_free_value,
usd_total_value = usd_total if usd_total is not None else usd_free "used": usd_used,
if usd_free_value is not None and usd_total_value is not None: "total": usd_total_value,
usd_used = max(0.0, usd_total_value - usd_free_value) }
balances["USD"] = {
"free": usd_free_value,
"used": usd_used,
"total": usd_total_value,
}
# Remove additional info from ccxt results (same as base class) # Remove additional info from ccxt results (same as base class)
balances.pop("info", None) balances.pop("info", None)