2022-04-20 12:38:52 +00:00
|
|
|
# Advanced Backtesting Analysis
|
|
|
|
|
2022-04-22 04:38:51 +00:00
|
|
|
## Analyze the buy/entry and sell/exit tags
|
2022-04-20 12:38:52 +00:00
|
|
|
|
|
|
|
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-20 12:54:50 +00:00
|
|
|
|
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
|
2022-04-20 12:38:52 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
2022-04-23 16:18:38 +00:00
|
|
|
To analyze the buy tags, we need to use the `buy_reasons.py` script from
|
|
|
|
[froggleston's repo](https://github.com/froggleston/freqtrade-buyreasons). Follow the instructions
|
|
|
|
in their README to copy the script into your `freqtrade/scripts/` folder.
|
|
|
|
|
2022-04-20 12:38:52 +00:00
|
|
|
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-04-22 04:38:51 +00:00
|
|
|
Now run the `buy_reasons.py` script, supplying a few options:
|
2022-04-20 12:38:52 +00:00
|
|
|
|
2022-04-22 04:38:51 +00:00
|
|
|
``` bash
|
2022-04-20 12:51:45 +00:00
|
|
|
python3 scripts/buy_reasons.py -c <config.json> -s <strategy_name> -t <timerange> -g0,1,2,3,4
|
2022-04-20 12:38:52 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
The `-g` option is used to specify the various tabular outputs, ranging from the simplest (0)
|
|
|
|
to the most detailed per pair, per buy and per sell tag (4). 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-04-23 16:18:38 +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"
|
2022-04-20 12:38:52 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
For example:
|
|
|
|
|
|
|
|
```bash
|
2022-04-23 16:18:38 +00:00
|
|
|
python3 scripts/buy_reasons.py -c <config.json> -s <strategy_name> -t <timerange> -g0,1,2,3,4 --enter_reason_list "enter_tag_a,enter_tag_b" --exit_reason_list "roi,custom_exit_tag_a,stop_loss"
|
2022-04-20 12:38:52 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
### Outputting signal candle indicators
|
|
|
|
|
|
|
|
The real power of the buy_reasons.py script 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-04-23 16:18:38 +00:00
|
|
|
python3 scripts/buy_reasons.py -c <config.json> -s <strategy_name> -t <timerange> -g0,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"
|
2022-04-20 12:38:52 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
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
|
2022-04-20 12:38:52 +00:00
|
|
|
output.
|