diff --git a/freqtrade/optimize/hyperopt.py b/freqtrade/optimize/hyperopt.py index 99b78d09f..8d2f8846a 100644 --- a/freqtrade/optimize/hyperopt.py +++ b/freqtrade/optimize/hyperopt.py @@ -18,10 +18,10 @@ from colorama import init as colorama_init from joblib import Parallel, cpu_count, delayed, dump, load, wrap_non_picklable_objects from joblib.externals import cloudpickle from pandas import DataFrame +from rich.align import Align from rich.progress import ( BarColumn, MofNCompleteColumn, - Progress, TaskProgressColumn, TextColumn, TimeElapsedColumn, @@ -40,6 +40,7 @@ from freqtrade.optimize.backtesting import Backtesting # Import IHyperOpt and IHyperOptLoss to allow unpickling classes from these modules from freqtrade.optimize.hyperopt_auto import HyperOptAuto from freqtrade.optimize.hyperopt_loss_interface import IHyperOptLoss +from freqtrade.optimize.hyperopt_output import HyperoptOutput from freqtrade.optimize.hyperopt_tools import ( HyperoptStateContainer, HyperoptTools, @@ -47,6 +48,7 @@ from freqtrade.optimize.hyperopt_tools import ( ) from freqtrade.optimize.optimize_reports import generate_strategy_stats from freqtrade.resolvers.hyperopt_resolver import HyperOptLossResolver +from freqtrade.util import CustomProgress # Suppress scikit-learn FutureWarnings from skopt @@ -86,6 +88,8 @@ class Hyperopt: self.max_open_trades_space: List[Dimension] = [] self.dimensions: List[Dimension] = [] + self._hyper_out: HyperoptOutput = HyperoptOutput() + self.config = config self.min_date: datetime self.max_date: datetime @@ -268,17 +272,12 @@ class Hyperopt: is_best = results["is_best"] if self.print_all or is_best: - print( - HyperoptTools.get_result_table( - self.config, - [results], - self.total_epochs, - self.print_all, - self.print_colorized, - self.hyperopt_table_header, - ) + self._hyper_out.add_data( + self.config, + [results], + self.total_epochs, + self.print_all, ) - self.hyperopt_table_header = 2 def init_spaces(self): """ @@ -635,7 +634,7 @@ class Hyperopt: logger.info(f"Effective number of parallel workers used: {jobs}") # Define progressbar - with Progress( + with CustomProgress( TextColumn("[progress.description]{task.description}"), BarColumn(bar_width=None), MofNCompleteColumn(), @@ -645,6 +644,7 @@ class Hyperopt: "•", TimeRemainingColumn(), expand=True, + cust_objs=[Align.center(self._hyper_out.table)], ) as pbar: task = pbar.add_task("Epochs", total=self.total_epochs) diff --git a/freqtrade/optimize/hyperopt_output.py b/freqtrade/optimize/hyperopt_output.py index f7cc217ad..2f4e9aff8 100644 --- a/freqtrade/optimize/hyperopt_output.py +++ b/freqtrade/optimize/hyperopt_output.py @@ -12,25 +12,25 @@ from freqtrade.util import fmt_coin class HyperoptOutput: def __init__(self): - self._table = Table( + self.table = Table( title="Hyperopt results", ) # Headers - self._table.add_column("Best", justify="left") - self._table.add_column("Epoch", justify="right") - self._table.add_column("Trades", justify="right") - self._table.add_column("Win Draw Loss Win%", justify="right") - self._table.add_column("Avg profit", justify="right") - self._table.add_column("Profit", justify="right") - self._table.add_column("Avg duration", justify="right") - self._table.add_column("Objective", justify="right") - self._table.add_column("Max Drawdown (Acct)", justify="right") + self.table.add_column("Best", justify="left") + self.table.add_column("Epoch", justify="right") + self.table.add_column("Trades", justify="right") + self.table.add_column("Win Draw Loss Win%", justify="right") + self.table.add_column("Avg profit", justify="right") + self.table.add_column("Profit", justify="right") + self.table.add_column("Avg duration", justify="right") + self.table.add_column("Objective", justify="right") + self.table.add_column("Max Drawdown (Acct)", justify="right") def _add_row(self, data: List[Union[str, Text]]): """Add single row""" row_to_add: List[Union[str, Text]] = [r if isinstance(r, Text) else str(r) for r in data] - self._table.add_row(*row_to_add) + self.table.add_row(*row_to_add) def _add_rows(self, data: List[List[Union[str, Text]]]): """add multiple rows""" @@ -44,7 +44,7 @@ class HyperoptOutput: width=200 if "pytest" in sys.modules else None, ) - console.print(self._table) + console.print(self.table) def add_data( self, @@ -52,7 +52,7 @@ class HyperoptOutput: results: list, total_epochs: int, highlight_best: bool, - ) -> str: + ) -> None: """Format one or multiple rows and add them""" stake_currency = config["stake_currency"]