Replace Nan with 0 or None in backtesting

part of #6224
This commit is contained in:
Matthias 2022-01-16 14:46:43 +01:00
parent dd37e5cfb8
commit 5bb48eaed0
2 changed files with 5 additions and 6 deletions

View File

@ -9,6 +9,7 @@ from copy import deepcopy
from datetime import datetime, timedelta, timezone
from typing import Any, Dict, List, Optional, Tuple
from numpy import nan
from pandas import DataFrame
from freqtrade.configuration import TimeRange, validate_config_consistency
@ -289,10 +290,12 @@ class Backtesting:
# To avoid using data from future, we use buy/sell signals shifted
# from the previous candle
for col in headers[5:]:
tag_col = col in ('enter_tag', 'exit_tag')
if col in df_analyzed.columns:
df_analyzed.loc[:, col] = df_analyzed.loc[:, col].shift(1)
df_analyzed.loc[:, col] = df_analyzed.loc[:, col].replace(
[nan], [0 if not tag_col else None]).shift(1)
else:
df_analyzed.loc[:, col] = 0 if col not in ('enter_tag', 'exit_tag') else None
df_analyzed.loc[:, col] = 0 if not tag_col else None
# Update dataprovider cache
self.dataprovider._set_cached_df(pair, self.timeframe, df_analyzed, CandleType.SPOT)

View File

@ -57,10 +57,6 @@ def _build_backtest_dataframe(data):
# Ensure floats are in place
for column in ['open', 'high', 'low', 'close', 'volume']:
frame[column] = frame[column].astype('float64')
if 'enter_tag' not in columns:
frame['enter_tag'] = None
if 'exit_tag' not in columns:
frame['exit_tag'] = None
# Ensure all candles make kindof sense
assert all(frame['low'] <= frame['close'])