diff --git a/freqtrade/exchange/gateio.py b/freqtrade/exchange/gateio.py index 1c5b43cb7..0007b0f09 100644 --- a/freqtrade/exchange/gateio.py +++ b/freqtrade/exchange/gateio.py @@ -31,7 +31,7 @@ class Gateio(Exchange): # TradingMode.SPOT always supported and not required in this list # (TradingMode.MARGIN, MarginMode.CROSS), # (TradingMode.FUTURES, MarginMode.CROSS), - (TradingMode.FUTURES, MarginMode.ISOLATED) + # (TradingMode.FUTURES, MarginMode.ISOLATED) ] def validate_ordertypes(self, order_types: Dict) -> None: diff --git a/freqtrade/exchange/okx.py b/freqtrade/exchange/okx.py index 09bb48aa6..ddbb85ea7 100644 --- a/freqtrade/exchange/okx.py +++ b/freqtrade/exchange/okx.py @@ -65,6 +65,7 @@ class Okx(Exchange): return pair_tiers[-1]['max'] / leverage def load_leverage_tiers(self) -> Dict[str, List[Dict]]: + # * This is slow(~45s) on Okex, must make 90-some api calls to load all linear swap markets if self.trading_mode == TradingMode.FUTURES: markets = self.markets symbols = [] @@ -74,11 +75,13 @@ class Okx(Exchange): and market['quote'] == self._config['stake_currency']): symbols.append(symbol) - tiers = {} + tiers: Dict[str, List[Dict]] = {} + for symbol in symbols: res = self._api.fetchLeverageTiers(symbol) - res_symbol = res[symbol] - tiers[symbol] = self.parse_leverage_tier(res[symbol]) + tiers[symbol] = [] + for tier in res[symbol]: + tiers[symbol].append(self.parse_leverage_tier(tier)) return tiers else: diff --git a/tests/exchange/test_binance.py b/tests/exchange/test_binance.py index 64c16d5e7..cb516e0d0 100644 --- a/tests/exchange/test_binance.py +++ b/tests/exchange/test_binance.py @@ -151,7 +151,6 @@ def test_stoploss_order_dry_run_binance(default_conf, mocker): def test_stoploss_adjust_binance( mocker, default_conf, - leverage_tiers, sl1, sl2, sl3, diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index a4aaa06f6..0de8ddfbc 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -689,7 +689,7 @@ def test_validate_stakecurrency_error(default_conf, mocker, caplog): def test_get_quote_currencies(default_conf, mocker): ex = get_patched_exchange(mocker, default_conf) - assert set(ex.get_quote_currencies()) == set(['USD', 'ETH', 'BTC', 'USDT']) + assert set(ex.get_quote_currencies()) == set(['USD', 'ETH', 'BTC', 'USDT', 'BUSD']) @pytest.mark.parametrize('pair,expected', [ @@ -3233,6 +3233,7 @@ def test_market_is_tradable( 'future': futures, 'swap': futures, 'margin': margin, + 'linear': True, **(add_dict), } assert ex.market_is_tradable(market) == expected_result @@ -3497,10 +3498,11 @@ def test_set_margin_mode(mocker, default_conf, margin_mode): ("okx", TradingMode.FUTURES, MarginMode.CROSS, True), ("binance", TradingMode.FUTURES, MarginMode.ISOLATED, False), - ("gateio", TradingMode.FUTURES, MarginMode.ISOLATED, False), + # ("gateio", TradingMode.FUTURES, MarginMode.ISOLATED, False), ("okx", TradingMode.FUTURES, MarginMode.ISOLATED, False), # * Remove once implemented + ("gateio", TradingMode.FUTURES, MarginMode.ISOLATED, True), ("binance", TradingMode.MARGIN, MarginMode.CROSS, True), ("binance", TradingMode.FUTURES, MarginMode.CROSS, True), ("kraken", TradingMode.MARGIN, MarginMode.CROSS, True), @@ -4351,6 +4353,7 @@ def test_get_maintenance_ratio_and_amt( default_conf['margin_mode'] = 'isolated' mocker.patch('freqtrade.exchange.Exchange.exchange_has', return_value=True) exchange = get_patched_exchange(mocker, default_conf, api_mock) + exchange._leverage_tiers = leverage_tiers exchange.get_maintenance_ratio_and_amt(pair, value) == (mmr, maintAmt) diff --git a/tests/exchange/test_okx.py b/tests/exchange/test_okx.py index 388d8b510..597c75632 100644 --- a/tests/exchange/test_okx.py +++ b/tests/exchange/test_okx.py @@ -1,7 +1,7 @@ from unittest.mock import MagicMock # , PropertyMock +from freqtrade.enums import MarginMode, TradingMode from tests.conftest import get_patched_exchange -from freqtrade.enums import TradingMode, MarginMode def test_get_maintenance_ratio_and_amt_okx(