stable/freqtrade/commands/hyperopt_commands.py

105 lines
3.6 KiB
Python
Raw Permalink Normal View History

import logging
from operator import itemgetter
from typing import Any, Dict
from colorama import init as colorama_init
from freqtrade.configuration import setup_utils_configuration
from freqtrade.data.btanalysis import get_latest_hyperopt_file
2021-06-08 19:20:35 +00:00
from freqtrade.enums import RunMode
from freqtrade.exceptions import OperationalException
from freqtrade.optimize.optimize_reports import show_backtest_result
2020-09-28 17:39:41 +00:00
logger = logging.getLogger(__name__)
2020-08-11 18:37:01 +00:00
def start_hyperopt_list(args: Dict[str, Any]) -> None:
"""
List hyperopt epochs previously evaluated
"""
from freqtrade.optimize.hyperopt_tools import HyperoptTools
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
print_colorized = config.get('print_colorized', False)
print_json = config.get('print_json', False)
export_csv = config.get('export_csv', None)
no_details = config.get('hyperopt_list_no_details', False)
no_header = False
results_file = get_latest_hyperopt_file(
config['user_data_dir'] / 'hyperopt_results',
config.get('hyperoptexportfilename'))
# Previous evaluations
epochs, total_epochs = HyperoptTools.load_filtered_results(results_file, config)
if print_colorized:
colorama_init(autoreset=True)
2020-03-05 18:43:43 +00:00
if not export_csv:
try:
print(HyperoptTools.get_result_table(config, epochs, total_epochs,
not config.get('hyperopt_list_best', False),
print_colorized, 0))
2020-03-05 18:43:43 +00:00
except KeyboardInterrupt:
print('User interrupted..')
2020-04-28 20:14:02 +00:00
if epochs and not no_details:
sorted_epochs = sorted(epochs, key=itemgetter('loss'))
results = sorted_epochs[0]
2021-06-13 09:24:24 +00:00
HyperoptTools.show_epoch_details(results, total_epochs, print_json, no_header)
2020-03-05 18:43:43 +00:00
2020-04-28 20:14:02 +00:00
if epochs and export_csv:
HyperoptTools.export_csv_file(
config, epochs, export_csv
)
def start_hyperopt_show(args: Dict[str, Any]) -> None:
"""
Show details of a hyperopt epoch previously evaluated
"""
from freqtrade.optimize.hyperopt_tools import HyperoptTools
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
print_json = config.get('print_json', False)
no_header = config.get('hyperopt_show_no_header', False)
results_file = get_latest_hyperopt_file(
config['user_data_dir'] / 'hyperopt_results',
config.get('hyperoptexportfilename'))
n = config.get('hyperopt_show_index', -1)
# Previous evaluations
epochs, total_epochs = HyperoptTools.load_filtered_results(results_file, config)
2020-04-28 20:14:02 +00:00
filtered_epochs = len(epochs)
2020-04-28 20:14:02 +00:00
if n > filtered_epochs:
raise OperationalException(
2020-04-28 20:14:02 +00:00
f"The index of the epoch to show should be less than {filtered_epochs + 1}.")
if n < -filtered_epochs:
raise OperationalException(
2020-04-28 20:14:02 +00:00
f"The index of the epoch to show should be greater than {-filtered_epochs - 1}.")
# Translate epoch index from human-readable format to pythonic
if n > 0:
n -= 1
2020-04-28 20:14:02 +00:00
if epochs:
val = epochs[n]
metrics = val['results_metrics']
if 'strategy_name' in metrics:
2021-05-29 14:49:28 +00:00
strategy_name = metrics['strategy_name']
show_backtest_result(strategy_name, metrics,
2021-10-21 04:58:40 +00:00
metrics['stake_currency'], config.get('backtest_breakdown', []))
HyperoptTools.try_export_params(config, strategy_name, val)
2021-05-29 14:49:28 +00:00
2021-06-13 09:24:24 +00:00
HyperoptTools.show_epoch_details(val, total_epochs, print_json, no_header,
header_str="Epoch details")