feat: Update output for hyperopt to Rich

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