mirror of
https://github.com/freqtrade/freqtrade.git
synced 2026-02-11 16:50:40 +00:00
feat: Update output for hyperopt to Rich
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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"]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user