diff --git a/freqtrade/configuration/arguments.py b/freqtrade/configuration/arguments.py index 6e2ecea2e..c2cde6090 100644 --- a/freqtrade/configuration/arguments.py +++ b/freqtrade/configuration/arguments.py @@ -31,6 +31,8 @@ ARGS_EDGE = ARGS_COMMON_OPTIMIZE + ["stoploss_range"] ARGS_LIST_EXCHANGES = ["print_one_column"] +ARGS_LIST_TIMEFRAMES = ["exchange", "print_one_column"] + ARGS_CREATE_USERDIR = ["user_data_dir"] ARGS_DOWNLOAD_DATA = ["pairs", "pairs_file", "days", "exchange", "timeframes", "erase"] @@ -41,7 +43,8 @@ ARGS_PLOT_DATAFRAME = ["pairs", "indicators1", "indicators2", "plot_limit", "db_ ARGS_PLOT_PROFIT = ["pairs", "timerange", "export", "exportfilename", "db_url", "trade_source", "ticker_interval"] -NO_CONF_REQURIED = ["create-userdir", "download-data", "plot-dataframe", "plot-profit"] +NO_CONF_REQURIED = ["create-userdir", "download-data", "list-timeframes", "plot-dataframe", + "plot-profit"] class Arguments: @@ -98,7 +101,8 @@ class Arguments: :return: None """ from freqtrade.optimize import start_backtesting, start_hyperopt, start_edge - from freqtrade.utils import start_create_userdir, start_download_data, start_list_exchanges + from freqtrade.utils import (start_create_userdir, start_download_data, + start_list_exchanges, start_list_timeframes) subparsers = self.parser.add_subparsers(dest='subparser') @@ -131,6 +135,14 @@ class Arguments: list_exchanges_cmd.set_defaults(func=start_list_exchanges) self._build_args(optionlist=ARGS_LIST_EXCHANGES, parser=list_exchanges_cmd) + # Add list-timeframes subcommand + list_timeframes_cmd = subparsers.add_parser( + 'list-timeframes', + help='Print available ticker intervals (timeframes) for the exchange.' + ) + list_timeframes_cmd.set_defaults(func=start_list_timeframes) + self._build_args(optionlist=ARGS_LIST_TIMEFRAMES, parser=list_timeframes_cmd) + # Add download-data subcommand download_data_cmd = subparsers.add_parser( 'download-data', diff --git a/freqtrade/utils.py b/freqtrade/utils.py index 6ce5e888c..559fef0a5 100644 --- a/freqtrade/utils.py +++ b/freqtrade/utils.py @@ -97,3 +97,26 @@ def start_download_data(args: Dict[str, Any]) -> None: if pairs_not_available: logger.info(f"Pairs [{','.join(pairs_not_available)}] not available " f"on exchange {config['exchange']['name']}.") + + +def start_list_timeframes(args: Dict[str, Any]) -> None: + """ + Print ticker intervals (timeframes) available on Exchange + """ + config = setup_utils_configuration(args, RunMode.OTHER) + + # Init exchange + exchange = ExchangeResolver(config['exchange']['name'], config).exchange + + timeframes = list((exchange._api.timeframes or {}).keys()) + + if not timeframes: + logger.warning("List of timeframes available for exchange " + f"`{config['exchange']['name']}` is empty. " + "This exchange does not support fetching OHLCV data.") + else: + if args['print_one_column']: + print('\n'.join(timeframes)) + else: + print(f"Timeframes available for the exchange `{config['exchange']['name']}`: " + f"{', '.join(timeframes)}")