Change backtesting-analysis options to space separated lists

This commit is contained in:
froggleston
2022-06-15 11:25:06 +01:00
parent 6bb342f23a
commit c391ca08de
3 changed files with 33 additions and 35 deletions
+7 -6
View File
@@ -28,10 +28,11 @@ backtesting with the `--cache none` option to make sure no cached results are us
If all goes well, you should now see a `backtest-result-{timestamp}_signals.pkl` file in the If all goes well, you should now see a `backtest-result-{timestamp}_signals.pkl` file in the
`user_data/backtest_results` folder. `user_data/backtest_results` folder.
To analyze the entry/exit tags, we now need to use the `freqtrade backtesting-analysis` command: To analyze the entry/exit tags, we now need to use the `freqtrade backtesting-analysis` command
with `--analysis-groups` option provided with space-separated arguments (default `0 1 2`):
``` bash ``` bash
freqtrade backtesting-analysis -c <config.json> --analysis-groups 0,1,2,3,4 freqtrade backtesting-analysis -c <config.json> --analysis-groups 0 1 2 3 4
``` ```
This command will read from the last backtesting results. The `--analysis-groups` option is This command will read from the last backtesting results. The `--analysis-groups` option is
@@ -75,14 +76,14 @@ freqtrade backtesting-analysis -c <config.json> --export-filename=/tmp/mystrat_b
To show only certain buy and sell tags in the displayed output, use the following two options: To show only certain buy and sell tags in the displayed output, use the following two options:
``` ```
--enter-reason-list : Comma separated list of enter signals to analyse. Default: "all" --enter-reason-list : Space-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" --exit-reason-list : Space-separated list of exit signals to analyse. Default: "all"
``` ```
For example: For example:
```bash ```bash
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" freqtrade backtesting-analysis -c <config.json> --analysis-groups 0 2 --enter-reason-list enter_tag_a enter_tag_b --exit-reason-list roi custom_exit_tag_a stop_loss
``` ```
### Outputting signal candle indicators ### Outputting signal candle indicators
@@ -93,7 +94,7 @@ indicators. To print out a column for a given set of indicators, use the `--indi
option: option:
```bash ```bash
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" freqtrade backtesting-analysis -c <config.json> --analysis-groups 0 2 --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 The indicators have to be present in your strategy's main DataFrame (either for your main
+9 -8
View File
@@ -622,28 +622,29 @@ AVAILABLE_CLI_OPTIONS = {
"2: by enter_tag and exit_tag, " "2: by enter_tag and exit_tag, "
"3: by pair and enter_tag, " "3: by pair and enter_tag, "
"4: by pair, enter_ and exit_tag (this can get quite large)"), "4: by pair, enter_ and exit_tag (this can get quite large)"),
nargs='?', nargs='+',
default="0,1,2", default=['0', '1', '2'],
choices=['0', '1', '2', '3', '4'],
), ),
"enter_reason_list": Arg( "enter_reason_list": Arg(
"--enter-reason-list", "--enter-reason-list",
help=("Comma separated list of entry signals to analyse. Default: all. " help=("Comma separated list of entry signals to analyse. Default: all. "
"e.g. 'entry_tag_a,entry_tag_b'"), "e.g. 'entry_tag_a,entry_tag_b'"),
nargs='?', nargs='+',
default='all', default=['all'],
), ),
"exit_reason_list": Arg( "exit_reason_list": Arg(
"--exit-reason-list", "--exit-reason-list",
help=("Comma separated list of exit signals to analyse. Default: all. " help=("Comma separated list of exit signals to analyse. Default: all. "
"e.g. 'exit_tag_a,roi,stop_loss,trailing_stop_loss'"), "e.g. 'exit_tag_a,roi,stop_loss,trailing_stop_loss'"),
nargs='?', nargs='+',
default='all', default=['all'],
), ),
"indicator_list": Arg( "indicator_list": Arg(
"--indicator-list", "--indicator-list",
help=("Comma separated list of indicators to analyse. " help=("Comma separated list of indicators to analyse. "
"e.g. 'close,rsi,bb_lowerband,profit_abs'"), "e.g. 'close,rsi,bb_lowerband,profit_abs'"),
nargs='?', nargs='+',
default='', default=[],
), ),
} }
+17 -21
View File
@@ -161,28 +161,24 @@ def _print_results(analysed_trades, stratname, analysis_groups,
bigdf = pd.concat([bigdf, trades], ignore_index=True) bigdf = pd.concat([bigdf, trades], ignore_index=True)
if bigdf.shape[0] > 0 and ('enter_reason' in bigdf.columns): if bigdf.shape[0] > 0 and ('enter_reason' in bigdf.columns):
if analysis_groups is not None: if analysis_groups:
glist = analysis_groups.split(",") _do_group_table_output(bigdf, analysis_groups)
_do_group_table_output(bigdf, glist)
if enter_reason_list is not None and not enter_reason_list == "all": if enter_reason_list and "all" not in enter_reason_list:
enter_reason_list = enter_reason_list.split(",")
bigdf = bigdf.loc[(bigdf['enter_reason'].isin(enter_reason_list))] bigdf = bigdf.loc[(bigdf['enter_reason'].isin(enter_reason_list))]
if exit_reason_list is not None and not exit_reason_list == "all": if exit_reason_list and "all" not in exit_reason_list:
exit_reason_list = exit_reason_list.split(",")
bigdf = bigdf.loc[(bigdf['exit_reason'].isin(exit_reason_list))] bigdf = bigdf.loc[(bigdf['exit_reason'].isin(exit_reason_list))]
if indicator_list is not None and indicator_list != "": if "all" in indicator_list:
if indicator_list == "all": print(bigdf)
print(bigdf) elif indicator_list is not None:
else: available_inds = []
available_inds = [] for ind in indicator_list:
for ind in indicator_list.split(","): if ind in bigdf:
if ind in bigdf: available_inds.append(ind)
available_inds.append(ind) ilist = ["pair", "enter_reason", "exit_reason"] + available_inds
ilist = ["pair", "enter_reason", "exit_reason"] + available_inds _print_table(bigdf[ilist], sortcols=['exit_reason'], show_index=False)
_print_table(bigdf[ilist], sortcols=['exit_reason'], show_index=False)
else: else:
print("\\_ No trades to show") print("\\_ No trades to show")
@@ -205,10 +201,10 @@ def _print_table(df, sortcols=None, show_index=False):
def process_entry_exit_reasons(backtest_dir: Path, def process_entry_exit_reasons(backtest_dir: Path,
pairlist: List[str], pairlist: List[str],
analysis_groups: Optional[str] = "0,1,2", analysis_groups: Optional[List[str]] = ["0", "1", "2"],
enter_reason_list: Optional[str] = "all", enter_reason_list: Optional[List[str]] = ["all"],
exit_reason_list: Optional[str] = "all", exit_reason_list: Optional[List[str]] = ["all"],
indicator_list: Optional[str] = None): indicator_list: Optional[List[str]] = []):
try: try:
backtest_stats = load_backtest_stats(backtest_dir) backtest_stats = load_backtest_stats(backtest_dir)
for strategy_name, results in backtest_stats['strategy'].items(): for strategy_name, results in backtest_stats['strategy'].items():