adjust backtest to new feature engineering functions
This commit is contained in:
parent
6f7eb71bbb
commit
2b89f643b7
@ -149,12 +149,9 @@ class IFreqaiModel(ABC):
|
|||||||
# the concatenated results for the full backtesting period back to the strategy.
|
# the concatenated results for the full backtesting period back to the strategy.
|
||||||
elif not self.follow_mode:
|
elif not self.follow_mode:
|
||||||
self.dk = FreqaiDataKitchen(self.config, self.live, metadata["pair"])
|
self.dk = FreqaiDataKitchen(self.config, self.live, metadata["pair"])
|
||||||
dataframe = self.dk.use_strategy_to_populate_indicators(
|
|
||||||
strategy, prediction_dataframe=dataframe, pair=metadata["pair"]
|
|
||||||
)
|
|
||||||
if not self.config.get("freqai_backtest_live_models", False):
|
if not self.config.get("freqai_backtest_live_models", False):
|
||||||
logger.info(f"Training {len(self.dk.training_timeranges)} timeranges")
|
logger.info(f"Training {len(self.dk.training_timeranges)} timeranges")
|
||||||
dk = self.start_backtesting(dataframe, metadata, self.dk)
|
dk = self.start_backtesting(dataframe, metadata, self.dk, strategy)
|
||||||
dataframe = dk.remove_features_from_df(dk.return_dataframe)
|
dataframe = dk.remove_features_from_df(dk.return_dataframe)
|
||||||
else:
|
else:
|
||||||
logger.info(
|
logger.info(
|
||||||
@ -255,7 +252,7 @@ class IFreqaiModel(ABC):
|
|||||||
self.dd.save_metric_tracker_to_disk()
|
self.dd.save_metric_tracker_to_disk()
|
||||||
|
|
||||||
def start_backtesting(
|
def start_backtesting(
|
||||||
self, dataframe: DataFrame, metadata: dict, dk: FreqaiDataKitchen
|
self, dataframe: DataFrame, metadata: dict, dk: FreqaiDataKitchen, strategy: IStrategy
|
||||||
) -> FreqaiDataKitchen:
|
) -> FreqaiDataKitchen:
|
||||||
"""
|
"""
|
||||||
The main broad execution for backtesting. For backtesting, each pair enters and then gets
|
The main broad execution for backtesting. For backtesting, each pair enters and then gets
|
||||||
@ -267,12 +264,14 @@ class IFreqaiModel(ABC):
|
|||||||
:param dataframe: DataFrame = strategy passed dataframe
|
:param dataframe: DataFrame = strategy passed dataframe
|
||||||
:param metadata: Dict = pair metadata
|
:param metadata: Dict = pair metadata
|
||||||
:param dk: FreqaiDataKitchen = Data management/analysis tool associated to present pair only
|
:param dk: FreqaiDataKitchen = Data management/analysis tool associated to present pair only
|
||||||
|
:param strategy: Strategy to train on
|
||||||
:return:
|
:return:
|
||||||
FreqaiDataKitchen = Data management/analysis tool associated to present pair only
|
FreqaiDataKitchen = Data management/analysis tool associated to present pair only
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.pair_it += 1
|
self.pair_it += 1
|
||||||
train_it = 0
|
train_it = 0
|
||||||
|
populate_indicators = True
|
||||||
# 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
|
||||||
@ -301,14 +300,26 @@ class IFreqaiModel(ABC):
|
|||||||
dk.set_new_model_names(pair, timestamp_model_id)
|
dk.set_new_model_names(pair, timestamp_model_id)
|
||||||
|
|
||||||
if dk.check_if_backtest_prediction_is_valid(len_backtest_df):
|
if dk.check_if_backtest_prediction_is_valid(len_backtest_df):
|
||||||
self.dd.load_metadata(dk)
|
# self.dd.load_metadata(dk)
|
||||||
dk.find_features(dataframe)
|
# dk.find_features(dataframe)
|
||||||
self.check_if_feature_list_matches_strategy(dk)
|
# self.check_if_feature_list_matches_strategy(dk)
|
||||||
append_df = dk.get_backtesting_prediction()
|
append_df = dk.get_backtesting_prediction()
|
||||||
dk.append_predictions(append_df)
|
dk.append_predictions(append_df)
|
||||||
else:
|
else:
|
||||||
dataframe_train = dk.slice_dataframe(tr_train, dataframe)
|
if populate_indicators:
|
||||||
dataframe_backtest = dk.slice_dataframe(tr_backtest, dataframe)
|
dataframe = self.dk.use_strategy_to_populate_indicators(
|
||||||
|
strategy, prediction_dataframe=dataframe, pair=metadata["pair"]
|
||||||
|
)
|
||||||
|
populate_indicators = False
|
||||||
|
|
||||||
|
dataframe_base_train = dataframe.loc[dataframe["date"] < tr_train.stopdt, :]
|
||||||
|
dataframe_base_train = strategy.set_freqai_targets(dataframe_base_train)
|
||||||
|
dataframe_base_backtest = dataframe.loc[dataframe["date"] < tr_backtest.stopdt, :]
|
||||||
|
dataframe_base_backtest = strategy.set_freqai_targets(dataframe_base_backtest)
|
||||||
|
|
||||||
|
dataframe_train = dk.slice_dataframe(tr_train, dataframe_base_train)
|
||||||
|
dataframe_backtest = dk.slice_dataframe(tr_backtest, dataframe_base_backtest)
|
||||||
|
|
||||||
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)
|
||||||
@ -913,7 +924,6 @@ class IFreqaiModel(ABC):
|
|||||||
dk.return_dataframe = dk.return_dataframe.drop(columns=list(columns_to_drop))
|
dk.return_dataframe = dk.return_dataframe.drop(columns=list(columns_to_drop))
|
||||||
dk.return_dataframe = pd.merge(
|
dk.return_dataframe = pd.merge(
|
||||||
dk.return_dataframe, saved_dataframe, how='left', left_on='date', right_on="date_pred")
|
dk.return_dataframe, saved_dataframe, how='left', left_on='date', right_on="date_pred")
|
||||||
# dk.return_dataframe = dk.return_dataframe[saved_dataframe.columns].fillna(0)
|
|
||||||
return dk
|
return dk
|
||||||
|
|
||||||
# Following methods which are overridden by user made prediction models.
|
# Following methods which are overridden by user made prediction models.
|
||||||
|
Loading…
Reference in New Issue
Block a user