Dataprovider caching and trimming to timerange of historical informative.
This commit is contained in:
parent
adef5d89f3
commit
f705293353
@ -14,7 +14,8 @@ from freqtrade.constants import ListPairsWithTimeframes, PairWithTimeframe
|
|||||||
from freqtrade.data.history import load_pair_history
|
from freqtrade.data.history import load_pair_history
|
||||||
from freqtrade.enums import RunMode
|
from freqtrade.enums import RunMode
|
||||||
from freqtrade.exceptions import ExchangeError, OperationalException
|
from freqtrade.exceptions import ExchangeError, OperationalException
|
||||||
from freqtrade.exchange import Exchange
|
from freqtrade.exchange import Exchange, timeframe_to_seconds
|
||||||
|
from freqtrade.configuration import TimeRange
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@ -31,6 +32,7 @@ class DataProvider:
|
|||||||
self._pairlists = pairlists
|
self._pairlists = pairlists
|
||||||
self.__cached_pairs: Dict[PairWithTimeframe, Tuple[DataFrame, datetime]] = {}
|
self.__cached_pairs: Dict[PairWithTimeframe, Tuple[DataFrame, datetime]] = {}
|
||||||
self.__slice_index: Optional[int] = None
|
self.__slice_index: Optional[int] = None
|
||||||
|
self.__cached_pairs_backtesting: Dict[PairWithTimeframe, DataFrame] = {}
|
||||||
|
|
||||||
def _set_dataframe_max_index(self, limit_index: int):
|
def _set_dataframe_max_index(self, limit_index: int):
|
||||||
"""
|
"""
|
||||||
@ -62,11 +64,20 @@ class DataProvider:
|
|||||||
:param pair: pair to get the data for
|
:param pair: pair to get the data for
|
||||||
:param timeframe: timeframe to get data for
|
:param timeframe: timeframe to get data for
|
||||||
"""
|
"""
|
||||||
return load_pair_history(pair=pair,
|
saved_pair = (pair, timeframe)
|
||||||
timeframe=timeframe or self._config['timeframe'],
|
if saved_pair not in self.__cached_pairs_backtesting:
|
||||||
datadir=self._config['datadir'],
|
timerange = TimeRange.parse_timerange(None if self._config.get(
|
||||||
data_format=self._config.get('dataformat_ohlcv', 'json')
|
'timerange') is None else str(self._config.get('timerange')))
|
||||||
)
|
# Move informative start time respecting startup_candle_count
|
||||||
|
timerange.subtract_start(timeframe_to_seconds(timeframe) * self._config.get('startup_candle_count', 0))
|
||||||
|
self.__cached_pairs_backtesting[saved_pair] = load_pair_history(
|
||||||
|
pair=pair,
|
||||||
|
timeframe=timeframe or self._config['timeframe'],
|
||||||
|
datadir=self._config['datadir'],
|
||||||
|
timerange=timerange,
|
||||||
|
data_format=self._config.get('dataformat_ohlcv', 'json')
|
||||||
|
)
|
||||||
|
return self.__cached_pairs_backtesting[saved_pair].copy()
|
||||||
|
|
||||||
def get_pair_dataframe(self, pair: str, timeframe: str = None) -> DataFrame:
|
def get_pair_dataframe(self, pair: str, timeframe: str = None) -> DataFrame:
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user