diff --git a/docs/backtesting.md b/docs/backtesting.md
index 5d836d01b..f732068f1 100644
--- a/docs/backtesting.md
+++ b/docs/backtesting.md
@@ -20,7 +20,8 @@ usage: freqtrade backtesting [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[--dry-run-wallet DRY_RUN_WALLET]
[--timeframe-detail TIMEFRAME_DETAIL]
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
- [--export {none,trades}] [--export-filename PATH]
+ [--export {none,trades,signals}]
+ [--export-filename PATH]
[--breakdown {day,week,month} [{day,week,month} ...]]
[--cache {none,day,week,month}]
@@ -63,18 +64,17 @@ optional arguments:
`30m`, `1h`, `1d`).
--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]
Provide a space-separated list of strategies to
- backtest. Please note that timeframe needs to be
- set either in config or via command line. When using
- this together with `--export trades`, the strategy-
- name is injected into the filename (so `backtest-
- data.json` becomes `backtest-data-SampleStrategy.json`
- --export {none,trades}
+ backtest. Please note that timeframe needs to be set
+ either in config or via command line. When using this
+ together with `--export trades`, the strategy-name is
+ injected into the filename (so `backtest-data.json`
+ becomes `backtest-data-SampleStrategy.json`
+ --export {none,trades,signals}
Export backtest results (default: trades).
- --export-filename PATH
- Save backtest results to the file with this filename.
- Requires `--export` to be set as well. Example:
- `--export-filename=user_data/backtest_results/backtest
- _today.json`
+ --export-filename PATH, --backtest-filename PATH
+ Use this filename for backtest results.Requires
+ `--export` to be set as well. Example: `--export-filen
+ ame=user_data/backtest_results/backtest_today.json`
--breakdown {day,week,month} [{day,week,month} ...]
Show backtesting breakdown per [day, week, month].
--cache {none,day,week,month}
diff --git a/docs/configuration.md b/docs/configuration.md
index 061b6c77c..5770450a6 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -229,7 +229,6 @@ Mandatory parameters are marked as **Required**, which means that they are requi
| `dataformat_trades` | Data format to use to store historical trades data.
*Defaults to `jsongz`*.
**Datatype:** String
| `position_adjustment_enable` | Enables the strategy to use position adjustments (additional buys or sells). [More information here](strategy-callbacks.md#adjust-trade-position).
[Strategy Override](#parameters-in-the-strategy).
*Defaults to `false`.*
**Datatype:** Boolean
| `max_entry_position_adjustment` | Maximum additional order(s) for each open trade on top of the first entry Order. Set it to `-1` for unlimited additional orders. [More information here](strategy-callbacks.md#adjust-trade-position).
[Strategy Override](#parameters-in-the-strategy).
*Defaults to `-1`.*
**Datatype:** Positive Integer or -1
-| `backtest_signal_candle_export_enable` | Enables the exporting of signal candles for use in post-backtesting analysis of buy tags. See [Strategy Analysis](strategy_analysis_example.md#analyse-the-buy-entry-and-sell-exit-tags).
*Defaults to `false`.*
**Datatype:** Boolean
### Parameters in the strategy
diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py
index c2d9f1edb..f4149fdc1 100644
--- a/freqtrade/optimize/backtesting.py
+++ b/freqtrade/optimize/backtesting.py
@@ -131,9 +131,6 @@ class Backtesting:
self.config['startup_candle_count'] = self.required_startup
self.exchange.validate_required_startup_candles(self.required_startup, self.timeframe)
- self.backtest_signal_candle_export_enable = self.config.get(
- 'backtest_signal_candle_export_enable', False)
-
self.trading_mode: TradingMode = config.get('trading_mode', TradingMode.SPOT)
# strategies which define "can_short=True" will fail to load in Spot mode.
self._can_short = self.trading_mode != TradingMode.SPOT
@@ -1077,8 +1074,8 @@ class Backtesting:
})
self.all_results[self.strategy.get_strategy_name()] = results
- if self.config.get('export', 'none') == 'signals' and \
- self.dataprovider.runmode == RunMode.BACKTEST:
+ if (self.config.get('export', 'none') == 'signals' and
+ self.dataprovider.runmode == RunMode.BACKTEST):
self._generate_trade_signal_candles(preprocessed_tmp, results)
return min_date, max_date
@@ -1163,8 +1160,8 @@ class Backtesting:
if self.config.get('export', 'none') == 'trades':
store_backtest_stats(self.config['exportfilename'], self.results)
- if self.config.get('export', 'none') == 'signals' and \
- self.dataprovider.runmode == RunMode.BACKTEST:
+ if (self.config.get('export', 'none') == 'signals' and
+ self.dataprovider.runmode == RunMode.BACKTEST):
store_backtest_stats(self.config['exportfilename'], self.results)
store_backtest_signal_candles(self.config['exportfilename'], self.processed_dfs)
diff --git a/tests/optimize/test_backtesting.py b/tests/optimize/test_backtesting.py
index 08957acf9..797d3bafa 100644
--- a/tests/optimize/test_backtesting.py
+++ b/tests/optimize/test_backtesting.py
@@ -384,14 +384,16 @@ def test_backtesting_start(default_conf, mocker, testdatadir, caplog) -> None:
mocker.patch('freqtrade.optimize.backtesting.generate_backtest_stats')
mocker.patch('freqtrade.optimize.backtesting.show_backtest_results')
sbs = mocker.patch('freqtrade.optimize.backtesting.store_backtest_stats')
+ sbc = mocker.patch('freqtrade.optimize.backtesting.store_backtest_signal_candles')
mocker.patch('freqtrade.plugins.pairlistmanager.PairListManager.whitelist',
PropertyMock(return_value=['UNITTEST/BTC']))
default_conf['timeframe'] = '1m'
default_conf['datadir'] = testdatadir
- default_conf['export'] = 'trades'
+ default_conf['export'] = 'signals'
default_conf['exportfilename'] = 'export.txt'
default_conf['timerange'] = '-1510694220'
+ default_conf['runmode'] = RunMode.BACKTEST
backtesting = Backtesting(default_conf)
backtesting._set_strategy(backtesting.strategylist[0])
@@ -407,6 +409,7 @@ def test_backtesting_start(default_conf, mocker, testdatadir, caplog) -> None:
assert backtesting.strategy.dp._pairlists is not None
assert backtesting.strategy.bot_loop_start.call_count == 1
assert sbs.call_count == 1
+ assert sbc.call_count == 1
def test_backtesting_start_no_data(default_conf, mocker, caplog, testdatadir) -> None: