stable/docs/advanced-backtesting.md

77 lines
3.4 KiB
Markdown
Raw Normal View History

# Advanced Backtesting Analysis
2022-04-22 04:38:51 +00:00
## Analyze the buy/entry and sell/exit tags
It can be helpful to understand how a strategy behaves according to the buy/entry tags used to
mark up different buy conditions. You might want to see more complex statistics about each buy and
sell condition above those provided by the default backtesting output. You may also want to
determine indicator values on the signal candle that resulted in a trade opening.
!!! Note
The following buy reason analysis is only available for backtesting, *not hyperopt*.
2022-04-22 17:49:28 +00:00
We need to run backtesting with the `--export` option set to `signals` to enable the exporting of
signals **and** trades:
2022-04-22 04:38:51 +00:00
``` bash
2022-04-22 17:49:28 +00:00
freqtrade backtesting -c <config.json> --timeframe <tf> --strategy <strategy_name> --timerange=<timerange> --export=signals
```
This will tell freqtrade to output a pickled dictionary of strategy, pairs and corresponding
DataFrame of the candles that resulted in buy signals. Depending on how many buys your strategy
makes, this file may get quite large, so periodically check your `user_data/backtest_results`
folder to delete old exports.
Before running your next backtest, make sure you either delete your old backtest results or run
backtesting with the `--cache none` option to make sure no cached results are used.
If all goes well, you should now see a `backtest-result-{timestamp}_signals.pkl` file in the
`user_data/backtest_results` folder.
2022-05-29 14:42:34 +00:00
To analyze the entry/exit tags, we now need to use the `freqtrade backtesting-analysis` command:
2022-04-22 04:38:51 +00:00
``` bash
2022-05-29 14:42:34 +00:00
freqtrade backtesting-analysis -c <config.json> --analysis-groups 0,1,2,3,4
```
2022-05-29 14:42:34 +00:00
This command will read from the last backtesting results. The `--analysis-groups` option is
used to specify the various tabular outputs showing the profit fo each group or trade,
ranging from the simplest (0) to the most detailed per pair, per buy and per sell tag (4):
* 1: profit summaries grouped by enter_tag
* 2: profit summaries grouped by enter_tag and exit_tag
* 3: profit summaries grouped by pair and enter_tag
* 4: profit summaries grouped by pair, enter_ and exit_tag (this can get quite large)
More options are available by running with the `-h` option.
### Tuning the buy tags and sell tags to display
To show only certain buy and sell tags in the displayed output, use the following two options:
```
2022-05-29 14:42:34 +00:00
--enter-reason-list : Comma separated list of enter signals to analyse. Default: "all"
--exit-reason-list : Comma separated list of exit signals to analyse. Default: "stop_loss,trailing_stop_loss"
```
For example:
```bash
2022-05-29 14:42:34 +00:00
freqtrade backtesting-analysis -c <config.json> --analysis-groups 0,1,2,3,4 --enter-reason-list "enter_tag_a,enter_tag_b" --exit-reason-list "roi,custom_exit_tag_a,stop_loss"
```
### Outputting signal candle indicators
2022-05-29 14:42:34 +00:00
The real power of `freqtrade backtesting-analysis` comes from the ability to print out the indicator
values present on signal candles to allow fine-grained investigation and tuning of buy signal
indicators. To print out a column for a given set of indicators, use the `--indicator-list`
option:
```bash
2022-05-29 14:42:34 +00:00
freqtrade backtesting-analysis -c <config.json> --analysis-groups 0,1,2,3,4 --enter-reason-list "enter_tag_a,enter_tag_b" --exit-reason-list "roi,custom_exit_tag_a,stop_loss" --indicator-list "rsi,rsi_1h,bb_lowerband,ema_9,macd,macdsignal"
```
The indicators have to be present in your strategy's main DataFrame (either for your main
2022-04-22 04:38:51 +00:00
timeframe or for informative timeframes) otherwise they will simply be ignored in the script
output.