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 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)
|
||||||
|
|
||||||
|
|||||||
@@ -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"]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user