def test_start_no_data(mocker, hyperopt_conf, tmpdir) -> None: hyperopt_conf['user_data_dir'] = Path(tmpdir) patched_configuration_load_config_file(mocker, hyperopt_conf) mocker.patch('freqtrade.data.history.load_pair_history', MagicMock(return_value=pd.DataFrame)) mocker.patch( 'freqtrade.optimize.hyperopt.get_timerange', MagicMock(return_value=(datetime(2017, 12, 10), datetime(2017, 12, 13)))) patch_exchange(mocker) args = [ 'hyperopt', '--config', 'config.json', '--strategy', 'HyperoptableStrategy', '--hyperopt-loss', 'SharpeHyperOptLossDaily', '--epochs', '5' ] pargs = get_args(args) with pytest.raises(OperationalException, match='No data found. Terminating.'): start_hyperopt(pargs) # Cleanup since that failed hyperopt start leaves a lockfile. try: Path(Hyperopt.get_lock_filename(hyperopt_conf)).unlink() except Exception: pass
def start_hyperopt(args: Namespace) -> None: """ Start hyperopt script :param args: Cli args from Arguments() :return: None """ # Import here to avoid loading hyperopt module when it's not used from freqtrade.optimize.hyperopt import Hyperopt # Initialize configuration config = setup_configuration(args, RunMode.HYPEROPT) logger.info('Starting freqtrade in Hyperopt mode') lock = FileLock(Hyperopt.get_lock_filename(config)) try: with lock.acquire(timeout=1): # Remove noisy log messages logging.getLogger('hyperopt.tpe').setLevel(logging.WARNING) logging.getLogger('filelock').setLevel(logging.WARNING) # Initialize backtesting object hyperopt = Hyperopt(config) hyperopt.start() except Timeout: logger.info("Another running instance of freqtrade Hyperopt detected.") logger.info( "Simultaneous execution of multiple Hyperopt commands is not supported. " "Hyperopt module is resource hungry. Please run your Hyperopts sequentially " "or on separate machines.") logger.info("Quitting now.")
def test_start_filelock(mocker, default_conf, caplog) -> None: start_mock = MagicMock( side_effect=Timeout(Hyperopt.get_lock_filename(default_conf))) patched_configuration_load_config_file(mocker, default_conf) mocker.patch('freqtrade.optimize.hyperopt.Hyperopt.start', start_mock) patch_exchange(mocker) args = ['--config', 'config.json', 'hyperopt', '--epochs', '5'] args = get_args(args) start_hyperopt(args) assert log_has("Another running instance of freqtrade Hyperopt detected.", caplog)
def test_start_filelock(mocker, hyperopt_conf, caplog) -> None: hyperopt_mock = MagicMock( side_effect=Timeout(Hyperopt.get_lock_filename(hyperopt_conf))) patched_configuration_load_config_file(mocker, hyperopt_conf) mocker.patch('freqtrade.optimize.hyperopt.Hyperopt.__init__', hyperopt_mock) patch_exchange(mocker) args = [ 'hyperopt', '--config', 'config.json', '--hyperopt', 'DefaultHyperOpt', '--hyperopt-loss', 'SharpeHyperOptLossDaily', '--epochs', '5' ] pargs = get_args(args) start_hyperopt(pargs) assert log_has("Another running instance of freqtrade Hyperopt detected.", caplog)