From a4aa1b972c543b0ea256bb521f3c8d41a2585c80 Mon Sep 17 00:00:00 2001 From: robcaulk Date: Sun, 9 Oct 2022 21:11:37 +0200 Subject: [PATCH] isolate and standardize location of tensorboard files, add doc, ensure backtesting functionality --- docs/freqai-running.md | 14 ++++++++++++++ freqtrade/freqai/data_kitchen.py | 2 ++ freqtrade/freqai/freqai_interface.py | 5 +---- .../freqai/prediction_models/CatboostClassifier.py | 3 ++- .../freqai/prediction_models/CatboostRegressor.py | 3 ++- .../CatboostRegressorMultiTarget.py | 3 ++- 6 files changed, 23 insertions(+), 7 deletions(-) diff --git a/docs/freqai-running.md b/docs/freqai-running.md index b8994aed9..f6aa7b2e1 100644 --- a/docs/freqai-running.md +++ b/docs/freqai-running.md @@ -142,6 +142,20 @@ dataframe['outlier'] = np.where(dataframe['DI_values'] > self.di_max.value/10, 1 This specific hyperopt would help you understand the appropriate `DI_values` for your particular parameter space. +## Using Tensorboard + +Catboost models benefit from tracking training metrics via Tensorboard. You can take advantage of the FreqAI integration to track training and evaluation performance across all coins and across all retrainings. Tensorboard is activated via the following command: + +```bash +cd freqtrade +tensorboard --logdir user_data/models/unique-id +``` + +where `unique-id` is the `identifier` set in the `freqai` configuration file. This command must be run in a separate shell if the user wishes to view the output in their browser at 127.0.0.1:6060 (6060 is the default port used by Tensorboard). + +![tensorboard](assets/tensorboard.jpg) + + ## Setting up a follower You can indicate to the bot that it should not train models, but instead should look for models trained by a leader with a specific `identifier` by defining: diff --git a/freqtrade/freqai/data_kitchen.py b/freqtrade/freqai/data_kitchen.py index 7ea2daf02..b7473eacc 100644 --- a/freqtrade/freqai/data_kitchen.py +++ b/freqtrade/freqai/data_kitchen.py @@ -120,6 +120,8 @@ class FreqaiDataKitchen: / f"sub-train-{pair.split('/')[0]}_{trained_timestamp}" ) + Path(self.data_path / 'tensorboard').mkdir(parents=True, exist_ok=True) + return def make_train_test_datasets( diff --git a/freqtrade/freqai/freqai_interface.py b/freqtrade/freqai/freqai_interface.py index 5ac7bc32c..58d8523a2 100644 --- a/freqtrade/freqai/freqai_interface.py +++ b/freqtrade/freqai/freqai_interface.py @@ -196,7 +196,6 @@ class IFreqaiModel(ABC): (_, trained_timestamp, _) = self.dd.get_pair_dict_info(pair) dk = FreqaiDataKitchen(self.config, self.live, pair) - dk.set_paths(pair, trained_timestamp) ( retrain, new_trained_timerange, @@ -267,9 +266,7 @@ class IFreqaiModel(ABC): ) trained_timestamp_int = int(trained_timestamp.stopts) - dk.data_path = Path( - dk.full_path / f"sub-train-{pair.split('/')[0]}_{trained_timestamp_int}" - ) + dk.set_paths(pair, trained_timestamp_int) dk.set_new_model_names(pair, trained_timestamp) diff --git a/freqtrade/freqai/prediction_models/CatboostClassifier.py b/freqtrade/freqai/prediction_models/CatboostClassifier.py index 31a865a8d..0565b15b5 100644 --- a/freqtrade/freqai/prediction_models/CatboostClassifier.py +++ b/freqtrade/freqai/prediction_models/CatboostClassifier.py @@ -1,4 +1,5 @@ import logging +from pathlib import Path from typing import Any, Dict from catboost import CatBoostClassifier, Pool @@ -34,7 +35,7 @@ class CatboostClassifier(BaseClassifierModel): cbr = CatBoostClassifier( allow_writing_files=True, loss_function='MultiClass', - train_dir=dk.data_path, + train_dir=Path(dk.data_path / 'tensorboard'), **self.model_training_parameters, ) diff --git a/freqtrade/freqai/prediction_models/CatboostRegressor.py b/freqtrade/freqai/prediction_models/CatboostRegressor.py index a04649d93..46f33a142 100644 --- a/freqtrade/freqai/prediction_models/CatboostRegressor.py +++ b/freqtrade/freqai/prediction_models/CatboostRegressor.py @@ -1,4 +1,5 @@ import logging +from pathlib import Path from typing import Any, Dict from catboost import CatBoostRegressor, Pool @@ -42,7 +43,7 @@ class CatboostRegressor(BaseRegressionModel): model = CatBoostRegressor( allow_writing_files=True, - train_dir=dk.data_path, + train_dir=Path(dk.data_path / 'tensorboard'), **self.model_training_parameters, ) diff --git a/freqtrade/freqai/prediction_models/CatboostRegressorMultiTarget.py b/freqtrade/freqai/prediction_models/CatboostRegressorMultiTarget.py index 292ad600a..085c13b86 100644 --- a/freqtrade/freqai/prediction_models/CatboostRegressorMultiTarget.py +++ b/freqtrade/freqai/prediction_models/CatboostRegressorMultiTarget.py @@ -1,4 +1,5 @@ import logging +from pathlib import Path from typing import Any, Dict from catboost import CatBoostRegressor, Pool @@ -27,7 +28,7 @@ class CatboostRegressorMultiTarget(BaseRegressionModel): cbr = CatBoostRegressor( allow_writing_files=True, - train_dir=dk.data_path, + train_dir=Path(dk.data_path / 'tensorboard'), **self.model_training_parameters, )