Add option to keep models only in memory for backtest

This commit is contained in:
Wagner Costa Santos 2022-09-02 22:01:53 -03:00
parent d6e115178a
commit af5460cebf
3 changed files with 6 additions and 2 deletions

View File

@ -56,6 +56,7 @@
"purge_old_models": true,
"train_period_days": 15,
"backtest_period_days": 7,
"backtest_save_model": true,
"live_retrain_hours": 0,
"identifier": "uniqe-id",
"feature_parameters": {
@ -94,4 +95,4 @@
"internals": {
"process_throttle_secs": 5
}
}
}

View File

@ -93,6 +93,7 @@ Mandatory parameters are marked as **Required**, which means that they are requi
| `purge_old_models` | Delete obsolete models (otherwise, all historic models will remain on disk). <br> **Datatype:** Boolean. Default: `False`.
| `train_period_days` | **Required.** <br> Number of days to use for the training data (width of the sliding window). <br> **Datatype:** Positive integer.
| `backtest_period_days` | **Required.** <br> Number of days to inference from the trained model before sliding the window defined above, and retraining the model. This can be fractional days, but beware that the user-provided `timerange` will be divided by this number to yield the number of trainings necessary to complete the backtest. <br> **Datatype:** Float.
| `backtest_save_model` | Saves models to disk when running backtesting. <br> **Datatype:** Boolean. Default: `True`.
| `identifier` | **Required.** <br> A unique name for the current model. This can be reused to reload pre-trained models/data. <br> **Datatype:** String.
| `live_retrain_hours` | Frequency of retraining during dry/live runs. <br> Default set to 0, which means the model will retrain as often as possible. <br> **Datatype:** Float > 0.
| `expiration_hours` | Avoid making predictions if a model is more than `expiration_hours` old. <br> Defaults set to 0, which means models never expire. <br> **Datatype:** Positive integer.

View File

@ -71,6 +71,7 @@ class IFreqaiModel(ABC):
self.first = True
self.set_full_path()
self.follow_mode: bool = self.freqai_info.get("follow_mode", False)
self.backtest_save_model: bool = self.freqai_info.get("backtest_save_model", True)
self.dd = FreqaiDataDrawer(Path(self.full_path), self.config, self.follow_mode)
self.identifier: str = self.freqai_info.get("identifier", "no_id_provided")
self.scanning = False
@ -246,7 +247,8 @@ class IFreqaiModel(ABC):
self.dd.pair_dict[metadata["pair"]]["trained_timestamp"] = int(
trained_timestamp.stopts)
dk.set_new_model_names(metadata["pair"], trained_timestamp)
self.dd.save_data(self.model, metadata["pair"], dk)
if self.backtest_save_model:
self.dd.save_data(self.model, metadata["pair"], dk)
else:
self.model = self.dd.load_data(metadata["pair"], dk)