From 255d35976e2737573fc09aabee65a5e776f18f09 Mon Sep 17 00:00:00 2001 From: robcaulk Date: Tue, 24 May 2022 12:58:53 +0200 Subject: [PATCH] add priority metadata to pairs to avoid a sync of train time + train period --- freqtrade/freqai/data_drawer.py | 13 +++++++++++++ freqtrade/freqai/freqai_interface.py | 10 +++++++++- .../prediction_models/CatboostPredictionModel.py | 4 +++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/freqtrade/freqai/data_drawer.py b/freqtrade/freqai/data_drawer.py index 51f56fae6..a47ff6ec2 100644 --- a/freqtrade/freqai/data_drawer.py +++ b/freqtrade/freqai/data_drawer.py @@ -56,5 +56,18 @@ class FreqaiDataDrawer: model_filename = self.pair_dict[metadata['pair']]['model_filename'] = '' coin_first = self.pair_dict[metadata['pair']]['first'] = True trained_timestamp = self.pair_dict[metadata['pair']]['trained_timestamp'] = 0 + self.pair_dict[metadata['pair']]['priority'] = 1 return model_filename, trained_timestamp, coin_first + + def set_pair_dict_info(self, metadata: dict) -> None: + pair_in_dict = self.pair_dict.get(metadata['pair']) + if pair_in_dict: + return + else: + self.pair_dict[metadata['pair']] = {} + self.pair_dict[metadata['pair']]['model_filename'] = '' + self.pair_dict[metadata['pair']]['first'] = True + self.pair_dict[metadata['pair']]['trained_timestamp'] = 0 + self.pair_dict[metadata['pair']]['priority'] = 1 + return diff --git a/freqtrade/freqai/freqai_interface.py b/freqtrade/freqai/freqai_interface.py index 19b7dbb27..3fdd379dc 100644 --- a/freqtrade/freqai/freqai_interface.py +++ b/freqtrade/freqai/freqai_interface.py @@ -109,7 +109,10 @@ class IFreqaiModel(ABC): # FreqaiDataKitchen is reinstantiated for each coin if self.live: - if not self.training_on_separate_thread: + self.data_drawer.set_pair_dict_info(metadata) + if (not self.training_on_separate_thread and + self.data_drawer.pair_dict[metadata['pair']]['priority'] == 1): + self.dh = FreqaiDataKitchen(self.config, self.data_drawer, self.live, metadata["pair"]) dh = self.start_live(dataframe, metadata, strategy, self.dh) @@ -212,6 +215,7 @@ class IFreqaiModel(ABC): else: logger.info("FreqAI training a new model on background thread.") + self.data_drawer.pair_dict[metadata['pair']]['priority'] = 1 self.model = dh.load_data(coin=metadata['pair']) @@ -319,6 +323,9 @@ class IFreqaiModel(ABC): dh.set_new_model_names(metadata, new_trained_timerange) + # set this coin to lower priority to allow other coins in white list to get trained + self.data_drawer.pair_dict[metadata['pair']]['priority'] = 0 + dh.save_data(self.model, coin=metadata['pair']) self.training_on_separate_thread = False @@ -344,6 +351,7 @@ class IFreqaiModel(ABC): dh.set_new_model_names(metadata, new_trained_timerange) self.data_drawer.pair_dict[metadata['pair']]['first'] = False + dh.save_data(self.model, coin=metadata['pair']) self.retrain = False diff --git a/freqtrade/freqai/prediction_models/CatboostPredictionModel.py b/freqtrade/freqai/prediction_models/CatboostPredictionModel.py index 87ddfdb66..73ea46032 100644 --- a/freqtrade/freqai/prediction_models/CatboostPredictionModel.py +++ b/freqtrade/freqai/prediction_models/CatboostPredictionModel.py @@ -51,7 +51,9 @@ class CatboostPredictionModel(IFreqaiModel): :returns: :model: Trained model which can be used to inference (self.predict) """ - logger.info("--------------------Starting training--------------------") + + logger.info('--------------------Starting training' + f'{metadata["pair"]} --------------------') # create the full feature list based on user config info dh.training_features_list = dh.find_features(unfiltered_dataframe)