Add resiliancy against not having a analyzed dataframe yet

This commit is contained in:
Matthias 2020-08-24 20:38:01 +02:00
parent c59a1be154
commit c0654f3caf
2 changed files with 39 additions and 17 deletions

View File

@ -657,19 +657,21 @@ class RPC:
return self._freqtrade.edge.accepted_pairs() return self._freqtrade.edge.accepted_pairs()
def _convert_dataframe_to_dict(self, strategy: str, pair: str, dataframe: DataFrame, def _convert_dataframe_to_dict(self, strategy: str, pair: str, dataframe: DataFrame,
last_analyzed: datetime): last_analyzed: datetime) -> Dict[str, Any]:
has_content = len(dataframe) != 0
if has_content:
dataframe.loc[:, '__date_ts'] = dataframe.loc[:, 'date'].astype(int64) // 1000 // 1000 dataframe.loc[:, '__date_ts'] = dataframe.loc[:, 'date'].astype(int64) // 1000 // 1000
# Move open to seperate column when signal for easy plotting # Move open to seperate column when signal for easy plotting
if 'buy' in dataframe.columns: if 'buy' in dataframe.columns:
buy_mask = (dataframe['buy'] == 1) buy_mask = (dataframe['buy'] == 1)
dataframe.loc[buy_mask, '_buy_signal_open'] = dataframe.loc[buy_mask, 'open'] dataframe.loc[buy_mask, '_buy_signal_open'] = dataframe.loc[buy_mask, 'open']
if 'sell' in dataframe.columns: if 'sell' in dataframe.columns:
sell_mask = (dataframe['sell'] == 1) sell_mask = (dataframe['sell'] == 1)
dataframe.loc[sell_mask, '_sell_signal_open'] = dataframe.loc[sell_mask, 'open'] dataframe.loc[sell_mask, '_sell_signal_open'] = dataframe.loc[sell_mask, 'open']
dataframe = dataframe.replace({NAN: None}) dataframe = dataframe.replace({NAN: None})
return { res = {
'pair': pair, 'pair': pair,
'strategy': strategy, 'strategy': strategy,
'columns': list(dataframe.columns), 'columns': list(dataframe.columns),
@ -677,17 +679,27 @@ class RPC:
'length': len(dataframe), 'length': len(dataframe),
'last_analyzed': last_analyzed, 'last_analyzed': last_analyzed,
'last_analyzed_ts': int(last_analyzed.timestamp()), 'last_analyzed_ts': int(last_analyzed.timestamp()),
'data_start': str(dataframe.iloc[0]['date']), 'data_start': '',
'data_start_ts': int(dataframe.iloc[0]['__date_ts']), 'data_start_ts': 0,
'data_stop': str(dataframe.iloc[-1]['date']), 'data_stop': '',
'data_stop_ts': int(dataframe.iloc[-1]['__date_ts']), 'data_stop_ts': 0,
} }
if has_content:
res.update({
'data_start': str(dataframe.iloc[0]['date']),
'data_start_ts': int(dataframe.iloc[0]['__date_ts']),
'data_stop': str(dataframe.iloc[-1]['date']),
'data_stop_ts': int(dataframe.iloc[-1]['__date_ts']),
})
return res
def _analysed_dataframe(self, pair: str, timeframe: str, limit: int) -> Dict[str, Any]: def _analysed_dataframe(self, pair: str, timeframe: str, limit: int) -> Dict[str, Any]:
_data, last_analyzed = self._freqtrade.dataprovider.get_analyzed_dataframe(pair, timeframe) _data, last_analyzed = self._freqtrade.dataprovider.get_analyzed_dataframe(
pair, timeframe)
_data = _data.copy()
if limit: if limit:
_data = _data.iloc[-limit:].copy() _data = _data.iloc[-limit:]
return self._convert_dataframe_to_dict(self._freqtrade.config['strategy'], return self._convert_dataframe_to_dict(self._freqtrade.config['strategy'],
pair, _data, last_analyzed) pair, _data, last_analyzed)

View File

@ -817,6 +817,16 @@ def test_api_pair_candles(botclient, ohlcv_history):
ftbot, client = botclient ftbot, client = botclient
timeframe = '5m' timeframe = '5m'
amount = 2 amount = 2
rc = client_get(client,
f"{BASE_URI}/pair_candles?limit={amount}&pair=XRP%2FBTC&timeframe={timeframe}")
assert_response(rc)
assert 'columns' in rc.json
assert 'data_start_ts' in rc.json
assert 'data_start' in rc.json
assert 'data_stop' in rc.json
assert 'data_stop_ts' in rc.json
assert len(rc.json['data']) == 0
ohlcv_history['sma'] = ohlcv_history['close'].rolling(2).mean() ohlcv_history['sma'] = ohlcv_history['close'].rolling(2).mean()
ohlcv_history['buy'] = 0 ohlcv_history['buy'] = 0
ohlcv_history.iloc[1]['buy'] = 1 ohlcv_history.iloc[1]['buy'] = 1