Updated table layout and aligning better for hyperopt
This commit is contained in:
parent
4aca8d7fcc
commit
7652a2bb95
@ -21,7 +21,7 @@ from colorama import init as colorama_init
|
|||||||
from joblib import (Parallel, cpu_count, delayed, dump, load,
|
from joblib import (Parallel, cpu_count, delayed, dump, load,
|
||||||
wrap_non_picklable_objects)
|
wrap_non_picklable_objects)
|
||||||
from pandas import DataFrame, json_normalize, isna
|
from pandas import DataFrame, json_normalize, isna
|
||||||
from tabulate import tabulate
|
import tabulate
|
||||||
|
|
||||||
from freqtrade.data.converter import trim_dataframe
|
from freqtrade.data.converter import trim_dataframe
|
||||||
from freqtrade.data.history import get_timerange
|
from freqtrade.data.history import get_timerange
|
||||||
@ -309,6 +309,8 @@ class Hyperopt:
|
|||||||
if not results:
|
if not results:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
tabulate.PRESERVE_WHITESPACE = True
|
||||||
|
|
||||||
trials = json_normalize(results, max_level=1)
|
trials = json_normalize(results, max_level=1)
|
||||||
trials['Best'] = ''
|
trials['Best'] = ''
|
||||||
trials = trials[['Best', 'current_epoch', 'results_metrics.trade_count',
|
trials = trials[['Best', 'current_epoch', 'results_metrics.trade_count',
|
||||||
@ -325,43 +327,51 @@ class Hyperopt:
|
|||||||
trials['Trades'] = trials['Trades'].astype(str)
|
trials['Trades'] = trials['Trades'].astype(str)
|
||||||
|
|
||||||
trials['Epoch'] = trials['Epoch'].apply(
|
trials['Epoch'] = trials['Epoch'].apply(
|
||||||
lambda x: '{}/{}'.format(str(x).rjust(len(str(total_epochs)), ' '), total_epochs))
|
lambda x: '{}/{}'.format(str(x).rjust(len(str(total_epochs)), ' '), total_epochs)
|
||||||
|
)
|
||||||
trials['Avg profit'] = trials['Avg profit'].apply(
|
trials['Avg profit'] = trials['Avg profit'].apply(
|
||||||
lambda x: ('{:,.2f}%'.format(x)).rjust(7, ' ') if not isna(x) else "--".rjust(7, ' '))
|
lambda x: ('{:,.2f}%'.format(x)).rjust(7, ' ') if not isna(x) else "--".rjust(7, ' ')
|
||||||
trials['Profit'] = trials['Profit'].apply(
|
)
|
||||||
lambda x: ('{:,.2f}%'.format(x)) if not isna(x) else "--")
|
|
||||||
trials['Total profit'] = trials['Total profit'].apply(
|
|
||||||
lambda x: ('{:,.8f} '.format(x)) + config['stake_currency'] if not isna(x) else "--")
|
|
||||||
trials['Avg duration'] = trials['Avg duration'].apply(
|
trials['Avg duration'] = trials['Avg duration'].apply(
|
||||||
lambda x: ('{:,.1f}m'.format(x)).rjust(7, ' ') if not isna(x) else "--".rjust(7, ' '))
|
lambda x: ('{:,.1f} m'.format(x)).rjust(7, ' ') if not isna(x) else "--".rjust(7, ' ')
|
||||||
|
)
|
||||||
trials['Objective'] = trials['Objective'].apply(
|
trials['Objective'] = trials['Objective'].apply(
|
||||||
lambda x: str(x).rjust(10, ' ') if str(x) != str(100000) else "N/A".rjust(10, ' '))
|
lambda x: str(x).rjust(10, ' ') if str(x) != str(100000) else "N/A".rjust(10, ' ')
|
||||||
trials['Profit'] = trials['Total profit'] + " (" + trials['Profit'] + ")"
|
)
|
||||||
|
|
||||||
|
trials['Profit'] = trials.apply(
|
||||||
|
lambda x: '{:,.8f} {} ({:,.2f}%)'.format(
|
||||||
|
x['Total profit'], config['stake_currency'],
|
||||||
|
x['Profit']).rjust(24+len(config['stake_currency']))
|
||||||
|
if x['Total profit'] != 0.0 else '--'.rjust(24+len(config['stake_currency'])),
|
||||||
|
axis=1
|
||||||
|
)
|
||||||
trials = trials.drop(columns=['Total profit'])
|
trials = trials.drop(columns=['Total profit'])
|
||||||
|
|
||||||
if print_colorized:
|
if print_colorized:
|
||||||
for i in range(len(trials)):
|
for i in range(len(trials)):
|
||||||
if trials.loc[i]['is_profit']:
|
if trials.loc[i]['is_profit']:
|
||||||
for z in range(len(trials.loc[i])-3):
|
for z in range(len(trials.loc[i])-3):
|
||||||
trials.iat[i, z] = "{}{}{}".format(Fore.GREEN,
|
trials.iat[i, z] = "{}{}{}".format(
|
||||||
str(trials.loc[i][z]), Fore.RESET)
|
Fore.GREEN, str(trials.loc[i][z]), Fore.RESET)
|
||||||
if trials.loc[i]['is_best'] and highlight_best:
|
if trials.loc[i]['is_best'] and highlight_best:
|
||||||
for z in range(len(trials.loc[i])-3):
|
for z in range(len(trials.loc[i])-3):
|
||||||
trials.iat[i, z] = "{}{}{}".format(Style.BRIGHT,
|
trials.iat[i, z] = "{}{}{}".format(
|
||||||
str(trials.loc[i][z]), Style.RESET_ALL)
|
Style.BRIGHT, str(trials.loc[i][z]), Style.RESET_ALL)
|
||||||
|
|
||||||
trials = trials.drop(columns=['is_initial_point', 'is_best', 'is_profit'])
|
trials = trials.drop(columns=['is_initial_point', 'is_best', 'is_profit'])
|
||||||
if remove_header > 0:
|
if remove_header > 0:
|
||||||
table = tabulate(trials.to_dict(orient='list'), tablefmt='orgtbl',
|
table = tabulate.tabulate(
|
||||||
headers='keys', stralign="right")
|
trials.to_dict(orient='list'), tablefmt='orgtbl', headers='keys', stralign="right")
|
||||||
|
# print(table)
|
||||||
table = table.split("\n", remove_header)[remove_header]
|
table = table.split("\n", remove_header)[remove_header]
|
||||||
elif remove_header < 0:
|
elif remove_header < 0:
|
||||||
table = tabulate(trials.to_dict(orient='list'), tablefmt='psql',
|
table = tabulate.tabulate(
|
||||||
headers='keys', stralign="right")
|
trials.to_dict(orient='list'), tablefmt='psql', headers='keys', stralign="right")
|
||||||
table = "\n".join(table.split("\n")[0:remove_header])
|
table = "\n".join(table.split("\n")[0:remove_header])
|
||||||
else:
|
else:
|
||||||
table = tabulate(trials.to_dict(orient='list'), tablefmt='psql',
|
table = tabulate.tabulate(
|
||||||
headers='keys', stralign="right")
|
trials.to_dict(orient='list'), tablefmt='psql', headers='keys', stralign="right")
|
||||||
print(table)
|
print(table)
|
||||||
|
|
||||||
def has_space(self, space: str) -> bool:
|
def has_space(self, space: str) -> bool:
|
||||||
|
@ -410,7 +410,7 @@ def test_log_results_if_loss_improves(hyperopt, capsys) -> None:
|
|||||||
)
|
)
|
||||||
out, err = capsys.readouterr()
|
out, err = capsys.readouterr()
|
||||||
assert all(x in out
|
assert all(x in out
|
||||||
for x in ["Best", "2/2", " 1", "0.10%", "0.00100000 BTC", "1.00%", "20.0m"])
|
for x in ["Best", "2/2", " 1", "0.10%", "0.00100000 BTC (1.00%)", "20.0 m"])
|
||||||
|
|
||||||
|
|
||||||
def test_no_log_if_loss_does_not_improve(hyperopt, caplog) -> None:
|
def test_no_log_if_loss_does_not_improve(hyperopt, caplog) -> None:
|
||||||
|
Loading…
Reference in New Issue
Block a user