2018-02-12 06:10:21 +00:00
|
|
|
"""
|
|
|
|
This module contains the argument manager class
|
|
|
|
"""
|
2024-05-12 14:27:03 +00:00
|
|
|
|
2024-07-03 09:55:55 +00:00
|
|
|
from argparse import ArgumentParser, Namespace, _ArgumentGroup
|
2019-10-13 10:12:20 +00:00
|
|
|
from functools import partial
|
2019-09-03 04:48:51 +00:00
|
|
|
from pathlib import Path
|
2024-11-07 20:37:33 +00:00
|
|
|
from typing import Any
|
2019-07-11 18:23:23 +00:00
|
|
|
|
2020-01-26 12:41:04 +00:00
|
|
|
from freqtrade.commands.cli_options import AVAILABLE_CLI_OPTIONS
|
2020-02-11 19:38:29 +00:00
|
|
|
from freqtrade.constants import DEFAULT_CONFIG
|
2019-07-06 22:20:26 +00:00
|
|
|
|
2020-09-28 17:39:41 +00:00
|
|
|
|
2019-07-21 12:32:29 +00:00
|
|
|
ARGS_COMMON = ["verbosity", "logfile", "version", "config", "datadir", "user_data_dir"]
|
2019-07-06 22:20:26 +00:00
|
|
|
|
2024-05-12 14:27:03 +00:00
|
|
|
ARGS_STRATEGY = [
|
|
|
|
"strategy",
|
|
|
|
"strategy_path",
|
|
|
|
"recursive_strategy_search",
|
|
|
|
"freqaimodel",
|
|
|
|
"freqaimodel_path",
|
|
|
|
]
|
2019-06-22 18:10:35 +00:00
|
|
|
|
2021-03-14 18:37:30 +00:00
|
|
|
ARGS_TRADE = ["db_url", "sd_notify", "dry_run", "dry_run_wallet", "fee"]
|
2019-06-22 18:10:35 +00:00
|
|
|
|
2024-10-04 04:37:49 +00:00
|
|
|
ARGS_WEBSERVER: list[str] = []
|
2020-05-22 17:57:17 +00:00
|
|
|
|
2024-05-12 14:27:03 +00:00
|
|
|
ARGS_COMMON_OPTIMIZE = [
|
|
|
|
"timeframe",
|
|
|
|
"timerange",
|
|
|
|
"dataformat_ohlcv",
|
|
|
|
"max_open_trades",
|
|
|
|
"stake_amount",
|
|
|
|
"fee",
|
|
|
|
"pairs",
|
|
|
|
]
|
|
|
|
|
|
|
|
ARGS_BACKTEST = ARGS_COMMON_OPTIMIZE + [
|
|
|
|
"position_stacking",
|
|
|
|
"enable_protections",
|
|
|
|
"dry_run_wallet",
|
|
|
|
"timeframe_detail",
|
|
|
|
"strategy_list",
|
|
|
|
"export",
|
|
|
|
"exportfilename",
|
|
|
|
"backtest_breakdown",
|
|
|
|
"backtest_cache",
|
|
|
|
"freqai_backtest_live_models",
|
|
|
|
]
|
|
|
|
|
|
|
|
ARGS_HYPEROPT = ARGS_COMMON_OPTIMIZE + [
|
|
|
|
"hyperopt",
|
|
|
|
"hyperopt_path",
|
|
|
|
"position_stacking",
|
|
|
|
"enable_protections",
|
|
|
|
"dry_run_wallet",
|
|
|
|
"timeframe_detail",
|
|
|
|
"epochs",
|
|
|
|
"spaces",
|
|
|
|
"print_all",
|
|
|
|
"print_colorized",
|
|
|
|
"print_json",
|
|
|
|
"hyperopt_jobs",
|
|
|
|
"hyperopt_random_state",
|
|
|
|
"hyperopt_min_trades",
|
|
|
|
"hyperopt_loss",
|
|
|
|
"disableparamexport",
|
|
|
|
"hyperopt_ignore_missing_space",
|
|
|
|
"analyze_per_epoch",
|
|
|
|
]
|
2019-06-22 18:10:35 +00:00
|
|
|
|
|
|
|
ARGS_EDGE = ARGS_COMMON_OPTIMIZE + ["stoploss_range"]
|
|
|
|
|
2024-05-12 14:27:03 +00:00
|
|
|
ARGS_LIST_STRATEGIES = [
|
|
|
|
"strategy_path",
|
|
|
|
"print_one_column",
|
|
|
|
"print_colorized",
|
|
|
|
"recursive_strategy_search",
|
|
|
|
]
|
2019-12-22 15:08:33 +00:00
|
|
|
|
2022-10-14 16:20:49 +00:00
|
|
|
ARGS_LIST_FREQAIMODELS = ["freqaimodel_path", "print_one_column", "print_colorized"]
|
|
|
|
|
2020-02-14 19:28:49 +00:00
|
|
|
ARGS_LIST_HYPEROPTS = ["hyperopt_path", "print_one_column", "print_colorized"]
|
2020-02-02 15:48:29 +00:00
|
|
|
|
2023-04-24 08:35:46 +00:00
|
|
|
ARGS_BACKTEST_SHOW = ["exportfilename", "backtest_show_pair_list", "backtest_breakdown"]
|
2021-06-17 18:35:02 +00:00
|
|
|
|
2019-09-30 21:33:33 +00:00
|
|
|
ARGS_LIST_EXCHANGES = ["print_one_column", "list_exchanges_all"]
|
2019-06-22 18:10:35 +00:00
|
|
|
|
2019-09-29 08:54:20 +00:00
|
|
|
ARGS_LIST_TIMEFRAMES = ["exchange", "print_one_column"]
|
2019-06-22 18:10:35 +00:00
|
|
|
|
2024-05-12 14:27:03 +00:00
|
|
|
ARGS_LIST_PAIRS = [
|
|
|
|
"exchange",
|
|
|
|
"print_list",
|
|
|
|
"list_pairs_print_json",
|
|
|
|
"print_one_column",
|
|
|
|
"print_csv",
|
|
|
|
"base_currencies",
|
|
|
|
"quote_currencies",
|
|
|
|
"list_pairs_all",
|
|
|
|
"trading_mode",
|
|
|
|
]
|
|
|
|
|
|
|
|
ARGS_TEST_PAIRLIST = [
|
|
|
|
"user_data_dir",
|
|
|
|
"verbosity",
|
|
|
|
"config",
|
|
|
|
"quote_currencies",
|
|
|
|
"print_one_column",
|
|
|
|
"list_pairs_print_json",
|
|
|
|
"exchange",
|
|
|
|
]
|
2019-11-30 18:53:22 +00:00
|
|
|
|
2019-11-01 13:08:55 +00:00
|
|
|
ARGS_CREATE_USERDIR = ["user_data_dir", "reset"]
|
2019-07-21 12:13:38 +00:00
|
|
|
|
2020-01-28 19:30:03 +00:00
|
|
|
ARGS_BUILD_CONFIG = ["config"]
|
2024-03-20 06:06:24 +00:00
|
|
|
ARGS_SHOW_CONFIG = ["user_data_dir", "config", "show_sensitive"]
|
2020-01-28 19:30:03 +00:00
|
|
|
|
2019-11-21 06:21:19 +00:00
|
|
|
ARGS_BUILD_STRATEGY = ["user_data_dir", "strategy", "template"]
|
2019-11-01 15:04:44 +00:00
|
|
|
|
2023-09-24 18:11:58 +00:00
|
|
|
ARGS_CONVERT_DATA_TRADES = ["pairs", "format_from_trades", "format_to", "erase", "exchange"]
|
2022-09-19 18:17:58 +00:00
|
|
|
ARGS_CONVERT_DATA = ["pairs", "format_from", "format_to", "erase", "exchange"]
|
2023-07-09 13:02:47 +00:00
|
|
|
ARGS_CONVERT_DATA_OHLCV = ARGS_CONVERT_DATA + ["timeframes", "trading_mode", "candle_types"]
|
2019-12-23 09:59:26 +00:00
|
|
|
|
2024-05-12 14:27:03 +00:00
|
|
|
ARGS_CONVERT_TRADES = [
|
|
|
|
"pairs",
|
|
|
|
"timeframes",
|
|
|
|
"exchange",
|
|
|
|
"dataformat_ohlcv",
|
|
|
|
"dataformat_trades",
|
|
|
|
"trading_mode",
|
|
|
|
]
|
2021-09-29 14:50:05 +00:00
|
|
|
|
2024-08-13 04:46:02 +00:00
|
|
|
ARGS_LIST_DATA = [
|
|
|
|
"exchange",
|
|
|
|
"dataformat_ohlcv",
|
|
|
|
"dataformat_trades",
|
|
|
|
"trades",
|
|
|
|
"pairs",
|
|
|
|
"trading_mode",
|
|
|
|
"show_timerange",
|
|
|
|
]
|
2020-07-12 07:57:00 +00:00
|
|
|
|
2024-05-12 14:27:03 +00:00
|
|
|
ARGS_DOWNLOAD_DATA = [
|
|
|
|
"pairs",
|
|
|
|
"pairs_file",
|
|
|
|
"days",
|
|
|
|
"new_pairs_days",
|
|
|
|
"include_inactive",
|
|
|
|
"timerange",
|
|
|
|
"download_trades",
|
2024-05-18 18:11:12 +00:00
|
|
|
"convert_trades",
|
2024-05-12 14:27:03 +00:00
|
|
|
"exchange",
|
|
|
|
"timeframes",
|
|
|
|
"erase",
|
|
|
|
"dataformat_ohlcv",
|
|
|
|
"dataformat_trades",
|
|
|
|
"trading_mode",
|
|
|
|
"prepend_data",
|
|
|
|
]
|
|
|
|
|
|
|
|
ARGS_PLOT_DATAFRAME = [
|
|
|
|
"pairs",
|
|
|
|
"indicators1",
|
|
|
|
"indicators2",
|
|
|
|
"plot_limit",
|
|
|
|
"db_url",
|
|
|
|
"trade_source",
|
|
|
|
"export",
|
|
|
|
"exportfilename",
|
|
|
|
"timerange",
|
|
|
|
"timeframe",
|
|
|
|
"no_trades",
|
|
|
|
]
|
|
|
|
|
|
|
|
ARGS_PLOT_PROFIT = [
|
|
|
|
"pairs",
|
|
|
|
"timerange",
|
|
|
|
"export",
|
|
|
|
"exportfilename",
|
|
|
|
"db_url",
|
|
|
|
"trade_source",
|
|
|
|
"timeframe",
|
|
|
|
"plot_auto_open",
|
|
|
|
]
|
2019-06-22 18:27:29 +00:00
|
|
|
|
2022-05-10 05:01:41 +00:00
|
|
|
ARGS_CONVERT_DB = ["db_url", "db_url_from"]
|
2022-05-09 05:21:10 +00:00
|
|
|
|
|
|
|
ARGS_INSTALL_UI = ["erase_ui_only", "ui_version"]
|
2021-01-16 09:15:27 +00:00
|
|
|
|
2020-05-02 09:26:12 +00:00
|
|
|
ARGS_SHOW_TRADES = ["db_url", "trade_ids", "print_json"]
|
2019-06-22 18:27:29 +00:00
|
|
|
|
2024-05-12 14:27:03 +00:00
|
|
|
ARGS_HYPEROPT_LIST = [
|
|
|
|
"hyperopt_list_best",
|
|
|
|
"hyperopt_list_profitable",
|
|
|
|
"hyperopt_list_min_trades",
|
|
|
|
"hyperopt_list_max_trades",
|
|
|
|
"hyperopt_list_min_avg_time",
|
|
|
|
"hyperopt_list_max_avg_time",
|
|
|
|
"hyperopt_list_min_avg_profit",
|
|
|
|
"hyperopt_list_max_avg_profit",
|
|
|
|
"hyperopt_list_min_total_profit",
|
|
|
|
"hyperopt_list_max_total_profit",
|
|
|
|
"hyperopt_list_min_objective",
|
|
|
|
"hyperopt_list_max_objective",
|
|
|
|
"print_colorized",
|
|
|
|
"print_json",
|
|
|
|
"hyperopt_list_no_details",
|
|
|
|
"hyperoptexportfilename",
|
|
|
|
"export_csv",
|
|
|
|
]
|
|
|
|
|
|
|
|
ARGS_HYPEROPT_SHOW = [
|
|
|
|
"hyperopt_list_best",
|
|
|
|
"hyperopt_list_profitable",
|
|
|
|
"hyperopt_show_index",
|
|
|
|
"print_json",
|
|
|
|
"hyperoptexportfilename",
|
|
|
|
"hyperopt_show_no_header",
|
|
|
|
"disableparamexport",
|
|
|
|
"backtest_breakdown",
|
|
|
|
]
|
|
|
|
|
|
|
|
ARGS_ANALYZE_ENTRIES_EXITS = [
|
|
|
|
"exportfilename",
|
|
|
|
"analysis_groups",
|
|
|
|
"enter_reason_list",
|
|
|
|
"exit_reason_list",
|
|
|
|
"indicator_list",
|
2024-09-10 09:51:56 +00:00
|
|
|
"entry_only",
|
|
|
|
"exit_only",
|
2024-05-12 14:27:03 +00:00
|
|
|
"timerange",
|
|
|
|
"analysis_rejected",
|
|
|
|
"analysis_to_csv",
|
|
|
|
"analysis_csv_path",
|
|
|
|
]
|
|
|
|
|
2024-07-03 10:01:13 +00:00
|
|
|
|
|
|
|
ARGS_STRATEGY_UPDATER = ["strategy_list", "strategy_path", "recursive_strategy_search"]
|
|
|
|
|
|
|
|
ARGS_LOOKAHEAD_ANALYSIS = [
|
|
|
|
a
|
|
|
|
for a in ARGS_BACKTEST
|
2024-11-02 15:49:26 +00:00
|
|
|
if a not in ("position_stacking", "backtest_cache", "backtest_breakdown")
|
2024-07-03 10:01:13 +00:00
|
|
|
] + ["minimum_trade_amount", "targeted_trade_amount", "lookahead_analysis_exportfilename"]
|
|
|
|
|
|
|
|
ARGS_RECURSIVE_ANALYSIS = ["timeframe", "timerange", "dataformat_ohlcv", "pairs", "startup_candle"]
|
|
|
|
|
|
|
|
# Command level configs - keep at the bottom of the above definitions
|
2024-05-12 14:27:03 +00:00
|
|
|
NO_CONF_REQURIED = [
|
|
|
|
"convert-data",
|
|
|
|
"convert-trade-data",
|
|
|
|
"download-data",
|
|
|
|
"list-timeframes",
|
|
|
|
"list-markets",
|
|
|
|
"list-pairs",
|
|
|
|
"list-strategies",
|
|
|
|
"list-freqaimodels",
|
2024-10-21 17:10:36 +00:00
|
|
|
"list-hyperoptloss",
|
2024-05-12 14:27:03 +00:00
|
|
|
"list-data",
|
|
|
|
"hyperopt-list",
|
|
|
|
"hyperopt-show",
|
|
|
|
"backtest-filter",
|
|
|
|
"plot-dataframe",
|
|
|
|
"plot-profit",
|
|
|
|
"show-trades",
|
|
|
|
"trades-to-ohlcv",
|
|
|
|
"strategy-updater",
|
|
|
|
]
|
2019-09-30 05:28:49 +00:00
|
|
|
|
2021-09-11 06:36:57 +00:00
|
|
|
NO_CONF_ALLOWED = ["create-userdir", "list-exchanges", "new-strategy"]
|
2019-08-16 12:42:44 +00:00
|
|
|
|
2023-03-22 11:32:39 +00:00
|
|
|
|
2019-09-12 01:39:52 +00:00
|
|
|
class Arguments:
|
2018-02-12 06:10:21 +00:00
|
|
|
"""
|
|
|
|
Arguments Class. Manage the arguments received by the cli
|
|
|
|
"""
|
2019-11-30 18:53:22 +00:00
|
|
|
|
2024-11-07 20:37:33 +00:00
|
|
|
def __init__(self, args: list[str] | None) -> None:
|
2018-02-12 06:10:21 +00:00
|
|
|
self.args = args
|
2024-11-07 20:37:33 +00:00
|
|
|
self._parsed_arg: Namespace | None = None
|
2018-02-12 06:10:21 +00:00
|
|
|
|
2024-10-04 04:37:49 +00:00
|
|
|
def get_parsed_arg(self) -> dict[str, Any]:
|
2018-02-12 06:10:21 +00:00
|
|
|
"""
|
|
|
|
Return the list of arguments
|
|
|
|
:return: List[str] List of arguments
|
|
|
|
"""
|
2019-07-18 14:55:35 +00:00
|
|
|
if self._parsed_arg is None:
|
2019-09-04 15:14:04 +00:00
|
|
|
self._build_subcommands()
|
2019-07-18 14:55:35 +00:00
|
|
|
self._parsed_arg = self._parse_args()
|
2018-02-12 06:10:21 +00:00
|
|
|
|
2019-09-12 18:14:58 +00:00
|
|
|
return vars(self._parsed_arg)
|
2018-02-12 06:10:21 +00:00
|
|
|
|
2024-07-03 09:55:55 +00:00
|
|
|
def _parse_args(self) -> Namespace:
|
2018-02-12 06:10:21 +00:00
|
|
|
"""
|
|
|
|
Parses given arguments and returns an argparse Namespace instance.
|
|
|
|
"""
|
|
|
|
parsed_arg = self.parser.parse_args(self.args)
|
|
|
|
|
2019-02-19 12:14:47 +00:00
|
|
|
# Workaround issue in argparse with action='append' and default value
|
|
|
|
# (see https://bugs.python.org/issue16399)
|
2019-08-16 12:42:44 +00:00
|
|
|
# Allow no-config for certain commands (like downloading / plotting)
|
2024-05-12 14:27:03 +00:00
|
|
|
if "config" in parsed_arg and parsed_arg.config is None:
|
|
|
|
conf_required = "command" in parsed_arg and parsed_arg.command in NO_CONF_REQURIED
|
2020-02-11 19:38:29 +00:00
|
|
|
|
2024-05-12 14:27:03 +00:00
|
|
|
if "user_data_dir" in parsed_arg and parsed_arg.user_data_dir is not None:
|
2020-02-14 19:04:05 +00:00
|
|
|
user_dir = parsed_arg.user_data_dir
|
|
|
|
else:
|
|
|
|
# Default case
|
2024-05-12 14:27:03 +00:00
|
|
|
user_dir = "user_data"
|
2020-02-11 19:38:29 +00:00
|
|
|
# Try loading from "user_data/config.json"
|
2020-02-14 19:04:05 +00:00
|
|
|
cfgfile = Path(user_dir) / DEFAULT_CONFIG
|
|
|
|
if cfgfile.is_file():
|
|
|
|
parsed_arg.config = [str(cfgfile)]
|
2020-02-11 19:38:29 +00:00
|
|
|
else:
|
|
|
|
# Else use "config.json".
|
|
|
|
cfgfile = Path.cwd() / DEFAULT_CONFIG
|
|
|
|
if cfgfile.is_file() or not conf_required:
|
|
|
|
parsed_arg.config = [DEFAULT_CONFIG]
|
2019-02-19 12:14:47 +00:00
|
|
|
|
2018-02-12 06:10:21 +00:00
|
|
|
return parsed_arg
|
|
|
|
|
2024-11-07 20:37:33 +00:00
|
|
|
def _build_args(self, optionlist: list[str], parser: ArgumentParser | _ArgumentGroup) -> None:
|
2019-06-22 18:10:35 +00:00
|
|
|
for val in optionlist:
|
|
|
|
opt = AVAILABLE_CLI_OPTIONS[val]
|
2019-07-02 18:33:27 +00:00
|
|
|
parser.add_argument(*opt.cli, dest=val, **opt.kwargs)
|
2019-06-22 18:10:35 +00:00
|
|
|
|
2018-02-12 06:10:21 +00:00
|
|
|
def _build_subcommands(self) -> None:
|
|
|
|
"""
|
2019-06-18 22:53:38 +00:00
|
|
|
Builds and attaches all subcommands.
|
2018-02-12 06:10:21 +00:00
|
|
|
:return: None
|
|
|
|
"""
|
2019-09-04 15:14:04 +00:00
|
|
|
# Build shared arguments (as group Common Options)
|
2024-07-03 09:55:55 +00:00
|
|
|
_common_parser = ArgumentParser(add_help=False)
|
2019-09-29 14:25:25 +00:00
|
|
|
group = _common_parser.add_argument_group("Common arguments")
|
2019-09-04 15:14:04 +00:00
|
|
|
self._build_args(optionlist=ARGS_COMMON, parser=group)
|
|
|
|
|
2024-07-03 09:55:55 +00:00
|
|
|
_strategy_parser = ArgumentParser(add_help=False)
|
2019-09-29 14:28:14 +00:00
|
|
|
strategy_group = _strategy_parser.add_argument_group("Strategy arguments")
|
2019-09-29 14:25:25 +00:00
|
|
|
self._build_args(optionlist=ARGS_STRATEGY, parser=strategy_group)
|
|
|
|
|
2019-09-04 15:14:04 +00:00
|
|
|
# Build main command
|
2024-07-03 09:55:55 +00:00
|
|
|
self.parser = ArgumentParser(
|
2024-05-12 14:27:03 +00:00
|
|
|
prog="freqtrade", description="Free, open source crypto trading bot"
|
2024-04-27 06:48:40 +00:00
|
|
|
)
|
2024-05-12 14:27:03 +00:00
|
|
|
self._build_args(optionlist=["version"], parser=self.parser)
|
2019-09-04 15:14:04 +00:00
|
|
|
|
2024-05-12 13:18:32 +00:00
|
|
|
from freqtrade.commands import (
|
|
|
|
start_analysis_entries_exits,
|
|
|
|
start_backtesting,
|
|
|
|
start_backtesting_show,
|
|
|
|
start_convert_data,
|
|
|
|
start_convert_db,
|
|
|
|
start_convert_trades,
|
|
|
|
start_create_userdir,
|
|
|
|
start_download_data,
|
|
|
|
start_edge,
|
|
|
|
start_hyperopt,
|
|
|
|
start_hyperopt_list,
|
|
|
|
start_hyperopt_show,
|
|
|
|
start_install_ui,
|
|
|
|
start_list_data,
|
|
|
|
start_list_exchanges,
|
|
|
|
start_list_freqAI_models,
|
2024-10-21 17:10:36 +00:00
|
|
|
start_list_hyperopt_loss_functions,
|
2024-05-12 13:18:32 +00:00
|
|
|
start_list_markets,
|
|
|
|
start_list_strategies,
|
|
|
|
start_list_timeframes,
|
|
|
|
start_lookahead_analysis,
|
|
|
|
start_new_config,
|
|
|
|
start_new_strategy,
|
|
|
|
start_plot_dataframe,
|
|
|
|
start_plot_profit,
|
|
|
|
start_recursive_analysis,
|
|
|
|
start_show_config,
|
|
|
|
start_show_trades,
|
|
|
|
start_strategy_update,
|
|
|
|
start_test_pairlist,
|
|
|
|
start_trading,
|
|
|
|
start_webserver,
|
|
|
|
)
|
2019-09-14 09:16:14 +00:00
|
|
|
|
2024-05-12 14:27:03 +00:00
|
|
|
subparsers = self.parser.add_subparsers(
|
|
|
|
dest="command",
|
|
|
|
# Use custom message when no subhandler is added
|
|
|
|
# shown from `main.py`
|
|
|
|
# required=True
|
|
|
|
)
|
2018-02-12 06:10:21 +00:00
|
|
|
|
2019-09-14 09:16:14 +00:00
|
|
|
# Add trade subcommand
|
2024-01-13 07:18:30 +00:00
|
|
|
trade_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"trade", help="Trade module.", parents=[_common_parser, _strategy_parser]
|
2024-01-13 07:18:30 +00:00
|
|
|
)
|
2019-09-14 09:16:14 +00:00
|
|
|
trade_cmd.set_defaults(func=start_trading)
|
2019-09-29 14:25:25 +00:00
|
|
|
self._build_args(optionlist=ARGS_TRADE, parser=trade_cmd)
|
2018-02-12 06:10:21 +00:00
|
|
|
|
2019-08-30 18:42:14 +00:00
|
|
|
# add create-userdir subcommand
|
2024-01-13 07:18:30 +00:00
|
|
|
create_userdir_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"create-userdir",
|
2024-01-13 07:18:30 +00:00
|
|
|
help="Create user-data directory.",
|
|
|
|
)
|
2019-07-21 12:13:38 +00:00
|
|
|
create_userdir_cmd.set_defaults(func=start_create_userdir)
|
|
|
|
self._build_args(optionlist=ARGS_CREATE_USERDIR, parser=create_userdir_cmd)
|
|
|
|
|
2020-01-28 19:30:03 +00:00
|
|
|
# add new-config subcommand
|
2024-01-13 07:18:30 +00:00
|
|
|
build_config_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"new-config",
|
2024-01-13 15:46:03 +00:00
|
|
|
help="Create new config",
|
2024-01-13 07:18:30 +00:00
|
|
|
)
|
2020-01-28 19:30:03 +00:00
|
|
|
build_config_cmd.set_defaults(func=start_new_config)
|
|
|
|
self._build_args(optionlist=ARGS_BUILD_CONFIG, parser=build_config_cmd)
|
|
|
|
|
2024-03-14 19:39:34 +00:00
|
|
|
# add show-config subcommand
|
|
|
|
show_config_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"show-config",
|
2024-03-14 19:39:34 +00:00
|
|
|
help="Show resolved config",
|
|
|
|
)
|
|
|
|
show_config_cmd.set_defaults(func=start_show_config)
|
|
|
|
self._build_args(optionlist=ARGS_SHOW_CONFIG, parser=show_config_cmd)
|
|
|
|
|
2019-11-01 15:04:44 +00:00
|
|
|
# add new-strategy subcommand
|
2024-01-13 07:18:30 +00:00
|
|
|
build_strategy_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"new-strategy",
|
2024-01-13 15:46:03 +00:00
|
|
|
help="Create new strategy",
|
2024-01-13 07:18:30 +00:00
|
|
|
)
|
2019-11-01 15:04:44 +00:00
|
|
|
build_strategy_cmd.set_defaults(func=start_new_strategy)
|
|
|
|
self._build_args(optionlist=ARGS_BUILD_STRATEGY, parser=build_strategy_cmd)
|
|
|
|
|
2020-05-22 04:57:20 +00:00
|
|
|
# Add download-data subcommand
|
|
|
|
download_data_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"download-data",
|
|
|
|
help="Download backtesting data.",
|
2020-05-22 04:57:20 +00:00
|
|
|
parents=[_common_parser],
|
|
|
|
)
|
|
|
|
download_data_cmd.set_defaults(func=start_download_data)
|
|
|
|
self._build_args(optionlist=ARGS_DOWNLOAD_DATA, parser=download_data_cmd)
|
2019-11-02 09:42:17 +00:00
|
|
|
|
2020-05-22 04:57:20 +00:00
|
|
|
# Add convert-data subcommand
|
|
|
|
convert_data_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"convert-data",
|
|
|
|
help="Convert candle (OHLCV) data from one format to another.",
|
2019-12-22 15:08:33 +00:00
|
|
|
parents=[_common_parser],
|
|
|
|
)
|
2020-05-22 04:57:20 +00:00
|
|
|
convert_data_cmd.set_defaults(func=partial(start_convert_data, ohlcv=True))
|
|
|
|
self._build_args(optionlist=ARGS_CONVERT_DATA_OHLCV, parser=convert_data_cmd)
|
2019-12-22 15:08:33 +00:00
|
|
|
|
2020-05-22 04:57:20 +00:00
|
|
|
# Add convert-trade-data subcommand
|
|
|
|
convert_trade_data_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"convert-trade-data",
|
|
|
|
help="Convert trade data from one format to another.",
|
2020-02-02 15:48:29 +00:00
|
|
|
parents=[_common_parser],
|
|
|
|
)
|
2020-05-22 04:57:20 +00:00
|
|
|
convert_trade_data_cmd.set_defaults(func=partial(start_convert_data, ohlcv=False))
|
2023-09-24 18:11:58 +00:00
|
|
|
self._build_args(optionlist=ARGS_CONVERT_DATA_TRADES, parser=convert_trade_data_cmd)
|
2020-05-22 04:57:20 +00:00
|
|
|
|
2021-09-29 14:50:05 +00:00
|
|
|
# Add trades-to-ohlcv subcommand
|
|
|
|
convert_trade_data_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"trades-to-ohlcv",
|
|
|
|
help="Convert trade data to OHLCV data.",
|
2021-09-29 14:50:05 +00:00
|
|
|
parents=[_common_parser],
|
|
|
|
)
|
|
|
|
convert_trade_data_cmd.set_defaults(func=start_convert_trades)
|
|
|
|
self._build_args(optionlist=ARGS_CONVERT_TRADES, parser=convert_trade_data_cmd)
|
|
|
|
|
2020-07-12 07:57:00 +00:00
|
|
|
# Add list-data subcommand
|
|
|
|
list_data_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"list-data",
|
2024-08-13 05:02:53 +00:00
|
|
|
help="List downloaded data.",
|
2020-07-12 07:57:00 +00:00
|
|
|
parents=[_common_parser],
|
|
|
|
)
|
|
|
|
list_data_cmd.set_defaults(func=start_list_data)
|
|
|
|
self._build_args(optionlist=ARGS_LIST_DATA, parser=list_data_cmd)
|
|
|
|
|
2020-05-22 04:55:20 +00:00
|
|
|
# Add backtesting subcommand
|
2024-01-13 07:18:30 +00:00
|
|
|
backtesting_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"backtesting", help="Backtesting module.", parents=[_common_parser, _strategy_parser]
|
2024-01-13 07:18:30 +00:00
|
|
|
)
|
2020-05-22 04:55:20 +00:00
|
|
|
backtesting_cmd.set_defaults(func=start_backtesting)
|
|
|
|
self._build_args(optionlist=ARGS_BACKTEST, parser=backtesting_cmd)
|
|
|
|
|
2021-10-31 08:55:19 +00:00
|
|
|
# Add backtesting-show subcommand
|
|
|
|
backtesting_show_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"backtesting-show",
|
|
|
|
help="Show past Backtest results",
|
2021-06-17 18:35:02 +00:00
|
|
|
parents=[_common_parser],
|
|
|
|
)
|
2021-10-31 08:55:19 +00:00
|
|
|
backtesting_show_cmd.set_defaults(func=start_backtesting_show)
|
|
|
|
self._build_args(optionlist=ARGS_BACKTEST_SHOW, parser=backtesting_show_cmd)
|
2021-06-17 18:35:02 +00:00
|
|
|
|
2022-05-30 18:26:24 +00:00
|
|
|
# Add backtesting analysis subcommand
|
2024-01-13 07:18:30 +00:00
|
|
|
analysis_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"backtesting-analysis", help="Backtest Analysis module.", parents=[_common_parser]
|
2024-01-13 07:18:30 +00:00
|
|
|
)
|
2022-05-30 18:26:24 +00:00
|
|
|
analysis_cmd.set_defaults(func=start_analysis_entries_exits)
|
|
|
|
self._build_args(optionlist=ARGS_ANALYZE_ENTRIES_EXITS, parser=analysis_cmd)
|
|
|
|
|
2020-05-22 04:55:20 +00:00
|
|
|
# Add edge subcommand
|
2024-01-13 15:46:03 +00:00
|
|
|
edge_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"edge", help="Edge module.", parents=[_common_parser, _strategy_parser]
|
2024-01-13 15:46:03 +00:00
|
|
|
)
|
2020-05-22 04:55:20 +00:00
|
|
|
edge_cmd.set_defaults(func=start_edge)
|
|
|
|
self._build_args(optionlist=ARGS_EDGE, parser=edge_cmd)
|
|
|
|
|
2020-05-22 04:57:20 +00:00
|
|
|
# Add hyperopt subcommand
|
2024-01-13 15:46:03 +00:00
|
|
|
hyperopt_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"hyperopt",
|
|
|
|
help="Hyperopt module.",
|
2024-01-13 15:46:03 +00:00
|
|
|
parents=[_common_parser, _strategy_parser],
|
|
|
|
)
|
2020-05-22 04:57:20 +00:00
|
|
|
hyperopt_cmd.set_defaults(func=start_hyperopt)
|
|
|
|
self._build_args(optionlist=ARGS_HYPEROPT, parser=hyperopt_cmd)
|
|
|
|
|
|
|
|
# Add hyperopt-list subcommand
|
|
|
|
hyperopt_list_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"hyperopt-list",
|
|
|
|
help="List Hyperopt results",
|
2020-05-22 04:57:20 +00:00
|
|
|
parents=[_common_parser],
|
|
|
|
)
|
|
|
|
hyperopt_list_cmd.set_defaults(func=start_hyperopt_list)
|
|
|
|
self._build_args(optionlist=ARGS_HYPEROPT_LIST, parser=hyperopt_list_cmd)
|
|
|
|
|
|
|
|
# Add hyperopt-show subcommand
|
|
|
|
hyperopt_show_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"hyperopt-show",
|
|
|
|
help="Show details of Hyperopt results",
|
2020-05-22 04:57:20 +00:00
|
|
|
parents=[_common_parser],
|
|
|
|
)
|
|
|
|
hyperopt_show_cmd.set_defaults(func=start_hyperopt_show)
|
|
|
|
self._build_args(optionlist=ARGS_HYPEROPT_SHOW, parser=hyperopt_show_cmd)
|
2020-02-02 15:48:29 +00:00
|
|
|
|
2019-06-12 09:33:20 +00:00
|
|
|
# Add list-exchanges subcommand
|
2019-10-20 17:54:38 +00:00
|
|
|
list_exchanges_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"list-exchanges",
|
|
|
|
help="Print available exchanges.",
|
2019-10-20 17:54:38 +00:00
|
|
|
parents=[_common_parser],
|
|
|
|
)
|
2019-06-12 09:33:20 +00:00
|
|
|
list_exchanges_cmd.set_defaults(func=start_list_exchanges)
|
2019-07-18 14:55:35 +00:00
|
|
|
self._build_args(optionlist=ARGS_LIST_EXCHANGES, parser=list_exchanges_cmd)
|
2019-08-16 12:42:44 +00:00
|
|
|
|
2019-10-13 10:12:20 +00:00
|
|
|
# Add list-markets subcommand
|
|
|
|
list_markets_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"list-markets",
|
|
|
|
help="Print markets on exchange.",
|
2019-10-24 04:22:05 +00:00
|
|
|
parents=[_common_parser],
|
2019-10-13 10:12:20 +00:00
|
|
|
)
|
2019-10-17 22:26:05 +00:00
|
|
|
list_markets_cmd.set_defaults(func=partial(start_list_markets, pairs_only=False))
|
2019-10-13 10:12:20 +00:00
|
|
|
self._build_args(optionlist=ARGS_LIST_PAIRS, parser=list_markets_cmd)
|
|
|
|
|
|
|
|
# Add list-pairs subcommand
|
|
|
|
list_pairs_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"list-pairs",
|
|
|
|
help="Print pairs on exchange.",
|
2019-10-24 04:22:05 +00:00
|
|
|
parents=[_common_parser],
|
2019-10-13 10:12:20 +00:00
|
|
|
)
|
2019-10-17 22:26:05 +00:00
|
|
|
list_pairs_cmd.set_defaults(func=partial(start_list_markets, pairs_only=True))
|
2019-10-13 10:12:20 +00:00
|
|
|
self._build_args(optionlist=ARGS_LIST_PAIRS, parser=list_pairs_cmd)
|
|
|
|
|
2020-05-22 05:00:09 +00:00
|
|
|
# Add list-strategies subcommand
|
|
|
|
list_strategies_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"list-strategies",
|
|
|
|
help="Print available strategies.",
|
2020-05-22 05:00:09 +00:00
|
|
|
parents=[_common_parser],
|
2019-11-30 18:53:22 +00:00
|
|
|
)
|
2020-05-22 05:00:09 +00:00
|
|
|
list_strategies_cmd.set_defaults(func=start_list_strategies)
|
|
|
|
self._build_args(optionlist=ARGS_LIST_STRATEGIES, parser=list_strategies_cmd)
|
2019-11-30 18:53:22 +00:00
|
|
|
|
2024-10-21 17:10:36 +00:00
|
|
|
# Add list-Hyperopt loss subcommand
|
|
|
|
list_hyperopt_loss_cmd = subparsers.add_parser(
|
|
|
|
"list-hyperoptloss",
|
|
|
|
help="Print available hyperopt loss functions.",
|
|
|
|
parents=[_common_parser],
|
|
|
|
)
|
|
|
|
list_hyperopt_loss_cmd.set_defaults(func=start_list_hyperopt_loss_functions)
|
|
|
|
self._build_args(optionlist=ARGS_LIST_HYPEROPTS, parser=list_hyperopt_loss_cmd)
|
|
|
|
|
2022-10-14 16:20:49 +00:00
|
|
|
# Add list-freqAI Models subcommand
|
|
|
|
list_freqaimodels_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"list-freqaimodels",
|
|
|
|
help="Print available freqAI models.",
|
2022-10-14 16:20:49 +00:00
|
|
|
parents=[_common_parser],
|
|
|
|
)
|
|
|
|
list_freqaimodels_cmd.set_defaults(func=start_list_freqAI_models)
|
|
|
|
self._build_args(optionlist=ARGS_LIST_FREQAIMODELS, parser=list_freqaimodels_cmd)
|
|
|
|
|
2020-05-22 05:00:09 +00:00
|
|
|
# Add list-timeframes subcommand
|
|
|
|
list_timeframes_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"list-timeframes",
|
|
|
|
help="Print available timeframes for the exchange.",
|
2019-10-20 17:54:38 +00:00
|
|
|
parents=[_common_parser],
|
|
|
|
)
|
2020-05-22 05:00:09 +00:00
|
|
|
list_timeframes_cmd.set_defaults(func=start_list_timeframes)
|
|
|
|
self._build_args(optionlist=ARGS_LIST_TIMEFRAMES, parser=list_timeframes_cmd)
|
2019-08-22 14:02:03 +00:00
|
|
|
|
2020-05-22 04:55:20 +00:00
|
|
|
# Add show-trades subcommand
|
|
|
|
show_trades = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"show-trades",
|
|
|
|
help="Show trades.",
|
2019-12-23 09:59:26 +00:00
|
|
|
parents=[_common_parser],
|
|
|
|
)
|
2020-05-22 04:55:20 +00:00
|
|
|
show_trades.set_defaults(func=start_show_trades)
|
|
|
|
self._build_args(optionlist=ARGS_SHOW_TRADES, parser=show_trades)
|
2019-12-25 08:59:01 +00:00
|
|
|
|
2020-05-22 05:00:09 +00:00
|
|
|
# Add test-pairlist subcommand
|
|
|
|
test_pairlist_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"test-pairlist",
|
|
|
|
help="Test your pairlist configuration.",
|
2019-12-25 08:59:01 +00:00
|
|
|
)
|
2020-05-22 05:00:09 +00:00
|
|
|
test_pairlist_cmd.set_defaults(func=start_test_pairlist)
|
|
|
|
self._build_args(optionlist=ARGS_TEST_PAIRLIST, parser=test_pairlist_cmd)
|
2019-12-23 09:59:26 +00:00
|
|
|
|
2022-05-09 05:21:10 +00:00
|
|
|
# Add db-convert subcommand
|
|
|
|
convert_db = subparsers.add_parser(
|
2022-05-10 05:01:41 +00:00
|
|
|
"convert-db",
|
2022-05-09 05:21:10 +00:00
|
|
|
help="Migrate database to different system",
|
|
|
|
)
|
2022-05-10 05:01:41 +00:00
|
|
|
convert_db.set_defaults(func=start_convert_db)
|
|
|
|
self._build_args(optionlist=ARGS_CONVERT_DB, parser=convert_db)
|
2022-05-09 05:21:10 +00:00
|
|
|
|
2021-01-10 12:55:16 +00:00
|
|
|
# Add install-ui subcommand
|
|
|
|
install_ui_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"install-ui",
|
|
|
|
help="Install FreqUI",
|
2021-01-10 12:55:16 +00:00
|
|
|
)
|
|
|
|
install_ui_cmd.set_defaults(func=start_install_ui)
|
2021-01-16 09:15:27 +00:00
|
|
|
self._build_args(optionlist=ARGS_INSTALL_UI, parser=install_ui_cmd)
|
2021-01-10 12:55:16 +00:00
|
|
|
|
2019-08-22 14:02:03 +00:00
|
|
|
# Add Plotting subcommand
|
2019-10-20 17:54:38 +00:00
|
|
|
plot_dataframe_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"plot-dataframe",
|
|
|
|
help="Plot candles with indicators.",
|
2019-10-20 17:54:38 +00:00
|
|
|
parents=[_common_parser, _strategy_parser],
|
|
|
|
)
|
2019-08-22 14:02:03 +00:00
|
|
|
plot_dataframe_cmd.set_defaults(func=start_plot_dataframe)
|
|
|
|
self._build_args(optionlist=ARGS_PLOT_DATAFRAME, parser=plot_dataframe_cmd)
|
2019-08-22 14:51:00 +00:00
|
|
|
|
|
|
|
# Plot profit
|
2019-10-20 17:54:38 +00:00
|
|
|
plot_profit_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"plot-profit",
|
|
|
|
help="Generate plot showing profits.",
|
2020-07-03 04:58:06 +00:00
|
|
|
parents=[_common_parser, _strategy_parser],
|
2019-10-20 17:54:38 +00:00
|
|
|
)
|
2019-08-22 14:51:00 +00:00
|
|
|
plot_profit_cmd.set_defaults(func=start_plot_profit)
|
|
|
|
self._build_args(optionlist=ARGS_PLOT_PROFIT, parser=plot_profit_cmd)
|
2020-05-22 17:57:17 +00:00
|
|
|
|
|
|
|
# Add webserver subcommand
|
2024-01-13 07:18:30 +00:00
|
|
|
webserver_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"webserver", help="Webserver module.", parents=[_common_parser]
|
2024-01-13 07:18:30 +00:00
|
|
|
)
|
2020-05-22 17:57:17 +00:00
|
|
|
webserver_cmd.set_defaults(func=start_webserver)
|
|
|
|
self._build_args(optionlist=ARGS_WEBSERVER, parser=webserver_cmd)
|
2022-12-27 19:14:39 +00:00
|
|
|
|
|
|
|
# Add strategy_updater subcommand
|
2024-01-13 07:18:30 +00:00
|
|
|
strategy_updater_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"strategy-updater",
|
|
|
|
help="updates outdated strategy files to the current version",
|
|
|
|
parents=[_common_parser],
|
2024-01-13 07:18:30 +00:00
|
|
|
)
|
2022-12-27 19:14:39 +00:00
|
|
|
strategy_updater_cmd.set_defaults(func=start_strategy_update)
|
2023-06-15 18:12:11 +00:00
|
|
|
self._build_args(optionlist=ARGS_STRATEGY_UPDATER, parser=strategy_updater_cmd)
|
2023-03-22 11:32:39 +00:00
|
|
|
|
2023-05-06 19:56:11 +00:00
|
|
|
# Add lookahead_analysis subcommand
|
2023-06-15 18:12:11 +00:00
|
|
|
lookahead_analayis_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"lookahead-analysis",
|
2023-06-15 18:12:11 +00:00
|
|
|
help="Check for potential look ahead bias.",
|
2024-05-12 14:27:03 +00:00
|
|
|
parents=[_common_parser, _strategy_parser],
|
2024-01-13 07:18:30 +00:00
|
|
|
)
|
2023-05-06 19:56:11 +00:00
|
|
|
lookahead_analayis_cmd.set_defaults(func=start_lookahead_analysis)
|
2023-03-22 11:32:39 +00:00
|
|
|
|
2024-05-12 14:27:03 +00:00
|
|
|
self._build_args(optionlist=ARGS_LOOKAHEAD_ANALYSIS, parser=lookahead_analayis_cmd)
|
2023-09-04 01:53:04 +00:00
|
|
|
|
|
|
|
# Add recursive_analysis subcommand
|
|
|
|
recursive_analayis_cmd = subparsers.add_parser(
|
2024-05-12 14:27:03 +00:00
|
|
|
"recursive-analysis",
|
2023-09-23 10:27:57 +00:00
|
|
|
help="Check for potential recursive formula issue.",
|
2024-05-12 14:27:03 +00:00
|
|
|
parents=[_common_parser, _strategy_parser],
|
2024-01-13 07:18:30 +00:00
|
|
|
)
|
2023-09-04 01:53:04 +00:00
|
|
|
recursive_analayis_cmd.set_defaults(func=start_recursive_analysis)
|
|
|
|
|
2024-05-12 14:27:03 +00:00
|
|
|
self._build_args(optionlist=ARGS_RECURSIVE_ANALYSIS, parser=recursive_analayis_cmd)
|