wallet amount for futures

This commit is contained in:
Sam Germain 2022-02-16 07:12:24 -06:00 committed by Matthias
parent fd936e26ae
commit f67e0bd6dd
2 changed files with 34 additions and 2 deletions

View File

@ -342,7 +342,7 @@ class Exchange:
def get_pair_base_currency(self, pair: str) -> str:
"""
Return a pair's quote currency
Return a pair's base currency
"""
return self.markets.get(pair, {}).get('base', '')
@ -1158,6 +1158,39 @@ class Exchange:
balances.pop("total", None)
balances.pop("used", None)
if self.trading_mode == TradingMode.FUTURES:
open_orders_response: List[dict] = self._api.fetch_open_orders()
open_orders: dict = {}
for order in open_orders_response:
symbol: str = order['symbol']
open_orders[symbol] = order
positions: List[dict] = self._api.fetch_positions()
for position in positions:
symbol = position['symbol']
market: dict = self.markets[symbol]
size: float = self._contracts_to_amount(symbol, position['contracts'])
side: str = position['side']
if size > 0:
if symbol in open_orders:
order_amount: float = open_orders[symbol]['remaining']
else:
order_amount = 0
if side == 'short':
currency: str = market['quote']
else:
currency = market['base']
if currency in balances:
balances[currency] = {
'free': size - order_amount,
'used': order_amount,
'total': size,
}
return balances
except ccxt.DDoSProtection as e:
raise DDosProtection(e) from e

View File

@ -1338,7 +1338,6 @@ class FreqtradeBot(LoggingMixin):
trade_base_currency = self.exchange.get_pair_base_currency(pair)
wallet_amount = self.wallets.get_free(trade_base_currency)
logger.debug(f"{pair} - Wallet: {wallet_amount} - Trade-amount: {amount}")
# TODO-lev: Get wallet amount + value of positions
if wallet_amount >= amount or self.trading_mode == TradingMode.FUTURES:
# A safe exit amount isn't needed for futures, you can just exit/close the position
return amount