mirror of
https://github.com/freqtrade/freqtrade.git
synced 2024-09-20 01:21:11 +00:00
fix: ensure handle_onexchange_order works without false warnings
futures were not properly handled in this command. closes #10533
This commit is contained in:
parent
23510c80be
commit
331159a3d8
|
@ -542,7 +542,11 @@ class FreqtradeBot(LoggingMixin):
|
|||
)
|
||||
else:
|
||||
trade.exit_reason = prev_exit_reason
|
||||
total = self.wallets.get_total(trade.base_currency) if trade.base_currency else 0
|
||||
total = (
|
||||
self.wallets.get_owned(trade.pair, trade.base_currency)
|
||||
if trade.base_currency
|
||||
else 0
|
||||
)
|
||||
if total < trade.amount:
|
||||
if trade.fully_canceled_entry_order_count == len(trade.orders):
|
||||
logger.warning(
|
||||
|
|
|
@ -66,6 +66,17 @@ class Wallets:
|
|||
else:
|
||||
return 0
|
||||
|
||||
def get_owned(self, pair: str, base_currency: str) -> float:
|
||||
"""
|
||||
Get currently owned value.
|
||||
Designed to work across both spot and futures.
|
||||
"""
|
||||
if self._config.get("trading_mode", "spot") != TradingMode.FUTURES:
|
||||
return self.get_total(base_currency) or 0
|
||||
if pos := self._positions.get(pair):
|
||||
return pos.position
|
||||
return 0
|
||||
|
||||
def _update_dry(self) -> None:
|
||||
"""
|
||||
Update from database in dry-run mode
|
||||
|
|
|
@ -4909,7 +4909,7 @@ def test_handle_onexchange_order_changed_amount(
|
|||
leverage=1,
|
||||
)
|
||||
freqtrade.wallets = MagicMock()
|
||||
freqtrade.wallets.get_total = MagicMock(return_value=entry_order["amount"] * factor)
|
||||
freqtrade.wallets.get_owned = MagicMock(return_value=entry_order["amount"] * factor)
|
||||
|
||||
trade.orders.append(Order.parse_from_ccxt_object(entry_order, "ADA/USDT", entry_side(is_short)))
|
||||
Trade.session.add(trade)
|
||||
|
|
|
@ -65,6 +65,7 @@ def test_sync_wallet_at_boot(mocker, default_conf):
|
|||
assert freqtrade.wallets.get_free("GAS") == 0.270739
|
||||
assert freqtrade.wallets.get_used("GAS") == 0.1
|
||||
assert freqtrade.wallets.get_total("GAS") == 0.260439
|
||||
assert freqtrade.wallets.get_owned("GAS/USDT", "GAS") == 0.260439
|
||||
update_mock = mocker.patch("freqtrade.wallets.Wallets._update_live")
|
||||
freqtrade.wallets.update(False)
|
||||
assert update_mock.call_count == 0
|
||||
|
@ -74,6 +75,7 @@ def test_sync_wallet_at_boot(mocker, default_conf):
|
|||
assert freqtrade.wallets.get_free("NOCURRENCY") == 0
|
||||
assert freqtrade.wallets.get_used("NOCURRENCY") == 0
|
||||
assert freqtrade.wallets.get_total("NOCURRENCY") == 0
|
||||
assert freqtrade.wallets.get_owned("NOCURRENCY/USDT", "NOCURRENCY") == 0
|
||||
|
||||
|
||||
def test_sync_wallet_missing_data(mocker, default_conf):
|
||||
|
@ -336,6 +338,8 @@ def test_sync_wallet_futures_live(mocker, default_conf):
|
|||
assert "USDT" in freqtrade.wallets._wallets
|
||||
assert "ETH/USDT:USDT" in freqtrade.wallets._positions
|
||||
assert freqtrade.wallets._last_wallet_refresh is not None
|
||||
assert freqtrade.wallets.get_owned("ETH/USDT:USDT", "ETH") == 1000
|
||||
assert freqtrade.wallets.get_owned("SOL/USDT:USDT", "SOL") == 0
|
||||
|
||||
# Remove ETH/USDT:USDT position
|
||||
del mock_result[0]
|
||||
|
|
Loading…
Reference in New Issue
Block a user