From a87e2567372852702fda3a97744935d8490111f6 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 3 Dec 2021 12:12:33 +0100 Subject: [PATCH] Add candleType enum --- freqtrade/data/history/hdf5datahandler.py | 22 +++++++++++++--------- freqtrade/data/history/idatahandler.py | 10 ++++++++-- freqtrade/data/history/jsondatahandler.py | 21 +++++++++++++-------- freqtrade/enums/__init__.py | 1 + freqtrade/enums/candletype.py | 13 +++++++++++++ 5 files changed, 48 insertions(+), 19 deletions(-) create mode 100644 freqtrade/enums/candletype.py diff --git a/freqtrade/data/history/hdf5datahandler.py b/freqtrade/data/history/hdf5datahandler.py index e8fcad70d..906a7ea6c 100644 --- a/freqtrade/data/history/hdf5datahandler.py +++ b/freqtrade/data/history/hdf5datahandler.py @@ -9,6 +9,7 @@ import pandas as pd from freqtrade.configuration import TimeRange from freqtrade.constants import (DEFAULT_DATAFRAME_COLUMNS, DEFAULT_TRADES_COLUMNS, ListPairsWithTimeframes, TradeList) +from freqtrade.enums.candletype import CandleType from .idatahandler import IDataHandler @@ -39,24 +40,27 @@ class HDF5DataHandler(IDataHandler): if match and len(match.groups()) > 1] @classmethod - def ohlcv_get_pairs(cls, datadir: Path, timeframe: str, candle_type: str = '') -> List[str]: + def ohlcv_get_pairs( + cls, + datadir: Path, + timeframe: str, + candle_type: CandleType = CandleType.SPOT_ + ) -> List[str]: """ Returns a list of all pairs with ohlcv data available in this datadir for the specified timeframe :param datadir: Directory to search for ohlcv files :param timeframe: Timeframe to search pairs for - :param candle_type: '', mark, index, premiumIndex, or funding_rate + :param candle_type: Any of the enum CandleType (must match your trading mode!) :return: List of Pairs """ - - if candle_type: + candle = "" + if candle_type not in (CandleType.SPOT, CandleType.SPOT_): datadir = datadir.joinpath('futures') - candle_type = f"-{candle_type}" - else: - candle_type = "" + candle = f"-{candle_type}" - _tmp = [re.search(r'^(\S+)(?=\-' + timeframe + candle_type + '.h5)', p.name) - for p in datadir.glob(f"*{timeframe}{candle_type}.h5")] + _tmp = [re.search(r'^(\S+)(?=\-' + timeframe + candle + '.h5)', p.name) + for p in datadir.glob(f"*{timeframe}{candle}.h5")] # Check if regex found something and only return these results return [match[0].replace('_', '/') for match in _tmp if match] diff --git a/freqtrade/data/history/idatahandler.py b/freqtrade/data/history/idatahandler.py index bb5e83c5d..dbf93e787 100644 --- a/freqtrade/data/history/idatahandler.py +++ b/freqtrade/data/history/idatahandler.py @@ -17,6 +17,7 @@ from freqtrade import misc from freqtrade.configuration import TimeRange from freqtrade.constants import ListPairsWithTimeframes, TradeList from freqtrade.data.converter import clean_ohlcv_dataframe, trades_remove_duplicates, trim_dataframe +from freqtrade.enums.candletype import CandleType from freqtrade.exchange import timeframe_to_seconds @@ -47,13 +48,18 @@ class IDataHandler(ABC): """ @abstractclassmethod - def ohlcv_get_pairs(cls, datadir: Path, timeframe: str, candle_type: str = '') -> List[str]: + def ohlcv_get_pairs( + cls, + datadir: Path, + timeframe: str, + candle_type: CandleType = CandleType.SPOT_ + ) -> List[str]: """ Returns a list of all pairs with ohlcv data available in this datadir for the specified timeframe :param datadir: Directory to search for ohlcv files :param timeframe: Timeframe to search pairs for - :param candle_type: '', mark, index, premiumIndex, or funding_rate + :param candle_type: Any of the enum CandleType (must match your trading mode!) :return: List of Pairs """ diff --git a/freqtrade/data/history/jsondatahandler.py b/freqtrade/data/history/jsondatahandler.py index 00ba5d095..2a8b1093c 100644 --- a/freqtrade/data/history/jsondatahandler.py +++ b/freqtrade/data/history/jsondatahandler.py @@ -10,6 +10,7 @@ from freqtrade import misc from freqtrade.configuration import TimeRange from freqtrade.constants import DEFAULT_DATAFRAME_COLUMNS, ListPairsWithTimeframes, TradeList from freqtrade.data.converter import trades_dict_to_list +from freqtrade.enums.candletype import CandleType from .idatahandler import IDataHandler @@ -40,23 +41,27 @@ class JsonDataHandler(IDataHandler): if match and len(match.groups()) > 1] @classmethod - def ohlcv_get_pairs(cls, datadir: Path, timeframe: str, candle_type: str = '') -> List[str]: + def ohlcv_get_pairs( + cls, + datadir: Path, + timeframe: str, + candle_type: CandleType = CandleType.SPOT_ + ) -> List[str]: """ Returns a list of all pairs with ohlcv data available in this datadir for the specified timeframe :param datadir: Directory to search for ohlcv files :param timeframe: Timeframe to search pairs for - :param candle_type: '', mark, index, premiumIndex, or funding_rate + :param candle_type: Any of the enum CandleType (must match your trading mode!) :return: List of Pairs """ - if candle_type: + candle = "" + if candle_type not in (CandleType.SPOT, CandleType.SPOT_): datadir = datadir.joinpath('futures') - candle_type = f"-{candle_type}" - else: - candle_type = "" + candle = f"-{candle_type}" - _tmp = [re.search(r'^(\S+)(?=\-' + timeframe + candle_type + '.json)', p.name) - for p in datadir.glob(f"*{timeframe}{candle_type}.{cls._get_file_extension()}")] + _tmp = [re.search(r'^(\S+)(?=\-' + timeframe + candle + '.json)', p.name) + for p in datadir.glob(f"*{timeframe}{candle}.{cls._get_file_extension()}")] # Check if regex found something and only return these results return [match[0].replace('_', '/') for match in _tmp if match] diff --git a/freqtrade/enums/__init__.py b/freqtrade/enums/__init__.py index e9d166258..f2fee4792 100644 --- a/freqtrade/enums/__init__.py +++ b/freqtrade/enums/__init__.py @@ -1,5 +1,6 @@ # flake8: noqa: F401 from freqtrade.enums.backteststate import BacktestState +from freqtrade.enums.candletype import CandleType from freqtrade.enums.collateral import Collateral from freqtrade.enums.rpcmessagetype import RPCMessageType from freqtrade.enums.runmode import NON_UTIL_MODES, OPTIMIZE_MODES, TRADING_MODES, RunMode diff --git a/freqtrade/enums/candletype.py b/freqtrade/enums/candletype.py new file mode 100644 index 000000000..b4052a212 --- /dev/null +++ b/freqtrade/enums/candletype.py @@ -0,0 +1,13 @@ +from enum import Enum + + +class CandleType(str, Enum): + """Enum to distinguish candle types""" + SPOT = "spot" + SPOT_ = "" + FUTURES = "futures" + MARK = "mark" + INDEX = "index" + PREMIUMINDEX = "premiumIndex" + # TODO-lev: not sure this belongs here, as the datatype is really different + FUNDING_RATE = "funding_rate"