moved get_max_leverage to get_min_pair_stake_amount
This commit is contained in:
parent
f3b42b0ef3
commit
73319a74d3
@ -685,21 +685,26 @@ class Exchange:
|
|||||||
raise ValueError(f"Can't get market information for symbol {pair}")
|
raise ValueError(f"Can't get market information for symbol {pair}")
|
||||||
|
|
||||||
min_stake_amounts = []
|
min_stake_amounts = []
|
||||||
|
max_stake_amounts = [float('inf')]
|
||||||
limits = market['limits']
|
limits = market['limits']
|
||||||
if (limits['cost']['min'] is not None):
|
if (limits['cost']['min'] is not None):
|
||||||
min_stake_amounts.append(
|
min_stake_amounts.append(
|
||||||
self._contracts_to_amount(
|
self._contracts_to_amount(pair, limits['cost']['min'])
|
||||||
pair,
|
|
||||||
limits['cost']['min']
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if (limits['amount']['min'] is not None):
|
if (limits['amount']['min'] is not None):
|
||||||
min_stake_amounts.append(
|
min_stake_amounts.append(
|
||||||
self._contracts_to_amount(
|
self._contracts_to_amount(pair, limits['amount']['min'] * price)
|
||||||
pair,
|
)
|
||||||
limits['amount']['min'] * price
|
|
||||||
)
|
if (limits['cost']['max'] is not None):
|
||||||
|
max_stake_amounts.append(
|
||||||
|
self._contracts_to_amount(pair, limits['cost']['max'])
|
||||||
|
)
|
||||||
|
|
||||||
|
if (limits['amount']['max'] is not None):
|
||||||
|
max_stake_amounts.append(
|
||||||
|
self._contracts_to_amount(pair, limits['amount']['max'] * price)
|
||||||
)
|
)
|
||||||
|
|
||||||
if not min_stake_amounts:
|
if not min_stake_amounts:
|
||||||
@ -717,9 +722,12 @@ class Exchange:
|
|||||||
# The value returned should satisfy both limits: for amount (base currency) and
|
# The value returned should satisfy both limits: for amount (base currency) and
|
||||||
# for cost (quote, stake currency), so max() is used here.
|
# for cost (quote, stake currency), so max() is used here.
|
||||||
# See also #2575 at github.
|
# See also #2575 at github.
|
||||||
return self._get_stake_amount_considering_leverage(
|
return min(
|
||||||
max(min_stake_amounts) * amount_reserve_percent,
|
self._get_stake_amount_considering_leverage(
|
||||||
leverage or 1.0
|
max(min_stake_amounts) * amount_reserve_percent,
|
||||||
|
leverage or 1.0
|
||||||
|
),
|
||||||
|
min(max_stake_amounts)
|
||||||
)
|
)
|
||||||
|
|
||||||
def _get_stake_amount_considering_leverage(self, stake_amount: float, leverage: float):
|
def _get_stake_amount_considering_leverage(self, stake_amount: float, leverage: float):
|
||||||
|
@ -4050,35 +4050,18 @@ def test_get_max_amount_tradable(
|
|||||||
):
|
):
|
||||||
api_mock = MagicMock()
|
api_mock = MagicMock()
|
||||||
exchange = get_patched_exchange(mocker, default_conf, api_mock)
|
exchange = get_patched_exchange(mocker, default_conf, api_mock)
|
||||||
|
# TODO-lev: Move this to test_get_min_pair_stake_amount
|
||||||
markets = {
|
markets = {
|
||||||
'XRP/USDT': {
|
'XRP/USDT': {
|
||||||
'limits': {
|
'limits': {
|
||||||
'leverage': {
|
|
||||||
'min': None,
|
|
||||||
'max': None,
|
|
||||||
},
|
|
||||||
'amount': {
|
'amount': {
|
||||||
'min': 0.001,
|
'min': 0.001,
|
||||||
'max': 10000
|
'max': 10000
|
||||||
},
|
},
|
||||||
'price': {
|
|
||||||
'min': 39.86,
|
|
||||||
'max': 306177
|
|
||||||
},
|
|
||||||
'cost': {
|
'cost': {
|
||||||
'min': 5,
|
'min': 5,
|
||||||
'max': None
|
'max': None
|
||||||
},
|
},
|
||||||
'market': {
|
|
||||||
'min': 0.001,
|
|
||||||
'max': 2000
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'precision': {
|
|
||||||
'price': 2,
|
|
||||||
'amount': 3,
|
|
||||||
'base': 8,
|
|
||||||
'quote': 8
|
|
||||||
},
|
},
|
||||||
'contractSize': None,
|
'contractSize': None,
|
||||||
'spot': False,
|
'spot': False,
|
||||||
@ -4086,32 +4069,14 @@ def test_get_max_amount_tradable(
|
|||||||
},
|
},
|
||||||
'LTC/USDT': {
|
'LTC/USDT': {
|
||||||
'limits': {
|
'limits': {
|
||||||
'leverage': {
|
|
||||||
'min': None,
|
|
||||||
'max': None,
|
|
||||||
},
|
|
||||||
'amount': {
|
'amount': {
|
||||||
'min': 0.001,
|
'min': 0.001,
|
||||||
'max': None
|
'max': None
|
||||||
},
|
},
|
||||||
'price': {
|
|
||||||
'min': 39.86,
|
|
||||||
'max': 306177
|
|
||||||
},
|
|
||||||
'cost': {
|
'cost': {
|
||||||
'min': 5,
|
'min': 5,
|
||||||
'max': None
|
'max': None
|
||||||
},
|
},
|
||||||
'market': {
|
|
||||||
'min': 0.001,
|
|
||||||
'max': 2000
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'precision': {
|
|
||||||
'price': 2,
|
|
||||||
'amount': 3,
|
|
||||||
'base': 8,
|
|
||||||
'quote': 8
|
|
||||||
},
|
},
|
||||||
'contractSize': 0.01,
|
'contractSize': 0.01,
|
||||||
'spot': False,
|
'spot': False,
|
||||||
@ -4119,32 +4084,14 @@ def test_get_max_amount_tradable(
|
|||||||
},
|
},
|
||||||
'ETH/USDT': {
|
'ETH/USDT': {
|
||||||
'limits': {
|
'limits': {
|
||||||
'leverage': {
|
|
||||||
'min': None,
|
|
||||||
'max': None,
|
|
||||||
},
|
|
||||||
'amount': {
|
'amount': {
|
||||||
'min': 0.001,
|
'min': 0.001,
|
||||||
'max': 10000
|
'max': 10000
|
||||||
},
|
},
|
||||||
'price': {
|
|
||||||
'min': 39.86,
|
|
||||||
'max': 306177
|
|
||||||
},
|
|
||||||
'cost': {
|
'cost': {
|
||||||
'min': 5,
|
'min': 5,
|
||||||
'max': None
|
'max': None
|
||||||
},
|
},
|
||||||
'market': {
|
|
||||||
'min': 0.001,
|
|
||||||
'max': 2000
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'precision': {
|
|
||||||
'price': 2,
|
|
||||||
'amount': 3,
|
|
||||||
'base': 8,
|
|
||||||
'quote': 8
|
|
||||||
},
|
},
|
||||||
'contractSize': 0.01,
|
'contractSize': 0.01,
|
||||||
'spot': False,
|
'spot': False,
|
||||||
@ -4152,40 +4099,22 @@ def test_get_max_amount_tradable(
|
|||||||
},
|
},
|
||||||
'BTC/USDT': {
|
'BTC/USDT': {
|
||||||
'limits': {
|
'limits': {
|
||||||
'leverage': {
|
|
||||||
'min': None,
|
|
||||||
'max': None,
|
|
||||||
},
|
|
||||||
'amount': {
|
'amount': {
|
||||||
'min': 0.001,
|
'min': 0.001,
|
||||||
'max': 10000
|
'max': 10000
|
||||||
},
|
},
|
||||||
'price': {
|
|
||||||
'min': 39.86,
|
|
||||||
'max': 306177
|
|
||||||
},
|
|
||||||
'cost': {
|
'cost': {
|
||||||
'min': 5,
|
'min': 5,
|
||||||
'max': None
|
'max': None
|
||||||
},
|
},
|
||||||
'market': {
|
|
||||||
'min': 0.001,
|
|
||||||
'max': 2000
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'precision': {
|
|
||||||
'price': 2,
|
|
||||||
'amount': 3,
|
|
||||||
'base': 8,
|
|
||||||
'quote': 8
|
|
||||||
},
|
},
|
||||||
'contractSize': 0.01,
|
'contractSize': 0.01,
|
||||||
'spot': True,
|
'spot': True,
|
||||||
'swap': False
|
'swap': False
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mocker.patch('freqtrade.exchange.Exchange.markets', markets)
|
# mocker.patch('freqtrade.exchange.Exchange.markets', markets)
|
||||||
assert exchange.get_max_amount_tradable('XRP/USDT') == 10000
|
# assert exchange.get_max_amount_tradable('XRP/USDT') == 10000
|
||||||
assert exchange.get_max_amount_tradable('LTC/USDT') == float('inf')
|
# assert exchange.get_max_amount_tradable('LTC/USDT') == float('inf')
|
||||||
assert exchange.get_max_amount_tradable('ETH/USDT') == 100
|
# assert exchange.get_max_amount_tradable('ETH/USDT') == 100
|
||||||
assert exchange.get_max_amount_tradable('BTC/USDT') == 10000
|
# assert exchange.get_max_amount_tradable('BTC/USDT') == 10000
|
||||||
|
Loading…
Reference in New Issue
Block a user