moved okex.load_leverage_tiers to new method
This commit is contained in:
parent
79ddc9abaa
commit
b61cfada6d
@ -74,7 +74,6 @@ class Exchange:
|
|||||||
"mark_ohlcv_price": "mark",
|
"mark_ohlcv_price": "mark",
|
||||||
"mark_ohlcv_timeframe": "8h",
|
"mark_ohlcv_timeframe": "8h",
|
||||||
"ccxt_futures_name": "swap",
|
"ccxt_futures_name": "swap",
|
||||||
"can_fetch_multiple_tiers": True,
|
|
||||||
}
|
}
|
||||||
_ft_has: Dict = {}
|
_ft_has: Dict = {}
|
||||||
|
|
||||||
@ -1875,7 +1874,8 @@ class Exchange:
|
|||||||
|
|
||||||
@retrier
|
@retrier
|
||||||
def load_leverage_tiers(self) -> Dict[str, List[Dict]]:
|
def load_leverage_tiers(self) -> Dict[str, List[Dict]]:
|
||||||
if self.trading_mode == TradingMode.FUTURES and self.exchange_has('fetchLeverageTiers'):
|
if self.trading_mode == TradingMode.FUTURES:
|
||||||
|
if self.exchange_has('fetchLeverageTiers'):
|
||||||
try:
|
try:
|
||||||
return self._api.fetch_leverage_tiers()
|
return self._api.fetch_leverage_tiers()
|
||||||
except ccxt.DDoSProtection as e:
|
except ccxt.DDoSProtection as e:
|
||||||
@ -1887,6 +1887,31 @@ class Exchange:
|
|||||||
) from e
|
) from e
|
||||||
except ccxt.BaseError as e:
|
except ccxt.BaseError as e:
|
||||||
raise OperationalException(e) from e
|
raise OperationalException(e) from e
|
||||||
|
elif self.exchange_has('fetchMarketLeverageTiers'):
|
||||||
|
# * This is slow(~45s) on Okex, makes ~90 api calls to load all linear swap markets
|
||||||
|
markets = self.markets
|
||||||
|
symbols = []
|
||||||
|
|
||||||
|
for symbol, market in markets.items():
|
||||||
|
if (self.market_is_future(market)
|
||||||
|
and market['quote'] == self._config['stake_currency']):
|
||||||
|
symbols.append(symbol)
|
||||||
|
|
||||||
|
tiers: Dict[str, List[Dict]] = {}
|
||||||
|
|
||||||
|
# Be verbose here, as this delays startup by ~1 minute.
|
||||||
|
logger.info(
|
||||||
|
f"Initializing leverage_tiers for {len(symbols)} markets. "
|
||||||
|
"This will take about a minute.")
|
||||||
|
|
||||||
|
for symbol in sorted(symbols):
|
||||||
|
res = self._api.fetch_market_leverage_tiers(symbol)
|
||||||
|
tiers[symbol] = res[symbol]
|
||||||
|
logger.info(f"Done initializing {len(symbols)} markets.")
|
||||||
|
|
||||||
|
return tiers
|
||||||
|
else:
|
||||||
|
return {}
|
||||||
else:
|
else:
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@ class Okx(Exchange):
|
|||||||
"ohlcv_candle_limit": 300,
|
"ohlcv_candle_limit": 300,
|
||||||
"mark_ohlcv_timeframe": "4h",
|
"mark_ohlcv_timeframe": "4h",
|
||||||
"funding_fee_timeframe": "8h",
|
"funding_fee_timeframe": "8h",
|
||||||
"can_fetch_multiple_tiers": False,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_supported_trading_mode_margin_pairs: List[Tuple[TradingMode, MarginMode]] = [
|
_supported_trading_mode_margin_pairs: List[Tuple[TradingMode, MarginMode]] = [
|
||||||
@ -93,31 +92,3 @@ class Okx(Exchange):
|
|||||||
|
|
||||||
pair_tiers = self._leverage_tiers[pair]
|
pair_tiers = self._leverage_tiers[pair]
|
||||||
return pair_tiers[-1]['max'] / leverage
|
return pair_tiers[-1]['max'] / leverage
|
||||||
|
|
||||||
@retrier
|
|
||||||
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 = []
|
|
||||||
|
|
||||||
for symbol, market in markets.items():
|
|
||||||
if (self.market_is_future(market)
|
|
||||||
and market['quote'] == self._config['stake_currency']):
|
|
||||||
symbols.append(symbol)
|
|
||||||
|
|
||||||
tiers: Dict[str, List[Dict]] = {}
|
|
||||||
|
|
||||||
# Be verbose here, as this delays startup by ~1 minute.
|
|
||||||
logger.info(
|
|
||||||
f"Initializing leverage_tiers for {len(symbols)} markets. "
|
|
||||||
"This will take about a minute.")
|
|
||||||
|
|
||||||
for symbol in sorted(symbols):
|
|
||||||
res = self._api.fetch_leverage_tiers(symbol)
|
|
||||||
tiers[symbol] = res[symbol]
|
|
||||||
logger.info(f"Done initializing {len(symbols)} markets.")
|
|
||||||
|
|
||||||
return tiers
|
|
||||||
else:
|
|
||||||
return {}
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from unittest.mock import MagicMock # , PropertyMock
|
from unittest.mock import MagicMock, PropertyMock
|
||||||
|
|
||||||
from freqtrade.enums import MarginMode, TradingMode
|
from freqtrade.enums import MarginMode, TradingMode
|
||||||
from tests.conftest import get_patched_exchange
|
from tests.conftest import get_patched_exchange
|
||||||
@ -172,7 +172,11 @@ def test_get_max_pair_stake_amount_okx(default_conf, mocker, leverage_tiers):
|
|||||||
|
|
||||||
def test_load_leverage_tiers_okx(default_conf, mocker, markets):
|
def test_load_leverage_tiers_okx(default_conf, mocker, markets):
|
||||||
api_mock = MagicMock()
|
api_mock = MagicMock()
|
||||||
api_mock.fetch_leverage_tiers = MagicMock(side_effect=[
|
type(api_mock).has = PropertyMock(return_value={
|
||||||
|
'fetchLeverageTiers': False,
|
||||||
|
'fetchMarketLeverageTiers': True,
|
||||||
|
})
|
||||||
|
api_mock.fetch_market_leverage_tiers = MagicMock(side_effect=[
|
||||||
{
|
{
|
||||||
'ADA/USDT:USDT': [
|
'ADA/USDT:USDT': [
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user