Trim dataframe, not tickerlist

This commit is contained in:
Matthias 2019-12-25 15:07:49 +01:00
parent 866908d2ca
commit db520a09ee
3 changed files with 12 additions and 31 deletions

View File

@ -37,7 +37,7 @@ class IDataHandler(ABC):
:param pair: Pair to load data for :param pair: Pair to load data for
:param timeframe: Ticker timeframe (e.g. "5m") :param timeframe: Ticker timeframe (e.g. "5m")
:param timerange: Limit data to be loaded to this timerange :param timerange: Limit data to be loaded to this timerange
:param fill_up_missing: Fill missing values with "No action"-candles :param fill_missing: Fill missing values with "No action"-candles
:param drop_incomplete: Drop last candle assuming it may be incomplete. :param drop_incomplete: Drop last candle assuming it may be incomplete.
:param startup_candles: Additional candles to load at the start of the period :param startup_candles: Additional candles to load at the start of the period
:return: DataFrame with ohlcv data, or empty DataFrame :return: DataFrame with ohlcv data, or empty DataFrame
@ -75,30 +75,3 @@ class IDataHandler(ABC):
if timerange.stoptype == 'date' and pairdata[-1][0] < timerange.stopts * 1000: if timerange.stoptype == 'date' and pairdata[-1][0] < timerange.stopts * 1000:
logger.warning('Missing data at end for pair %s, data ends at %s', logger.warning('Missing data at end for pair %s, data ends at %s',
pair, arrow.get(pairdata[-1][0] // 1000).strftime('%Y-%m-%d %H:%M:%S')) pair, arrow.get(pairdata[-1][0] // 1000).strftime('%Y-%m-%d %H:%M:%S'))
@staticmethod
def trim_tickerlist(tickerlist: List[Dict], timerange: TimeRange) -> List[Dict]:
"""
TODO: investigate if this is needed ... we can probably cover this in a dataframe
Trim tickerlist based on given timerange
"""
if not tickerlist:
return tickerlist
start_index = 0
stop_index = len(tickerlist)
if timerange.starttype == 'date':
while (start_index < len(tickerlist) and
tickerlist[start_index][0] < timerange.startts * 1000):
start_index += 1
if timerange.stoptype == 'date':
while (stop_index > 0 and
tickerlist[stop_index-1][0] > timerange.stopts * 1000):
stop_index -= 1
if start_index > stop_index:
raise ValueError(f'The timerange [{timerange.startts},{timerange.stopts}] is incorrect')
return tickerlist[start_index:stop_index]

View File

@ -8,6 +8,7 @@ from pandas import DataFrame, read_json, to_datetime
from freqtrade import misc from freqtrade import misc
from freqtrade.configuration import TimeRange from freqtrade.configuration import TimeRange
from freqtrade.data.converter import clean_ohlcv_dataframe from freqtrade.data.converter import clean_ohlcv_dataframe
from freqtrade.data.history import trim_dataframe
from .idatahandler import IDataHandler from .idatahandler import IDataHandler
@ -54,9 +55,15 @@ class JsonDataHandler(IDataHandler):
drop_incomplete: bool = True, drop_incomplete: bool = True,
) -> DataFrame: ) -> DataFrame:
""" """
Load data for one pair from disk. Internal method used to load data for one pair from disk.
Implements the loading and conversation to a Pandas dataframe. Implements the loading and conversation to a Pandas dataframe.
:return: Dataframe :param pair: Pair to load data for
:param timeframe: Ticker timeframe (e.g. "5m")
:param timerange: Limit data to be loaded to this timerange
:param fill_missing: Fill missing values with "No action"-candles
:param drop_incomplete: Drop last candle assuming it may be incomplete.
:param startup_candles: Additional candles to load at the start of the period
:return: DataFrame with ohlcv data, or empty DataFrame
""" """
filename = self._pair_data_filename(self._datadir, pair, timeframe) filename = self._pair_data_filename(self._datadir, pair, timeframe)
pairdata = read_json(filename, orient='values') pairdata = read_json(filename, orient='values')
@ -67,7 +74,7 @@ class JsonDataHandler(IDataHandler):
infer_datetime_format=True) infer_datetime_format=True)
if timerange: if timerange:
pairdata = IDataHandler.trim_tickerlist(pairdata, timerange) pairdata = trim_dataframe(pairdata, timerange)
return clean_ohlcv_dataframe(pairdata, timeframe, return clean_ohlcv_dataframe(pairdata, timeframe,
pair=pair, pair=pair,

View File

@ -285,6 +285,7 @@ def convert_ohlcv_format(config: Dict[str, Any], convert_from: str, convert_to:
for timeframe in timeframes: for timeframe in timeframes:
for pair in config['pairs']: for pair in config['pairs']:
data = src.ohlcv_load(pair=pair, timeframe=timeframe, data = src.ohlcv_load(pair=pair, timeframe=timeframe,
timerange=None,
fill_missing=False, fill_missing=False,
drop_incomplete=False, drop_incomplete=False,
startup_candles=0) startup_candles=0)