递归分析¶
本页解释了如何验证你的策略是否存在因某些指标的递归问题导致的不准确性。
递归公式定义了序列中任何项相对于其前一项(或多项)的关系。递归公式的一个例子是 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
的最后一行值,以查看它们与基准计算相比显示了多少差异。
命令设置:
- 使用
-p
选项设置你想要分析的交易对。由于我们只关注指标值,使用多个交易对是多余的。最好使用价格相对较高且至少具有中等波动性的交易对,如 BTC 或 ETH,以避免舍入问题导致结果不准确。如果在命令中未设置交易对,则用于此分析的交易对是白名单中的第一个交易对。 - 建议设置较长的时间范围(至少 5000 个蜡烛图),这样用作基准的初始指标计算本身具有很小或没有递归问题。例如,对于 5 分钟时间框架,5000 个蜡烛图的时间范围将等于 18 天。
--cache
强制设置为 “none”,以避免自动加载之前的指标计算。
除了递归公式检查外,该命令还对指标值进行简单的前瞻性偏差检查。要进行完整的前瞻性检查,请使用前瞻性分析。
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
才能实现零差异。
注意事项¶
recursive-analysis
只会计算和比较最后一行的指标值。输出表格报告了不同启动蜡烛图数量计算与原始基准计算之间的百分比差异。它是否对你的入场和出场产生任何实际影响并不包括在内。- 理想情况是,尽管启动蜡烛图数量不同,指标也不会有差异(或至少非常接近 0%)。实际上,像 EMA 这样的指标使用递归公式来计算指标值,因此目标不一定是实现零百分比差异,而是使差异足够低(因此
startup_candle_count
足够高),使指标固有的递归不会对交易决策产生任何实际影响。 recursive-analysis
只会在populate_indicators
和@informative
装饰器上运行计算。如果你在populate_entry_trend
或populate_exit_trend
中放置任何指标计算,它将不会被计算。