2022-05-22 22:34:31 +00:00
|
|
|
import logging
|
|
|
|
from pathlib import Path
|
|
|
|
from typing import Any, Dict
|
|
|
|
|
|
|
|
from freqtrade.configuration import setup_utils_configuration
|
|
|
|
from freqtrade.enums import RunMode
|
|
|
|
from freqtrade.exceptions import OperationalException
|
|
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
def setup_analyze_configuration(args: Dict[str, Any], method: RunMode) -> Dict[str, Any]:
|
|
|
|
"""
|
|
|
|
Prepare the configuration for the entry/exit reason analysis module
|
|
|
|
:param args: Cli args from Arguments()
|
|
|
|
:param method: Bot running mode
|
|
|
|
:return: Configuration
|
|
|
|
"""
|
|
|
|
config = setup_utils_configuration(args, method)
|
|
|
|
|
|
|
|
no_unlimited_runmodes = {
|
|
|
|
RunMode.BACKTEST: 'backtesting',
|
|
|
|
}
|
|
|
|
if method in no_unlimited_runmodes.keys():
|
|
|
|
from freqtrade.data.btanalysis import get_latest_backtest_filename
|
|
|
|
|
2022-06-14 15:54:27 +00:00
|
|
|
if 'exportfilename' in config:
|
|
|
|
if config['exportfilename'].is_dir():
|
|
|
|
btfile = Path(get_latest_backtest_filename(config['exportfilename']))
|
|
|
|
signals_file = f"{config['exportfilename']}/{btfile.stem}_signals.pkl"
|
|
|
|
else:
|
|
|
|
if config['exportfilename'].exists():
|
|
|
|
btfile = Path(config['exportfilename'])
|
|
|
|
signals_file = f"{btfile.parent}/{btfile.stem}_signals.pkl"
|
|
|
|
else:
|
|
|
|
raise OperationalException(f"{config['exportfilename']} does not exist.")
|
|
|
|
else:
|
|
|
|
raise OperationalException('exportfilename not in config.')
|
2022-05-22 22:34:31 +00:00
|
|
|
|
2022-06-14 15:54:27 +00:00
|
|
|
if (not Path(signals_file).exists()):
|
2022-05-22 22:34:31 +00:00
|
|
|
raise OperationalException(
|
2022-06-14 15:54:27 +00:00
|
|
|
(f"Cannot find latest backtest signals file: {signals_file}."
|
|
|
|
"Run backtesting with `--export signals`.")
|
2022-05-24 11:48:13 +00:00
|
|
|
)
|
|
|
|
|
2022-05-22 22:34:31 +00:00
|
|
|
return config
|
|
|
|
|
|
|
|
|
|
|
|
def start_analysis_entries_exits(args: Dict[str, Any]) -> None:
|
|
|
|
"""
|
|
|
|
Start analysis script
|
|
|
|
:param args: Cli args from Arguments()
|
|
|
|
:return: None
|
|
|
|
"""
|
|
|
|
from freqtrade.data.entryexitanalysis import process_entry_exit_reasons
|
|
|
|
|
|
|
|
# Initialize configuration
|
|
|
|
config = setup_analyze_configuration(args, RunMode.BACKTEST)
|
|
|
|
|
|
|
|
logger.info('Starting freqtrade in analysis mode')
|
|
|
|
|
2022-11-26 16:58:56 +00:00
|
|
|
process_entry_exit_reasons(config)
|