Skip to article frontmatterSkip to article content
Freqtrade 递归分析

递归分析指南

验证策略中的递归问题

递归分析

本页解释了如何验证你的策略是否存在因某些指标的递归问题导致的不准确性。

递归公式定义了序列中任何项相对于其前一项(或多项)的关系。递归公式的一个例子是 an = an-1 + b。

为什么这对 Freqtrade 很重要?在回测中,机器人将根据指定的时间范围获取交易对的完整数据。但在模拟/实盘运行中,机器人将受到每个交易所提供的数据量的限制。

例如,要计算一个非常基础的指标 steps,第一行的值始终为 0,而后续行的值等于前一行加 1。如果我要使用最新的 1000 个蜡烛图来计算,那么第一行的 steps 值为 0,最后一个已关闭蜡烛图的 steps 值为 999。

如果计算只使用最新的 500 个蜡烛图会怎样?那么最后一个已关闭蜡烛图的 steps 值将是 499,而不是 999。这种值的差异意味着你的回测结果可能与模拟/实盘运行结果不同。

recursive-analysis 命令需要历史数据可用。要了解如何获取你感兴趣的交易对和交易所的数据,请查看文档的数据下载部分。

该命令基于准备不同长度的数据并基于这些数据计算指标。 它不会回测策略本身,而只是计算指标。在计算完不同启动蜡烛图数量(startup_candle_count)的指标后,会比较所有指定 startup_candle_count 的最后一行值,以查看它们与基准计算相比显示了多少差异。

命令设置:

除了递归公式检查外,该命令还对指标值进行简单的前瞻性偏差检查。要进行完整的前瞻性检查,请使用前瞻性分析

recursive-analysis 命令参考

用法: freqtrade recursive-analysis [-h] [-v] [--no-color] [--logfile FILE]
                                    [-V] [-c PATH] [-d PATH] [--userdir PATH]
                                    [-s NAME] [--strategy-path PATH]
                                    [--recursive-strategy-search]
                                    [--freqaimodel NAME]
                                    [--freqaimodel-path PATH] [-i TIMEFRAME]
                                    [--timerange TIMERANGE]
                                    [--data-format-ohlcv {json,jsongz,feather,parquet}]
                                    [-p PAIRS [PAIRS ...]]
                                    [--startup-candle STARTUP_CANDLE [STARTUP_CANDLE ...]]

选项:
  -h, --help            显示帮助信息并退出。
  -i TIMEFRAME, --timeframe TIMEFRAME
                        指定时间周期(`1m`, `5m`, `30m`, `1h`, `1d`)。
  --timerange TIMERANGE
                        指定要使用的数据时间范围。
  --data-format-ohlcv {json,jsongz,feather,parquet}
                        下载的蜡烛图(OHLCV)数据的存储格式。
                        (默认:`feather`)。
  -p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
                        限制命令仅处理这些交易对。交易对以空格分隔。
  --startup-candle STARTUP_CANDLE [STARTUP_CANDLE ...]
                        指定要检查的启动蜡烛图(`199`, `499`, `999`, `1999`)。

通用参数:
  -v, --verbose         详细模式(-vv 获取更多信息,-vvv 获取所有消息)。
  --no-color            禁用超参数优化结果的着色。在将输出重定向到文件时可能有用。
  --logfile FILE, --log-file FILE
                        记录到指定的文件。特殊值包括:
                        'syslog', 'journald'。有关更多详细信息,请参阅文档。
  -V, --version         显示程序版本号并退出。
  -c PATH, --config PATH
                        指定配置文件(默认:`userdir/config.json` 或 `config.json`,以存在的为准)。
                        可以使用多个 --config 选项。可以设置为 `-` 以从标准输入读取配置。
  -d PATH, --datadir PATH, --data-dir PATH
                        交易所历史回测数据的基本目录路径。要查看期货数据,需要额外使用 trading-mode。
  --userdir PATH, --user-data-dir PATH
                        用户数据目录的路径。

策略参数:
  -s NAME, --strategy NAME
                        指定机器人使用的策略类名。
  --strategy-path PATH  指定额外的策略查找路径。
  --recursive-strategy-search
                        在策略文件夹中递归搜索策略。
  --freqaimodel NAME    指定自定义的 freqaimodels。
  --freqaimodel-path PATH
                        指定 freqaimodels 的额外查找路径。

为什么使用奇数作为默认启动蜡烛图?

启动蜡烛图的默认值是奇数。当机器人从交易所的 API 获取蜡烛图数据时,最后一个蜡烛图是机器人正在检查的蜡烛图,其余数据是"启动蜡烛图"。

例如,Binance 允许每次 API 调用获取 1000 个蜡烛图。当机器人收到 1000 个蜡烛图时,最后一个蜡烛图是"当前蜡烛图",前面的 999 个蜡烛图是"启动蜡烛图"。通过将启动蜡烛图数量设置为 1000 而不是 999,机器人将尝试获取 1001 个蜡烛图。然后交易所 API 将以分页形式发送蜡烛图数据,即在 Binance API 的情况下,这将是两组 - 一组长度为 1000,另一组长度为 1。这导致机器人认为策略需要 1001 个蜡烛图的数据,因此它将下载 2000 个蜡烛图的数据,这意味着将有 1 个"当前蜡烛图"和 1999 个"启动蜡烛图"。

此外,交易所限制连续批量 API 调用的次数,例如 Binance 允许 5 次调用。在这种情况下,在不触发 API 速率限制的情况下,只能从 Binance API 下载 5000 个蜡烛图,这意味着你可以拥有的最大 startup_candle_count 是 4999。

请注意,交易所可能会在未来更改这个蜡烛图限制,恕不另行通知。

命令如何工作?

理解 recursive-analysis 输出

这是一个输出结果表的示例,其中至少有一个指标存在递归公式问题:

| indicators   | 20      | 40      | 80     | 100    | 150     | 300     | 999    |
|--------------+---------+---------+--------+--------+---------+---------+--------|
| rsi_30       | nan%    | -6.025% | 0.612% | 0.828% | -0.140% | 0.000%  | 0.000% |
| rsi_14       | 24.141% | -0.876% | 0.070% | 0.007% | -0.000% | -0.000% | -      |

列标题表示分析中使用的不同 startup_candle_count。表格中的值表示计算的指标与基准值相比的差异百分比。

nan% 表示由于数据不足,无法计算该指标的值。在此示例中,你无法仅用 21 个蜡烛图(1 个当前蜡烛图 + 20 个启动蜡烛图)计算长度为 30 的 RSI。

用户应该按指标评估表格,以决定指定的 startup_candle_count 是否导致足够小的差异,使指标不会对入场和/或出场产生任何影响。

因此,追求绝对零差异(由 - 值表示)可能不是最佳选择,因为某些指标可能要求你使用如此长的 startup_candle_count 才能实现零差异。

注意事项