Remove new-hyperopt command
This commit is contained in:
parent
432c3df17e
commit
ebb0b8aa3f
@ -111,41 +111,6 @@ Using the advanced template (populates all optional functions and methods)
|
|||||||
freqtrade new-strategy --strategy AwesomeStrategy --template advanced
|
freqtrade new-strategy --strategy AwesomeStrategy --template advanced
|
||||||
```
|
```
|
||||||
|
|
||||||
## Create new hyperopt
|
|
||||||
|
|
||||||
Creates a new hyperopt from a template similar to SampleHyperopt.
|
|
||||||
The file will be named inline with your class name, and will not overwrite existing files.
|
|
||||||
|
|
||||||
Results will be located in `user_data/hyperopts/<classname>.py`.
|
|
||||||
|
|
||||||
``` output
|
|
||||||
usage: freqtrade new-hyperopt [-h] [--userdir PATH] [--hyperopt NAME]
|
|
||||||
[--template {full,minimal,advanced}]
|
|
||||||
|
|
||||||
optional arguments:
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
--userdir PATH, --user-data-dir PATH
|
|
||||||
Path to userdata directory.
|
|
||||||
--hyperopt NAME Specify hyperopt class name which will be used by the
|
|
||||||
bot.
|
|
||||||
--template {full,minimal,advanced}
|
|
||||||
Use a template which is either `minimal`, `full`
|
|
||||||
(containing multiple sample indicators) or `advanced`.
|
|
||||||
Default: `full`.
|
|
||||||
```
|
|
||||||
|
|
||||||
### Sample usage of new-hyperopt
|
|
||||||
|
|
||||||
```bash
|
|
||||||
freqtrade new-hyperopt --hyperopt AwesomeHyperopt
|
|
||||||
```
|
|
||||||
|
|
||||||
With custom user directory
|
|
||||||
|
|
||||||
```bash
|
|
||||||
freqtrade new-hyperopt --userdir ~/.freqtrade/ --hyperopt AwesomeHyperopt
|
|
||||||
```
|
|
||||||
|
|
||||||
## List Strategies and List Hyperopts
|
## List Strategies and List Hyperopts
|
||||||
|
|
||||||
Use the `list-strategies` subcommand to see all strategies in one particular directory and the `list-hyperopts` subcommand to list custom Hyperopts.
|
Use the `list-strategies` subcommand to see all strategies in one particular directory and the `list-hyperopts` subcommand to list custom Hyperopts.
|
||||||
|
@ -11,7 +11,7 @@ from freqtrade.commands.build_config_commands import start_new_config
|
|||||||
from freqtrade.commands.data_commands import (start_convert_data, start_download_data,
|
from freqtrade.commands.data_commands import (start_convert_data, start_download_data,
|
||||||
start_list_data)
|
start_list_data)
|
||||||
from freqtrade.commands.deploy_commands import (start_create_userdir, start_install_ui,
|
from freqtrade.commands.deploy_commands import (start_create_userdir, start_install_ui,
|
||||||
start_new_hyperopt, start_new_strategy)
|
start_new_strategy)
|
||||||
from freqtrade.commands.hyperopt_commands import start_hyperopt_list, start_hyperopt_show
|
from freqtrade.commands.hyperopt_commands import start_hyperopt_list, start_hyperopt_show
|
||||||
from freqtrade.commands.list_commands import (start_list_exchanges, start_list_hyperopts,
|
from freqtrade.commands.list_commands import (start_list_exchanges, start_list_hyperopts,
|
||||||
start_list_markets, start_list_strategies,
|
start_list_markets, start_list_strategies,
|
||||||
|
@ -55,8 +55,6 @@ ARGS_BUILD_CONFIG = ["config"]
|
|||||||
|
|
||||||
ARGS_BUILD_STRATEGY = ["user_data_dir", "strategy", "template"]
|
ARGS_BUILD_STRATEGY = ["user_data_dir", "strategy", "template"]
|
||||||
|
|
||||||
ARGS_BUILD_HYPEROPT = ["user_data_dir", "hyperopt", "template"]
|
|
||||||
|
|
||||||
ARGS_CONVERT_DATA = ["pairs", "format_from", "format_to", "erase"]
|
ARGS_CONVERT_DATA = ["pairs", "format_from", "format_to", "erase"]
|
||||||
ARGS_CONVERT_DATA_OHLCV = ARGS_CONVERT_DATA + ["timeframes"]
|
ARGS_CONVERT_DATA_OHLCV = ARGS_CONVERT_DATA + ["timeframes"]
|
||||||
|
|
||||||
@ -95,7 +93,7 @@ NO_CONF_REQURIED = ["convert-data", "convert-trade-data", "download-data", "list
|
|||||||
"list-hyperopts", "hyperopt-list", "hyperopt-show",
|
"list-hyperopts", "hyperopt-list", "hyperopt-show",
|
||||||
"plot-dataframe", "plot-profit", "show-trades"]
|
"plot-dataframe", "plot-profit", "show-trades"]
|
||||||
|
|
||||||
NO_CONF_ALLOWED = ["create-userdir", "list-exchanges", "new-hyperopt", "new-strategy"]
|
NO_CONF_ALLOWED = ["create-userdir", "list-exchanges", "new-strategy"]
|
||||||
|
|
||||||
|
|
||||||
class Arguments:
|
class Arguments:
|
||||||
@ -176,10 +174,9 @@ class Arguments:
|
|||||||
start_hyperopt_list, start_hyperopt_show, start_install_ui,
|
start_hyperopt_list, start_hyperopt_show, start_install_ui,
|
||||||
start_list_data, start_list_exchanges, start_list_hyperopts,
|
start_list_data, start_list_exchanges, start_list_hyperopts,
|
||||||
start_list_markets, start_list_strategies,
|
start_list_markets, start_list_strategies,
|
||||||
start_list_timeframes, start_new_config, start_new_hyperopt,
|
start_list_timeframes, start_new_config, start_new_strategy,
|
||||||
start_new_strategy, start_plot_dataframe, start_plot_profit,
|
start_plot_dataframe, start_plot_profit, start_show_trades,
|
||||||
start_show_trades, start_test_pairlist, start_trading,
|
start_test_pairlist, start_trading, start_webserver)
|
||||||
start_webserver)
|
|
||||||
|
|
||||||
subparsers = self.parser.add_subparsers(dest='command',
|
subparsers = self.parser.add_subparsers(dest='command',
|
||||||
# Use custom message when no subhandler is added
|
# Use custom message when no subhandler is added
|
||||||
@ -206,12 +203,6 @@ class Arguments:
|
|||||||
build_config_cmd.set_defaults(func=start_new_config)
|
build_config_cmd.set_defaults(func=start_new_config)
|
||||||
self._build_args(optionlist=ARGS_BUILD_CONFIG, parser=build_config_cmd)
|
self._build_args(optionlist=ARGS_BUILD_CONFIG, parser=build_config_cmd)
|
||||||
|
|
||||||
# add new-hyperopt subcommand
|
|
||||||
build_hyperopt_cmd = subparsers.add_parser('new-hyperopt',
|
|
||||||
help="Create new hyperopt")
|
|
||||||
build_hyperopt_cmd.set_defaults(func=start_new_hyperopt)
|
|
||||||
self._build_args(optionlist=ARGS_BUILD_HYPEROPT, parser=build_hyperopt_cmd)
|
|
||||||
|
|
||||||
# add new-strategy subcommand
|
# add new-strategy subcommand
|
||||||
build_strategy_cmd = subparsers.add_parser('new-strategy',
|
build_strategy_cmd = subparsers.add_parser('new-strategy',
|
||||||
help="Create new strategy")
|
help="Create new strategy")
|
||||||
|
@ -7,7 +7,7 @@ import requests
|
|||||||
|
|
||||||
from freqtrade.configuration import setup_utils_configuration
|
from freqtrade.configuration import setup_utils_configuration
|
||||||
from freqtrade.configuration.directory_operations import copy_sample_files, create_userdata_dir
|
from freqtrade.configuration.directory_operations import copy_sample_files, create_userdata_dir
|
||||||
from freqtrade.constants import USERPATH_HYPEROPTS, USERPATH_STRATEGIES
|
from freqtrade.constants import USERPATH_STRATEGIES
|
||||||
from freqtrade.enums import RunMode
|
from freqtrade.enums import RunMode
|
||||||
from freqtrade.exceptions import OperationalException
|
from freqtrade.exceptions import OperationalException
|
||||||
from freqtrade.misc import render_template, render_template_with_fallback
|
from freqtrade.misc import render_template, render_template_with_fallback
|
||||||
@ -87,56 +87,6 @@ def start_new_strategy(args: Dict[str, Any]) -> None:
|
|||||||
raise OperationalException("`new-strategy` requires --strategy to be set.")
|
raise OperationalException("`new-strategy` requires --strategy to be set.")
|
||||||
|
|
||||||
|
|
||||||
def deploy_new_hyperopt(hyperopt_name: str, hyperopt_path: Path, subtemplate: str) -> None:
|
|
||||||
"""
|
|
||||||
Deploys a new hyperopt template to hyperopt_path
|
|
||||||
"""
|
|
||||||
fallback = 'full'
|
|
||||||
buy_guards = render_template_with_fallback(
|
|
||||||
templatefile=f"subtemplates/hyperopt_buy_guards_{subtemplate}.j2",
|
|
||||||
templatefallbackfile=f"subtemplates/hyperopt_buy_guards_{fallback}.j2",
|
|
||||||
)
|
|
||||||
sell_guards = render_template_with_fallback(
|
|
||||||
templatefile=f"subtemplates/hyperopt_sell_guards_{subtemplate}.j2",
|
|
||||||
templatefallbackfile=f"subtemplates/hyperopt_sell_guards_{fallback}.j2",
|
|
||||||
)
|
|
||||||
buy_space = render_template_with_fallback(
|
|
||||||
templatefile=f"subtemplates/hyperopt_buy_space_{subtemplate}.j2",
|
|
||||||
templatefallbackfile=f"subtemplates/hyperopt_buy_space_{fallback}.j2",
|
|
||||||
)
|
|
||||||
sell_space = render_template_with_fallback(
|
|
||||||
templatefile=f"subtemplates/hyperopt_sell_space_{subtemplate}.j2",
|
|
||||||
templatefallbackfile=f"subtemplates/hyperopt_sell_space_{fallback}.j2",
|
|
||||||
)
|
|
||||||
|
|
||||||
strategy_text = render_template(templatefile='base_hyperopt.py.j2',
|
|
||||||
arguments={"hyperopt": hyperopt_name,
|
|
||||||
"buy_guards": buy_guards,
|
|
||||||
"sell_guards": sell_guards,
|
|
||||||
"buy_space": buy_space,
|
|
||||||
"sell_space": sell_space,
|
|
||||||
})
|
|
||||||
|
|
||||||
logger.info(f"Writing hyperopt to `{hyperopt_path}`.")
|
|
||||||
hyperopt_path.write_text(strategy_text)
|
|
||||||
|
|
||||||
|
|
||||||
def start_new_hyperopt(args: Dict[str, Any]) -> None:
|
|
||||||
|
|
||||||
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
|
|
||||||
|
|
||||||
if 'hyperopt' in args and args['hyperopt']:
|
|
||||||
|
|
||||||
new_path = config['user_data_dir'] / USERPATH_HYPEROPTS / (args['hyperopt'] + '.py')
|
|
||||||
|
|
||||||
if new_path.exists():
|
|
||||||
raise OperationalException(f"`{new_path}` already exists. "
|
|
||||||
"Please choose another Hyperopt Name.")
|
|
||||||
deploy_new_hyperopt(args['hyperopt'], new_path, args['template'])
|
|
||||||
else:
|
|
||||||
raise OperationalException("`new-hyperopt` requires --hyperopt to be set.")
|
|
||||||
|
|
||||||
|
|
||||||
def clean_ui_subdir(directory: Path):
|
def clean_ui_subdir(directory: Path):
|
||||||
if directory.is_dir():
|
if directory.is_dir():
|
||||||
logger.info("Removing UI directory content.")
|
logger.info("Removing UI directory content.")
|
||||||
|
@ -1,137 +0,0 @@
|
|||||||
# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
|
|
||||||
|
|
||||||
# --- Do not remove these libs ---
|
|
||||||
from functools import reduce
|
|
||||||
from typing import Any, Callable, Dict, List
|
|
||||||
|
|
||||||
import numpy as np # noqa
|
|
||||||
import pandas as pd # noqa
|
|
||||||
from pandas import DataFrame
|
|
||||||
from skopt.space import Categorical, Dimension, Integer, Real # noqa
|
|
||||||
|
|
||||||
from freqtrade.optimize.hyperopt_interface import IHyperOpt
|
|
||||||
|
|
||||||
# --------------------------------
|
|
||||||
# Add your lib to import here
|
|
||||||
import talib.abstract as ta # noqa
|
|
||||||
import freqtrade.vendor.qtpylib.indicators as qtpylib
|
|
||||||
|
|
||||||
|
|
||||||
class {{ hyperopt }}(IHyperOpt):
|
|
||||||
"""
|
|
||||||
This is a Hyperopt template to get you started.
|
|
||||||
|
|
||||||
More information in the documentation: https://www.freqtrade.io/en/latest/hyperopt/
|
|
||||||
|
|
||||||
You should:
|
|
||||||
- Add any lib you need to build your hyperopt.
|
|
||||||
|
|
||||||
You must keep:
|
|
||||||
- The prototypes for the methods: populate_indicators, indicator_space, buy_strategy_generator.
|
|
||||||
|
|
||||||
The methods roi_space, generate_roi_table and stoploss_space are not required
|
|
||||||
and are provided by default.
|
|
||||||
However, you may override them if you need 'roi' and 'stoploss' spaces that
|
|
||||||
differ from the defaults offered by Freqtrade.
|
|
||||||
Sample implementation of these methods will be copied to `user_data/hyperopts` when
|
|
||||||
creating the user-data directory using `freqtrade create-userdir --userdir user_data`,
|
|
||||||
or is available online under the following URL:
|
|
||||||
https://github.com/freqtrade/freqtrade/blob/develop/freqtrade/templates/sample_hyperopt_advanced.py.
|
|
||||||
"""
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def indicator_space() -> List[Dimension]:
|
|
||||||
"""
|
|
||||||
Define your Hyperopt space for searching buy strategy parameters.
|
|
||||||
"""
|
|
||||||
return [
|
|
||||||
{{ buy_space | indent(12) }}
|
|
||||||
]
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def buy_strategy_generator(params: Dict[str, Any]) -> Callable:
|
|
||||||
"""
|
|
||||||
Define the buy strategy parameters to be used by Hyperopt.
|
|
||||||
"""
|
|
||||||
def populate_buy_trend(dataframe: DataFrame, metadata: dict) -> DataFrame:
|
|
||||||
"""
|
|
||||||
Buy strategy Hyperopt will build and use.
|
|
||||||
"""
|
|
||||||
conditions = []
|
|
||||||
|
|
||||||
# GUARDS AND TRENDS
|
|
||||||
{{ buy_guards | indent(12) }}
|
|
||||||
|
|
||||||
# TRIGGERS
|
|
||||||
if 'trigger' in params:
|
|
||||||
if params['trigger'] == 'bb_lower':
|
|
||||||
conditions.append(dataframe['close'] < dataframe['bb_lowerband'])
|
|
||||||
if params['trigger'] == 'macd_cross_signal':
|
|
||||||
conditions.append(qtpylib.crossed_above(
|
|
||||||
dataframe['macd'], dataframe['macdsignal']
|
|
||||||
))
|
|
||||||
if params['trigger'] == 'sar_reversal':
|
|
||||||
conditions.append(qtpylib.crossed_above(
|
|
||||||
dataframe['close'], dataframe['sar']
|
|
||||||
))
|
|
||||||
|
|
||||||
# Check that the candle had volume
|
|
||||||
conditions.append(dataframe['volume'] > 0)
|
|
||||||
|
|
||||||
if conditions:
|
|
||||||
dataframe.loc[
|
|
||||||
reduce(lambda x, y: x & y, conditions),
|
|
||||||
'buy'] = 1
|
|
||||||
|
|
||||||
return dataframe
|
|
||||||
|
|
||||||
return populate_buy_trend
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def sell_indicator_space() -> List[Dimension]:
|
|
||||||
"""
|
|
||||||
Define your Hyperopt space for searching sell strategy parameters.
|
|
||||||
"""
|
|
||||||
return [
|
|
||||||
{{ sell_space | indent(12) }}
|
|
||||||
]
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def sell_strategy_generator(params: Dict[str, Any]) -> Callable:
|
|
||||||
"""
|
|
||||||
Define the sell strategy parameters to be used by Hyperopt.
|
|
||||||
"""
|
|
||||||
def populate_sell_trend(dataframe: DataFrame, metadata: dict) -> DataFrame:
|
|
||||||
"""
|
|
||||||
Sell strategy Hyperopt will build and use.
|
|
||||||
"""
|
|
||||||
conditions = []
|
|
||||||
|
|
||||||
# GUARDS AND TRENDS
|
|
||||||
{{ sell_guards | indent(12) }}
|
|
||||||
|
|
||||||
# TRIGGERS
|
|
||||||
if 'sell-trigger' in params:
|
|
||||||
if params['sell-trigger'] == 'sell-bb_upper':
|
|
||||||
conditions.append(dataframe['close'] > dataframe['bb_upperband'])
|
|
||||||
if params['sell-trigger'] == 'sell-macd_cross_signal':
|
|
||||||
conditions.append(qtpylib.crossed_above(
|
|
||||||
dataframe['macdsignal'], dataframe['macd']
|
|
||||||
))
|
|
||||||
if params['sell-trigger'] == 'sell-sar_reversal':
|
|
||||||
conditions.append(qtpylib.crossed_above(
|
|
||||||
dataframe['sar'], dataframe['close']
|
|
||||||
))
|
|
||||||
|
|
||||||
# Check that the candle had volume
|
|
||||||
conditions.append(dataframe['volume'] > 0)
|
|
||||||
|
|
||||||
if conditions:
|
|
||||||
dataframe.loc[
|
|
||||||
reduce(lambda x, y: x & y, conditions),
|
|
||||||
'sell'] = 1
|
|
||||||
|
|
||||||
return dataframe
|
|
||||||
|
|
||||||
return populate_sell_trend
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
|||||||
if params.get('mfi-enabled'):
|
|
||||||
conditions.append(dataframe['mfi'] < params['mfi-value'])
|
|
||||||
if params.get('fastd-enabled'):
|
|
||||||
conditions.append(dataframe['fastd'] < params['fastd-value'])
|
|
||||||
if params.get('adx-enabled'):
|
|
||||||
conditions.append(dataframe['adx'] > params['adx-value'])
|
|
||||||
if params.get('rsi-enabled'):
|
|
||||||
conditions.append(dataframe['rsi'] < params['rsi-value'])
|
|
@ -1,2 +0,0 @@
|
|||||||
if params.get('rsi-enabled'):
|
|
||||||
conditions.append(dataframe['rsi'] < params['rsi-value'])
|
|
@ -1,9 +0,0 @@
|
|||||||
Integer(10, 25, name='mfi-value'),
|
|
||||||
Integer(15, 45, name='fastd-value'),
|
|
||||||
Integer(20, 50, name='adx-value'),
|
|
||||||
Integer(20, 40, name='rsi-value'),
|
|
||||||
Categorical([True, False], name='mfi-enabled'),
|
|
||||||
Categorical([True, False], name='fastd-enabled'),
|
|
||||||
Categorical([True, False], name='adx-enabled'),
|
|
||||||
Categorical([True, False], name='rsi-enabled'),
|
|
||||||
Categorical(['bb_lower', 'macd_cross_signal', 'sar_reversal'], name='trigger')
|
|
@ -1,3 +0,0 @@
|
|||||||
Integer(20, 40, name='rsi-value'),
|
|
||||||
Categorical([True, False], name='rsi-enabled'),
|
|
||||||
Categorical(['bb_lower', 'macd_cross_signal', 'sar_reversal'], name='trigger')
|
|
@ -1,8 +0,0 @@
|
|||||||
if params.get('sell-mfi-enabled'):
|
|
||||||
conditions.append(dataframe['mfi'] > params['sell-mfi-value'])
|
|
||||||
if params.get('sell-fastd-enabled'):
|
|
||||||
conditions.append(dataframe['fastd'] > params['sell-fastd-value'])
|
|
||||||
if params.get('sell-adx-enabled'):
|
|
||||||
conditions.append(dataframe['adx'] < params['sell-adx-value'])
|
|
||||||
if params.get('sell-rsi-enabled'):
|
|
||||||
conditions.append(dataframe['rsi'] > params['sell-rsi-value'])
|
|
@ -1,2 +0,0 @@
|
|||||||
if params.get('sell-rsi-enabled'):
|
|
||||||
conditions.append(dataframe['rsi'] > params['sell-rsi-value'])
|
|
@ -1,11 +0,0 @@
|
|||||||
Integer(75, 100, name='sell-mfi-value'),
|
|
||||||
Integer(50, 100, name='sell-fastd-value'),
|
|
||||||
Integer(50, 100, name='sell-adx-value'),
|
|
||||||
Integer(60, 100, name='sell-rsi-value'),
|
|
||||||
Categorical([True, False], name='sell-mfi-enabled'),
|
|
||||||
Categorical([True, False], name='sell-fastd-enabled'),
|
|
||||||
Categorical([True, False], name='sell-adx-enabled'),
|
|
||||||
Categorical([True, False], name='sell-rsi-enabled'),
|
|
||||||
Categorical(['sell-bb_upper',
|
|
||||||
'sell-macd_cross_signal',
|
|
||||||
'sell-sar_reversal'], name='sell-trigger')
|
|
@ -1,5 +0,0 @@
|
|||||||
Integer(60, 100, name='sell-rsi-value'),
|
|
||||||
Categorical([True, False], name='sell-rsi-enabled'),
|
|
||||||
Categorical(['sell-bb_upper',
|
|
||||||
'sell-macd_cross_signal',
|
|
||||||
'sell-sar_reversal'], name='sell-trigger')
|
|
@ -12,7 +12,7 @@ from freqtrade.commands import (start_convert_data, start_create_userdir, start_
|
|||||||
start_hyperopt_list, start_hyperopt_show, start_install_ui,
|
start_hyperopt_list, start_hyperopt_show, start_install_ui,
|
||||||
start_list_data, start_list_exchanges, start_list_hyperopts,
|
start_list_data, start_list_exchanges, start_list_hyperopts,
|
||||||
start_list_markets, start_list_strategies, start_list_timeframes,
|
start_list_markets, start_list_strategies, start_list_timeframes,
|
||||||
start_new_hyperopt, start_new_strategy, start_show_trades,
|
start_new_strategy, start_show_trades,
|
||||||
start_test_pairlist, start_trading, start_webserver)
|
start_test_pairlist, start_trading, start_webserver)
|
||||||
from freqtrade.commands.deploy_commands import (clean_ui_subdir, download_and_install_ui,
|
from freqtrade.commands.deploy_commands import (clean_ui_subdir, download_and_install_ui,
|
||||||
get_ui_download_url, read_ui_version)
|
get_ui_download_url, read_ui_version)
|
||||||
@ -519,37 +519,6 @@ def test_start_new_strategy_no_arg(mocker, caplog):
|
|||||||
start_new_strategy(get_args(args))
|
start_new_strategy(get_args(args))
|
||||||
|
|
||||||
|
|
||||||
def test_start_new_hyperopt(mocker, caplog):
|
|
||||||
wt_mock = mocker.patch.object(Path, "write_text", MagicMock())
|
|
||||||
mocker.patch.object(Path, "exists", MagicMock(return_value=False))
|
|
||||||
|
|
||||||
args = [
|
|
||||||
"new-hyperopt",
|
|
||||||
"--hyperopt",
|
|
||||||
"CoolNewhyperopt"
|
|
||||||
]
|
|
||||||
start_new_hyperopt(get_args(args))
|
|
||||||
|
|
||||||
assert wt_mock.call_count == 1
|
|
||||||
assert "CoolNewhyperopt" in wt_mock.call_args_list[0][0][0]
|
|
||||||
assert log_has_re("Writing hyperopt to .*", caplog)
|
|
||||||
|
|
||||||
mocker.patch('freqtrade.commands.deploy_commands.setup_utils_configuration')
|
|
||||||
mocker.patch.object(Path, "exists", MagicMock(return_value=True))
|
|
||||||
with pytest.raises(OperationalException,
|
|
||||||
match=r".* already exists. Please choose another Hyperopt Name\."):
|
|
||||||
start_new_hyperopt(get_args(args))
|
|
||||||
|
|
||||||
|
|
||||||
def test_start_new_hyperopt_no_arg(mocker):
|
|
||||||
args = [
|
|
||||||
"new-hyperopt",
|
|
||||||
]
|
|
||||||
with pytest.raises(OperationalException,
|
|
||||||
match="`new-hyperopt` requires --hyperopt to be set."):
|
|
||||||
start_new_hyperopt(get_args(args))
|
|
||||||
|
|
||||||
|
|
||||||
def test_start_install_ui(mocker):
|
def test_start_install_ui(mocker):
|
||||||
clean_mock = mocker.patch('freqtrade.commands.deploy_commands.clean_ui_subdir')
|
clean_mock = mocker.patch('freqtrade.commands.deploy_commands.clean_ui_subdir')
|
||||||
get_url_mock = mocker.patch('freqtrade.commands.deploy_commands.get_ui_download_url',
|
get_url_mock = mocker.patch('freqtrade.commands.deploy_commands.get_ui_download_url',
|
||||||
|
Loading…
Reference in New Issue
Block a user