diff --git a/docs/configuration.md b/docs/configuration.md
index 90f0aa791..002e3ab5d 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -106,6 +106,8 @@ Mandatory parameters are marked as **Required**, which means that they are requi
| `internals.sd_notify` | Enables use of the sd_notify protocol to tell systemd service manager about changes in the bot state and issue keep-alive pings. See [here](installation.md#7-optional-configure-freqtrade-as-a-systemd-service) for more details.
***Datatype:*** *Boolean*
| `logfile` | Specifies logfile name. Uses a rolling strategy for log file rotation for 10 files with the 1MB limit per file.
***Datatype:*** *String*
| `user_data_dir` | Directory containing user data.
*Defaults to `./user_data/`*.
***Datatype:*** *String*
+| `dataformat_ohlcv` | Data format to use to store OHLCV historic data.
*Defaults to `json`*.
***Datatype:*** *String*
+| `dataformat_trades` | Data format to use to store trades historic data.
*Defaults to `jsongz`*.
***Datatype:*** *String*
### Parameters in the strategy
diff --git a/freqtrade/configuration/arguments.py b/freqtrade/configuration/arguments.py
index cefa86927..121bd23b4 100644
--- a/freqtrade/configuration/arguments.py
+++ b/freqtrade/configuration/arguments.py
@@ -51,7 +51,7 @@ ARGS_CONVERT_DATA = ["pairs", "format_from", "format_to"]
ARGS_CONVERT_DATA_OHLCV = ARGS_CONVERT_DATA + ["timeframes"]
ARGS_DOWNLOAD_DATA = ["pairs", "pairs_file", "days", "download_trades", "exchange",
- "timeframes", "erase"]
+ "timeframes", "erase", "dataformat_ohlcv", "dataformat_trades"]
ARGS_PLOT_DATAFRAME = ["pairs", "indicators1", "indicators2", "plot_limit",
"db_url", "trade_source", "export", "exportfilename",
diff --git a/freqtrade/configuration/cli_options.py b/freqtrade/configuration/cli_options.py
index ffaf9ea66..c80bea393 100644
--- a/freqtrade/configuration/cli_options.py
+++ b/freqtrade/configuration/cli_options.py
@@ -344,6 +344,18 @@ AVAILABLE_CLI_OPTIONS = {
choices=constants.AVAILABLE_DATAHANDLERS,
required=True,
),
+ "dataformat_ohlcv": Arg(
+ '--data-format',
+ help='Storage format for downloaded ohlcv data. (default: `%(default)s`).',
+ choices=constants.AVAILABLE_DATAHANDLERS,
+ default='json'
+ ),
+ "dataformat_trades": Arg(
+ '--data-format-trades',
+ help='Storage format for downloaded trades data. (default: `%(default)s`).',
+ choices=constants.AVAILABLE_DATAHANDLERS,
+ default='jsongz'
+ ),
"exchange": Arg(
'--exchange',
help=f'Exchange name (default: `{constants.DEFAULT_EXCHANGE}`). '
diff --git a/freqtrade/configuration/configuration.py b/freqtrade/configuration/configuration.py
index f73b52c10..aa453a392 100644
--- a/freqtrade/configuration/configuration.py
+++ b/freqtrade/configuration/configuration.py
@@ -339,9 +339,16 @@ class Configuration:
self._args_to_config(config, argname='days',
logstring='Detected --days: {}')
+
self._args_to_config(config, argname='download_trades',
logstring='Detected --dl-trades: {}')
+ self._args_to_config(config, argname='dataformat_ohlcv',
+ logstring='Using "{}" to store OHLCV data.')
+
+ self._args_to_config(config, argname='dataformat_trade',
+ logstring='Using "{}" to store trades data.')
+
def _process_runmode(self, config: Dict[str, Any]) -> None:
if not self.runmode:
diff --git a/freqtrade/constants.py b/freqtrade/constants.py
index 8d9cde98b..95ec71552 100644
--- a/freqtrade/constants.py
+++ b/freqtrade/constants.py
@@ -216,17 +216,17 @@ CONF_SCHEMA = {
'process_throttle_secs': {'type': 'integer'},
'interval': {'type': 'integer'},
'sd_notify': {'type': 'boolean'},
- 'dataformat_ohlcv': {
- 'type': 'string',
+ }
+ },
+ 'dataformat_ohlcv': {
+ 'type': 'string',
'enum': AVAILABLE_DATAHANDLERS,
'default': 'json'
- },
- 'dataformat_trades': {
- 'type': 'string',
+ },
+ 'dataformat_trades': {
+ 'type': 'string',
'enum': AVAILABLE_DATAHANDLERS,
'default': 'jsongz'
- }
- }
}
},
'definitions': {
diff --git a/freqtrade/data/history.py b/freqtrade/data/history.py
index 9dad90864..c06b14b4a 100644
--- a/freqtrade/data/history.py
+++ b/freqtrade/data/history.py
@@ -178,7 +178,7 @@ def _download_pair_history(datadir: Path,
:param timerange: range of time to download
:return: bool with success state
"""
- data_handler = get_datahandler(datadir)
+ data_handler = get_datahandler(datadir, data_handler=data_handler)
try:
logger.info(
@@ -327,12 +327,14 @@ def refresh_backtest_trades_data(exchange: Exchange, pairs: List[str], datadir:
def convert_trades_to_ohlcv(pairs: List[str], timeframes: List[str],
- datadir: Path, timerange: TimeRange, erase=False) -> None:
+ datadir: Path, timerange: TimeRange, erase=False,
+ data_format_ohlcv: str = 'json',
+ data_format_trades: str = 'jsongz') -> None:
"""
Convert stored trades data to ohlcv data
"""
- data_handler_trades = get_datahandler(datadir, data_format='jsongz')
- data_handler_ohlcv = get_datahandler(datadir, data_format='json')
+ data_handler_trades = get_datahandler(datadir, data_format=data_format_trades)
+ data_handler_ohlcv = get_datahandler(datadir, data_format=data_format_ohlcv)
for pair in pairs:
trades = data_handler_trades.trades_load(pair)
diff --git a/freqtrade/utils.py b/freqtrade/utils.py
index 5f646cc7a..81d41f28a 100644
--- a/freqtrade/utils.py
+++ b/freqtrade/utils.py
@@ -204,16 +204,22 @@ def start_download_data(args: Dict[str, Any]) -> None:
if config.get('download_trades'):
pairs_not_available = refresh_backtest_trades_data(
exchange, pairs=config["pairs"], datadir=config['datadir'],
- timerange=timerange, erase=config.get("erase"))
+ timerange=timerange, erase=config.get("erase"),
+ data_format=config['dataformat_trades'])
# Convert downloaded trade data to different timeframes
convert_trades_to_ohlcv(
pairs=config["pairs"], timeframes=config["timeframes"],
- datadir=config['datadir'], timerange=timerange, erase=config.get("erase"))
+ datadir=config['datadir'], timerange=timerange, erase=config.get("erase"),
+ data_format_ohlcv=config['dataformat_ohlcv'],
+ data_format_trades=config['dataformat_trades'],
+ )
+
else:
pairs_not_available = refresh_backtest_ohlcv_data(
exchange, pairs=config["pairs"], timeframes=config["timeframes"],
- datadir=config['datadir'], timerange=timerange, erase=config.get("erase"))
+ datadir=config['datadir'], timerange=timerange, erase=config.get("erase"),
+ data_format=config['dataformat_ohlcv'])
except KeyboardInterrupt:
sys.exit("SIGINT received, aborting ...")