Allow pairs with prefix in MarketCapPairList

This commit is contained in:
mrpabloyeah
2025-08-04 11:54:03 +02:00
parent 79fc80957f
commit 1ea6a99c48

View File

@@ -118,6 +118,19 @@ class MarketCapPairList(IPairList):
},
}
def get_markets_cache(self):
markets = self._marketcap_cache.get("markets")
if not markets:
markets = [
k
for k in self._exchange.get_markets(
quote_currencies=[self._stake_currency], tradable_only=True, active_only=True
).keys()
]
self._marketcap_cache["markets"] = markets.copy()
return markets.copy()
def gen_pairlist(self, tickers: Tickers) -> list[str]:
"""
Generate the pairlist
@@ -133,12 +146,8 @@ class MarketCapPairList(IPairList):
else:
# Use fresh pairlist
# Check if pair quote currency equals to the stake currency.
_pairlist = [
k
for k in self._exchange.get_markets(
quote_currencies=[self._stake_currency], tradable_only=True, active_only=True
).keys()
]
_pairlist = self.get_markets_cache()
# No point in testing for blacklisted pairs...
_pairlist = self.verify_blacklist(_pairlist, logger.info)
@@ -197,13 +206,24 @@ class MarketCapPairList(IPairList):
pair_format += f":{self._stake_currency.upper()}"
top_marketcap = marketcap_list[: self._max_rank :]
markets = self.get_markets_cache()
for mc_pair in top_marketcap:
test_pair = f"{mc_pair.upper()}/{pair_format}"
if test_pair in pairlist and test_pair not in filtered_pairlist:
filtered_pairlist.append(test_pair)
if len(filtered_pairlist) == self._number_assets:
break
test_prefix_1000 = f"1000{test_pair}" # Binance
test_prefix_k = f"k{test_pair}" # Hyperliquid
if not any(p.startswith(test_pair) for p in filtered_pairlist):
if any(p.startswith(test_pair) for p in pairlist):
filtered_pairlist.append(test_pair)
elif not any(p.startswith(test_pair) for p in markets):
if any(p.startswith(test_prefix_1000) for p in pairlist):
filtered_pairlist.append(test_prefix_1000)
elif any(p.startswith(test_prefix_k) for p in pairlist):
filtered_pairlist.append(test_prefix_k)
if len(filtered_pairlist) == self._number_assets:
break
if len(filtered_pairlist) > 0:
return filtered_pairlist