Skip to content

高级回测分析

分析买入/入场和卖出/离场标签

了解策略如何根据不同的买入/入场标签进行操作可以很有帮助。您可能想要查看每个买入和卖出条件的更复杂统计数据,超过默认回测输出所提供的数据。您也可能想要确定导致交易开启的信号蜡烛上的指标值。

注意

以下买入原因分析仅在回测中可用,而不是超参数优化

我们需要使用--export选项设置为signals运行回测,以启用信号和交易的导出功能:

freqtrade backtesting -c <config.json> --timeframe <tf> --strategy <strategy_name> --timerange=<timerange> --export=signals

这将告诉freqtrade输出一个策略、交易对和相应蜡烛DataFrame的腌制字典,这些蜡烛导致了买入信号的产生。根据您的策略有多少次买入操作,此文件可能会非常大,因此定期检查“user_data/backtest_results”文件夹,以删除旧的导出文件。

在运行下一次回测之前,请确保删除旧的回测结果,或者使用--cache none选项运行回测,以确保不使用缓存的结果。

如果一切顺利,现在您应该在“user_data/backtest_results”文件夹中看到一个backtest-result-{timestamp}_signals.pkl文件。

要分析入场/离场标签,现在我们需要使用freqtrade backtesting-analysis命令,并提供空格分隔的--analysis-groups选项参数:

freqtrade backtesting-analysis -c <config.json> --analysis-groups 0 1 2 3 4 5

此命令将从最后一次的回测结果中读取。--analysis-groups 参数 用于指定各种显示每个组或交易利润的表格输出,从简单(0)到每对货币、每个买入和卖出标签的最详细(4):

  • 0: 根据进入标签的整体胜率和利润概要
  • 1: 按进入标签分组的利润概要
  • 2: 按进入标签和退出标签分组的利润概要
  • 3: 按货币对和进入标签分组的利润概要
  • 4: 按货币对、进入标签和退出标签分组的利润概要(可能会很大)
  • 5: 按退出标签分组的利润概要

通过使用 -h 选项可以查看更多选项。

使用 export-filename

通常,backtesting-analysis 使用最新的回测结果,但是如果您想回滚到先前的回测结果,您需要提供 --export-filename 选项。 您可以将同样的参数传递给 backtest-analysis,并使用最终回测输出文件的名称。 这样可以让您保留历史版本的回测结果,并在以后的日期重新分析它们:

freqtrade backtesting -c <config.json> --timeframe <tf> --strategy <strategy_name> --timerange=<timerange> --export=signals --export-filename=/tmp/mystrat_backtest.json

您应该在日志中看到类似下面的输出,其中列出了导出的文件名和时间戳:

2022-06-14 16:28:32,698 - freqtrade.misc - INFO - dumping json to "/tmp/mystrat_backtest-2022-06-14_16-28-32.json"

然后,您可以使用该文件名在 backtesting-analysis 中进行使用。

freqtrade回测分析 -c <config.json> --export-filename=/tmp/mystrat_backtest-2022-06-14_16-28-32.json

调整显示的买入标签和卖出标签

要在显示的输出中仅显示特定的买入和卖出标签,请使用以下两个选项:

--enter-reason-list :要分析的买入信号的空格分隔列表。默认值: "all"
--exit-reason-list :要分析的卖出信号的空格分隔列表。默认值: "all"

例如:

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

输出信号蜡烛指标

freqtrade回测分析 的真正威力来自于能够打印出信号蜡烛上的指标值,以允许对买入信号指标进行精细的调查和调整。 要为给定的一组指标打印出一个列,请使用 --indicator-list 选项:

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

这些指标必须存在于您的策略的主DataFrame中(可以是主时间框架或信息时间框架),否则它们将在脚本输出中被忽略。分析中包含了一系列与蜡烛和交易相关的字段,它们可以通过将它们包含在指标列表中自动访问,这些字段包括:

  • open_date : 交易开启时间
  • close_date : 交易关闭时间
  • min_rate : 仓位中最低价格
  • max_rate : 仓位中最高价格
  • open : 信号蜡烛开盘价格
  • close : 信号蜡烛收盘价格
  • high : 信号蜡烛最高价格
  • low : 信号蜡烛最低价格
  • volume : 信号蜡烛成交量
  • profit_ratio : 交易利润比率
  • profit_abs : 交易的绝对利润回报

按日期筛选交易输出

要仅显示在你回测时间范围内的日期之间的交易,请以YYYYMMDD-[YYYYMMDD]格式提供常规的timerange选项:

--timerange : 用于筛选输出交易的时间范围,包含起始日期,不包含结束日期。例如:20220101-20221231

例如,如果你的回测时间范围是20220101-20221231,但你只想输出1月份的交易:

freqtrade backtesting-analysis -c <config.json> --timerange 20220101-20220201

打印出被拒绝的信号

使用--rejected-signals选项打印出被拒绝的信号。

freqtrade backtesting-analysis -c <config.json> --rejected-signals

将表格写入CSV文件

一些表格输出可能会很大,因此不希望将它们打印到终端。 使用--analysis-to-csv选项禁用将表格打印到标准输出,并将它们写入CSV文件。

freqtrade backtesting-analysis -c <config.json> --analysis-to-csv

默认情况下,这会为您在backtesting-analysis命令中指定的每个输出表格写入一个文件,例如:

freqtrade backtesting-analysis -c <config.json> --analysis-to-csv --rejected-signals --analysis-groups 0 1

这将写入到user_data/backtest_results目录中:

  • rejected_signals.csv
  • group_0.csv
  • group_1.csv

要覆盖文件的写入位置,还需指定--analysis-csv-path选项。

freqtrade backtesting-analysis -c <config.json> --analysis-to-csv --analysis-csv-path another/data/path/