freqai bt - fix tests
This commit is contained in:
parent
2b89f643b7
commit
2e30bdb9b2
@ -1308,14 +1308,17 @@ class FreqaiDataKitchen:
|
|||||||
pairs: List[str] = self.freqai_config["feature_parameters"].get(
|
pairs: List[str] = self.freqai_config["feature_parameters"].get(
|
||||||
"include_corr_pairlist", [])
|
"include_corr_pairlist", [])
|
||||||
|
|
||||||
if not prediction_dataframe.empty:
|
for tf in tfs:
|
||||||
dataframe = prediction_dataframe.copy()
|
if tf not in base_dataframes:
|
||||||
for tf in tfs:
|
|
||||||
base_dataframes[tf] = pd.DataFrame()
|
base_dataframes[tf] = pd.DataFrame()
|
||||||
|
if not corr_dataframes.keys():
|
||||||
for p in pairs:
|
for p in pairs:
|
||||||
if p not in corr_dataframes:
|
if p not in corr_dataframes:
|
||||||
corr_dataframes[p] = {}
|
corr_dataframes[p] = {}
|
||||||
corr_dataframes[p][tf] = pd.DataFrame()
|
corr_dataframes[p][tf] = pd.DataFrame()
|
||||||
|
|
||||||
|
if not prediction_dataframe.empty:
|
||||||
|
dataframe = prediction_dataframe.copy()
|
||||||
else:
|
else:
|
||||||
dataframe = base_dataframes[self.config["timeframe"]].copy()
|
dataframe = base_dataframes[self.config["timeframe"]].copy()
|
||||||
|
|
||||||
|
@ -271,14 +271,19 @@ class IFreqaiModel(ABC):
|
|||||||
|
|
||||||
self.pair_it += 1
|
self.pair_it += 1
|
||||||
train_it = 0
|
train_it = 0
|
||||||
|
pair = metadata["pair"]
|
||||||
|
|
||||||
populate_indicators = True
|
populate_indicators = True
|
||||||
|
timerange = TimeRange.parse_timerange(self.dk.full_timerange)
|
||||||
|
self.dd.load_all_pair_histories(timerange, self.dk)
|
||||||
|
corr_df, base_df = self.dd.get_base_and_corr_dataframes(timerange, pair, dk)
|
||||||
|
|
||||||
# Loop enforcing the sliding window training/backtesting paradigm
|
# Loop enforcing the sliding window training/backtesting paradigm
|
||||||
# tr_train is the training time range e.g. 1 historical month
|
# tr_train is the training time range e.g. 1 historical month
|
||||||
# tr_backtest is the backtesting time range e.g. the week directly
|
# tr_backtest is the backtesting time range e.g. the week directly
|
||||||
# following tr_train. Both of these windows slide through the
|
# following tr_train. Both of these windows slide through the
|
||||||
# entire backtest
|
# entire backtest
|
||||||
for tr_train, tr_backtest in zip(dk.training_timeranges, dk.backtesting_timeranges):
|
for tr_train, tr_backtest in zip(dk.training_timeranges, dk.backtesting_timeranges):
|
||||||
pair = metadata["pair"]
|
|
||||||
(_, _, _) = self.dd.get_pair_dict_info(pair)
|
(_, _, _) = self.dd.get_pair_dict_info(pair)
|
||||||
train_it += 1
|
train_it += 1
|
||||||
total_trains = len(dk.backtesting_timeranges)
|
total_trains = len(dk.backtesting_timeranges)
|
||||||
@ -308,7 +313,8 @@ class IFreqaiModel(ABC):
|
|||||||
else:
|
else:
|
||||||
if populate_indicators:
|
if populate_indicators:
|
||||||
dataframe = self.dk.use_strategy_to_populate_indicators(
|
dataframe = self.dk.use_strategy_to_populate_indicators(
|
||||||
strategy, prediction_dataframe=dataframe, pair=metadata["pair"]
|
strategy, prediction_dataframe=dataframe, pair=metadata["pair"],
|
||||||
|
corr_dataframes=corr_df, base_dataframes=base_df
|
||||||
)
|
)
|
||||||
populate_indicators = False
|
populate_indicators = False
|
||||||
|
|
||||||
@ -323,7 +329,14 @@ class IFreqaiModel(ABC):
|
|||||||
if not self.model_exists(dk):
|
if not self.model_exists(dk):
|
||||||
dk.find_features(dataframe_train)
|
dk.find_features(dataframe_train)
|
||||||
dk.find_labels(dataframe_train)
|
dk.find_labels(dataframe_train)
|
||||||
self.model = self.train(dataframe_train, pair, dk)
|
|
||||||
|
try:
|
||||||
|
self.model = self.train(dataframe_train, pair, dk)
|
||||||
|
except Exception as msg:
|
||||||
|
logger.warning(
|
||||||
|
f"Training {pair} raised exception {msg.__class__.__name__}. "
|
||||||
|
f"Message: {msg}, skipping.")
|
||||||
|
|
||||||
self.dd.pair_dict[pair]["trained_timestamp"] = int(
|
self.dd.pair_dict[pair]["trained_timestamp"] = int(
|
||||||
tr_train.stopts)
|
tr_train.stopts)
|
||||||
if self.plot_features:
|
if self.plot_features:
|
||||||
|
@ -232,15 +232,14 @@ def test_start_backtesting(mocker, freqai_conf, model, num_files, strat, caplog)
|
|||||||
timerange = TimeRange.parse_timerange("20180110-20180130")
|
timerange = TimeRange.parse_timerange("20180110-20180130")
|
||||||
freqai.dd.load_all_pair_histories(timerange, freqai.dk)
|
freqai.dd.load_all_pair_histories(timerange, freqai.dk)
|
||||||
sub_timerange = TimeRange.parse_timerange("20180110-20180130")
|
sub_timerange = TimeRange.parse_timerange("20180110-20180130")
|
||||||
corr_df, base_df = freqai.dd.get_base_and_corr_dataframes(sub_timerange, "LTC/BTC", freqai.dk)
|
_, base_df = freqai.dd.get_base_and_corr_dataframes(sub_timerange, "LTC/BTC", freqai.dk)
|
||||||
|
df = base_df[freqai_conf["timeframe"]]
|
||||||
|
|
||||||
df = freqai.dk.use_strategy_to_populate_indicators(strategy, corr_df, base_df, "LTC/BTC")
|
|
||||||
df = freqai.cache_corr_pairlist_dfs(df, freqai.dk)
|
|
||||||
for i in range(5):
|
for i in range(5):
|
||||||
df[f'%-constant_{i}'] = i
|
df[f'%-constant_{i}'] = i
|
||||||
|
|
||||||
metadata = {"pair": "LTC/BTC"}
|
metadata = {"pair": "LTC/BTC"}
|
||||||
freqai.start_backtesting(df, metadata, freqai.dk)
|
freqai.start_backtesting(df, metadata, freqai.dk, strategy)
|
||||||
model_folders = [x for x in freqai.dd.full_path.iterdir() if x.is_dir()]
|
model_folders = [x for x in freqai.dd.full_path.iterdir() if x.is_dir()]
|
||||||
|
|
||||||
assert len(model_folders) == num_files
|
assert len(model_folders) == num_files
|
||||||
@ -271,12 +270,11 @@ def test_start_backtesting_subdaily_backtest_period(mocker, freqai_conf):
|
|||||||
timerange = TimeRange.parse_timerange("20180110-20180130")
|
timerange = TimeRange.parse_timerange("20180110-20180130")
|
||||||
freqai.dd.load_all_pair_histories(timerange, freqai.dk)
|
freqai.dd.load_all_pair_histories(timerange, freqai.dk)
|
||||||
sub_timerange = TimeRange.parse_timerange("20180110-20180130")
|
sub_timerange = TimeRange.parse_timerange("20180110-20180130")
|
||||||
corr_df, base_df = freqai.dd.get_base_and_corr_dataframes(sub_timerange, "LTC/BTC", freqai.dk)
|
_, base_df = freqai.dd.get_base_and_corr_dataframes(sub_timerange, "LTC/BTC", freqai.dk)
|
||||||
|
df = base_df[freqai_conf["timeframe"]]
|
||||||
df = freqai.dk.use_strategy_to_populate_indicators(strategy, corr_df, base_df, "LTC/BTC")
|
|
||||||
|
|
||||||
metadata = {"pair": "LTC/BTC"}
|
metadata = {"pair": "LTC/BTC"}
|
||||||
freqai.start_backtesting(df, metadata, freqai.dk)
|
freqai.start_backtesting(df, metadata, freqai.dk, strategy)
|
||||||
model_folders = [x for x in freqai.dd.full_path.iterdir() if x.is_dir()]
|
model_folders = [x for x in freqai.dd.full_path.iterdir() if x.is_dir()]
|
||||||
|
|
||||||
assert len(model_folders) == 9
|
assert len(model_folders) == 9
|
||||||
@ -297,14 +295,13 @@ def test_start_backtesting_from_existing_folder(mocker, freqai_conf, caplog):
|
|||||||
timerange = TimeRange.parse_timerange("20180110-20180130")
|
timerange = TimeRange.parse_timerange("20180110-20180130")
|
||||||
freqai.dd.load_all_pair_histories(timerange, freqai.dk)
|
freqai.dd.load_all_pair_histories(timerange, freqai.dk)
|
||||||
sub_timerange = TimeRange.parse_timerange("20180110-20180130")
|
sub_timerange = TimeRange.parse_timerange("20180110-20180130")
|
||||||
corr_df, base_df = freqai.dd.get_base_and_corr_dataframes(sub_timerange, "LTC/BTC", freqai.dk)
|
_, base_df = freqai.dd.get_base_and_corr_dataframes(sub_timerange, "LTC/BTC", freqai.dk)
|
||||||
|
df = base_df[freqai_conf["timeframe"]]
|
||||||
df = freqai.dk.use_strategy_to_populate_indicators(strategy, corr_df, base_df, "LTC/BTC")
|
|
||||||
|
|
||||||
pair = "ADA/BTC"
|
pair = "ADA/BTC"
|
||||||
metadata = {"pair": pair}
|
metadata = {"pair": pair}
|
||||||
freqai.dk.pair = pair
|
freqai.dk.pair = pair
|
||||||
freqai.start_backtesting(df, metadata, freqai.dk)
|
freqai.start_backtesting(df, metadata, freqai.dk, strategy)
|
||||||
model_folders = [x for x in freqai.dd.full_path.iterdir() if x.is_dir()]
|
model_folders = [x for x in freqai.dd.full_path.iterdir() if x.is_dir()]
|
||||||
|
|
||||||
assert len(model_folders) == 2
|
assert len(model_folders) == 2
|
||||||
@ -322,14 +319,13 @@ def test_start_backtesting_from_existing_folder(mocker, freqai_conf, caplog):
|
|||||||
timerange = TimeRange.parse_timerange("20180110-20180130")
|
timerange = TimeRange.parse_timerange("20180110-20180130")
|
||||||
freqai.dd.load_all_pair_histories(timerange, freqai.dk)
|
freqai.dd.load_all_pair_histories(timerange, freqai.dk)
|
||||||
sub_timerange = TimeRange.parse_timerange("20180110-20180130")
|
sub_timerange = TimeRange.parse_timerange("20180110-20180130")
|
||||||
corr_df, base_df = freqai.dd.get_base_and_corr_dataframes(sub_timerange, "LTC/BTC", freqai.dk)
|
_, base_df = freqai.dd.get_base_and_corr_dataframes(sub_timerange, "LTC/BTC", freqai.dk)
|
||||||
|
df = base_df[freqai_conf["timeframe"]]
|
||||||
df = freqai.dk.use_strategy_to_populate_indicators(strategy, corr_df, base_df, "LTC/BTC")
|
|
||||||
|
|
||||||
pair = "ADA/BTC"
|
pair = "ADA/BTC"
|
||||||
metadata = {"pair": pair}
|
metadata = {"pair": pair}
|
||||||
freqai.dk.pair = pair
|
freqai.dk.pair = pair
|
||||||
freqai.start_backtesting(df, metadata, freqai.dk)
|
freqai.start_backtesting(df, metadata, freqai.dk, strategy)
|
||||||
|
|
||||||
assert log_has_re(
|
assert log_has_re(
|
||||||
"Found backtesting prediction file ",
|
"Found backtesting prediction file ",
|
||||||
@ -339,7 +335,7 @@ def test_start_backtesting_from_existing_folder(mocker, freqai_conf, caplog):
|
|||||||
pair = "ETH/BTC"
|
pair = "ETH/BTC"
|
||||||
metadata = {"pair": pair}
|
metadata = {"pair": pair}
|
||||||
freqai.dk.pair = pair
|
freqai.dk.pair = pair
|
||||||
freqai.start_backtesting(df, metadata, freqai.dk)
|
freqai.start_backtesting(df, metadata, freqai.dk, strategy)
|
||||||
|
|
||||||
path = (freqai.dd.full_path / freqai.dk.backtest_predictions_folder)
|
path = (freqai.dd.full_path / freqai.dk.backtest_predictions_folder)
|
||||||
prediction_files = [x for x in path.iterdir() if x.is_file()]
|
prediction_files = [x for x in path.iterdir() if x.is_file()]
|
||||||
|
Loading…
Reference in New Issue
Block a user