diff --git a/freqtrade/freqai/data_drawer.py b/freqtrade/freqai/data_drawer.py index 9a17797ff..f8022c8e0 100644 --- a/freqtrade/freqai/data_drawer.py +++ b/freqtrade/freqai/data_drawer.py @@ -229,20 +229,34 @@ class FreqaiDataDrawer: # dynamic df returned to strategy and plotted in frequi mrv_df = self.model_return_values[pair] = pd.DataFrame() - for label in dk.label_list: - mrv_df[label] = pred_df[label] - mrv_df[f"{label}_mean"] = dk.data["labels_mean"][label] - mrv_df[f"{label}_std"] = dk.data["labels_std"][label] + # if user reused `idenfitier` in config and has historical predictions collected, loadthem + # so that frequi remains uninterrupted after a crash + hist_df = self.historic_predictions + if pair in hist_df: + len_diff = len(hist_df[pair].index) - len(pred_df.index) + if len_diff < 0: + df_concat = pd.concat([pred_df.iloc[:abs(len_diff)], hist_df[pair]], + ignore_index=True, keys=hist_df[pair].keys()) + else: + df_concat = hist_df[pair].tail(len(pred_df.index)) + df_concat = df_concat.fillna(0) + self.model_return_values[pair] = df_concat - if self.freqai_info["feature_parameters"].get("DI_threshold", 0) > 0: - mrv_df["DI_values"] = dk.DI_values + else: + for label in dk.label_list: + mrv_df[label] = pred_df[label] + mrv_df[f"{label}_mean"] = dk.data["labels_mean"][label] + mrv_df[f"{label}_std"] = dk.data["labels_std"][label] - mrv_df["do_predict"] = do_preds + if self.freqai_info["feature_parameters"].get("DI_threshold", 0) > 0: + mrv_df["DI_values"] = dk.DI_values - if dk.data['extra_returns_per_train']: - rets = dk.data['extra_returns_per_train'] - for return_str in rets: - mrv_df[return_str] = rets[return_str] + mrv_df["do_predict"] = do_preds + + if dk.data['extra_returns_per_train']: + rets = dk.data['extra_returns_per_train'] + for return_str in rets: + mrv_df[return_str] = rets[return_str] # for keras type models, the conv_window needs to be prepended so # viewing is correct in frequi