refactor: invert balance logic to simplify function
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user