diff --git a/freqtrade/plugins/pairlist/MarketCapPairList.py b/freqtrade/plugins/pairlist/MarketCapPairList.py index 95f0e2805..05f2e6a0a 100644 --- a/freqtrade/plugins/pairlist/MarketCapPairList.py +++ b/freqtrade/plugins/pairlist/MarketCapPairList.py @@ -34,8 +34,11 @@ class MarketCapPairList(IPairList): self._stake_currency = self._config["stake_currency"] self._number_assets = self._pairlistconfig["number_assets"] self._max_rank = self._pairlistconfig.get("max_rank", 30) - self._refresh_period = self._pairlistconfig.get("refresh_period", 86400) - self._marketcap_cache: TTLCache = TTLCache(maxsize=1, ttl=self._refresh_period) + self._refresh_period = self._pairlistconfig.get( + "refresh_period", 86400) + self._category = self._pairlistconfig.get("category", None) + self._marketcap_cache: TTLCache = TTLCache( + maxsize=1, ttl=self._refresh_period) self._def_candletype = self._config["candle_type_def"] _coingecko_config = self._config.get("coingecko", {}) @@ -46,7 +49,8 @@ class MarketCapPairList(IPairList): ) if self._max_rank > 250: - raise OperationalException("This filter only support marketcap rank up to 250.") + raise OperationalException( + "This filter only support marketcap rank up to 250.") @property def needstickers(self) -> bool: @@ -85,6 +89,12 @@ class MarketCapPairList(IPairList): "description": "Max rank of assets", "help": "Maximum rank of assets to use from the pairlist", }, + "category": { + "type": "string", + "default": None, + "description": "The Category", + "help": "Th Category of the coin e.g layer-1 default None", + }, "refresh_period": { "type": "number", "default": 86400, @@ -133,6 +143,7 @@ class MarketCapPairList(IPairList): marketcap_list = self._marketcap_cache.get("marketcap") if marketcap_list is None: + data = self._coingecko.get_coins_markets( vs_currency="usd", order="market_cap_desc", @@ -140,6 +151,7 @@ class MarketCapPairList(IPairList): page="1", sparkline="false", locale="en", + **({"category": self._category} if self._category else {}) ) if data: marketcap_list = [row["symbol"] for row in data] @@ -153,11 +165,11 @@ class MarketCapPairList(IPairList): if market == "futures": pair_format += f":{self._stake_currency.upper()}" - top_marketcap = marketcap_list[: self._max_rank :] + top_marketcap = marketcap_list[: self._max_rank:] for mc_pair in top_marketcap: test_pair = f"{mc_pair.upper()}/{pair_format}" - if test_pair in pairlist: + 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