diff --git a/freqtrade/commands/arguments.py b/freqtrade/commands/arguments.py index 711a2c4a2..4ddd16410 100644 --- a/freqtrade/commands/arguments.py +++ b/freqtrade/commands/arguments.py @@ -61,7 +61,9 @@ ARGS_BUILD_CONFIG = ["config"] ARGS_BUILD_STRATEGY = ["user_data_dir", "strategy", "template"] 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", "exchange", "trading_mode", + "candle_types"] ARGS_CONVERT_TRADES = ["pairs", "timeframes", "exchange", "dataformat_ohlcv", "dataformat_trades"] diff --git a/freqtrade/commands/cli_options.py b/freqtrade/commands/cli_options.py index 7d1d2edd1..d198a4b2f 100644 --- a/freqtrade/commands/cli_options.py +++ b/freqtrade/commands/cli_options.py @@ -5,6 +5,7 @@ from argparse import SUPPRESS, ArgumentTypeError from freqtrade import __version__, constants from freqtrade.constants import HYPEROPT_LOSS_BUILTIN +from freqtrade.enums import CandleType def check_int_positive(value: str) -> int: @@ -353,6 +354,12 @@ AVAILABLE_CLI_OPTIONS = { help='Select Trading mode', choices=constants.TRADING_MODES, ), + "candle_types": Arg( + '--candle-types', + help='Select Trading mode', + choices=[c.value for c in CandleType], + nargs='+', + ), # Script options "pairs": Arg( '-p', '--pairs', diff --git a/freqtrade/commands/data_commands.py b/freqtrade/commands/data_commands.py index 6330de274..0c6f48088 100644 --- a/freqtrade/commands/data_commands.py +++ b/freqtrade/commands/data_commands.py @@ -8,7 +8,7 @@ from freqtrade.configuration import TimeRange, setup_utils_configuration from freqtrade.data.converter import convert_ohlcv_format, convert_trades_format from freqtrade.data.history import (convert_trades_to_ohlcv, refresh_backtest_ohlcv_data, refresh_backtest_trades_data) -from freqtrade.enums import RunMode +from freqtrade.enums import CandleType, RunMode from freqtrade.exceptions import OperationalException from freqtrade.exchange import timeframe_to_minutes from freqtrade.exchange.exchange import market_is_active @@ -137,9 +137,11 @@ def start_convert_data(args: Dict[str, Any], ohlcv: bool = True) -> None: """ config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE) if ohlcv: - convert_ohlcv_format(config, - convert_from=args['format_from'], convert_to=args['format_to'], - erase=args['erase']) + candle_types = [CandleType.from_string(ct) for ct in config.get('candle_types', ['spot'])] + for candle_type in candle_types: + convert_ohlcv_format(config, + convert_from=args['format_from'], convert_to=args['format_to'], + erase=args['erase'], candle_type=candle_type) else: convert_trades_format(config, convert_from=args['format_from'], convert_to=args['format_to'], diff --git a/freqtrade/configuration/configuration.py b/freqtrade/configuration/configuration.py index 67617d84f..c86c43732 100644 --- a/freqtrade/configuration/configuration.py +++ b/freqtrade/configuration/configuration.py @@ -434,6 +434,10 @@ class Configuration: self._args_to_config(config, argname='trading_mode', logstring='Detected --trading-mode: {}') + self._args_to_config(config, argname='candle_types', + logstring='Detected --candle-types: {}') + + def _process_runmode(self, config: Dict[str, Any]) -> None: self._args_to_config(config, argname='dry_run', diff --git a/freqtrade/data/converter.py b/freqtrade/data/converter.py index c087c87ff..84c57be41 100644 --- a/freqtrade/data/converter.py +++ b/freqtrade/data/converter.py @@ -267,7 +267,7 @@ def convert_ohlcv_format( convert_from: str, convert_to: str, erase: bool, - candle_type: CandleType = CandleType.SPOT_ + candle_type: CandleType ): """ Convert OHLCV from one format to another diff --git a/tests/data/test_converter.py b/tests/data/test_converter.py index 39bb1b15e..fc71c9f0b 100644 --- a/tests/data/test_converter.py +++ b/tests/data/test_converter.py @@ -12,6 +12,7 @@ from freqtrade.data.converter import (convert_ohlcv_format, convert_trades_forma trades_to_ohlcv, trim_dataframe) from freqtrade.data.history import (get_timerange, load_data, load_pair_history, validate_backtest_data) +from freqtrade.enums import CandleType from tests.conftest import log_has, log_has_re from tests.data.test_history import _clean_test_file @@ -312,7 +313,8 @@ def test_convert_ohlcv_format(default_conf, testdatadir, tmpdir, file_base): default_conf, convert_from='json', convert_to='jsongz', - erase=False + erase=False, + candle_type=CandleType.SPOT ) assert file_new.exists() @@ -325,7 +327,8 @@ def test_convert_ohlcv_format(default_conf, testdatadir, tmpdir, file_base): default_conf, convert_from='jsongz', convert_to='json', - erase=True + erase=True, + candle_type=CandleType.SPOT ) assert file_temp.exists()