stable/freqtrade/plugins/pairlist/OffsetFilter.py

64 lines
2.2 KiB
Python
Raw Normal View History

2021-07-05 10:50:56 +00:00
"""
Offset pair list filter
"""
import logging
from typing import Any, Dict, List
2022-09-18 17:36:11 +00:00
from freqtrade.constants import Config
2021-07-05 10:50:56 +00:00
from freqtrade.exceptions import OperationalException
from freqtrade.exchange.types import Tickers
2021-07-05 10:50:56 +00:00
from freqtrade.plugins.pairlist.IPairList import IPairList
logger = logging.getLogger(__name__)
class OffsetFilter(IPairList):
def __init__(self, exchange, pairlistmanager,
2022-09-18 11:31:52 +00:00
config: Config, pairlistconfig: Dict[str, Any],
2021-07-05 10:50:56 +00:00
pairlist_pos: int) -> None:
super().__init__(exchange, pairlistmanager, config, pairlistconfig, pairlist_pos)
self._offset = pairlistconfig.get('offset', 0)
self._number_pairs = pairlistconfig.get('number_assets', 0)
2021-07-05 10:50:56 +00:00
if self._offset < 0:
raise OperationalException("OffsetFilter requires offset to be >= 0")
@property
def needstickers(self) -> bool:
"""
Boolean property defining if tickers are necessary.
If no Pairlist requires tickers, an empty Dict is passed
as tickers argument to filter_pairlist
"""
return False
def short_desc(self) -> str:
"""
Short whitelist method description - used for startup-messages
"""
if self._number_pairs:
return f"{self.name} - Taking {self._number_pairs} Pairs, starting from {self._offset}."
return f"{self.name} - Offsetting pairs by {self._offset}."
2021-07-05 10:50:56 +00:00
def filter_pairlist(self, pairlist: List[str], tickers: Tickers) -> List[str]:
2021-07-05 10:50:56 +00:00
"""
Filters and sorts pairlist and returns the whitelist again.
Called on each bot iteration - please use internal caching if necessary
:param pairlist: pairlist to filter or sort
:param tickers: Tickers (from exchange.get_tickers). May be cached.
2021-07-05 10:50:56 +00:00
:return: new whitelist
"""
if self._offset > len(pairlist):
self.log_once(f"Offset of {self._offset} is larger than " +
f"pair count of {len(pairlist)}", logger.warning)
2021-07-05 10:50:56 +00:00
pairs = pairlist[self._offset:]
if self._number_pairs:
pairs = pairs[:self._number_pairs]
2021-07-05 10:50:56 +00:00
self.log_once(f"Searching {len(pairs)} pairs: {pairs}", logger.info)
2021-07-05 10:50:56 +00:00
return pairs