Skip to article frontmatterSkip to article content
Freqtrade 前瞻性分析

前瞻性分析指南

验证策略中的前瞻性偏差

前瞻性分析

本页解释了如何验证你的策略是否存在前瞻性偏差。

前瞻性偏差是任何策略的祸根,因为有时很容易引入这种偏差,但可能很难发现。

回测会初始化所有时间戳(将整个数据框加载到内存中)并一次性计算所有指标。 这意味着如果你的指标或入场/出场信号查看未来的蜡烛图,这将使你的回测结果失真。

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

该命令在内部链接回测并探测策略以触发前瞻性偏差。 这是通过不查看策略代码本身,而是通过比较完整回测中改变的指标值和移动的入场/出场点来实现的。

lookahead-analysis 可以使用回测的典型选项,但强制使用以下选项:

这些设置是为了避免用户意外产生误报。

lookahead-analysis 命令参考

用法: freqtrade lookahead-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}]
                                    [--max-open-trades INT]
                                    [--stake-amount STAKE_AMOUNT]
                                    [--fee FLOAT] [-p PAIRS [PAIRS ...]]
                                    [--enable-protections]
                                    [--dry-run-wallet DRY_RUN_WALLET]
                                    [--timeframe-detail TIMEFRAME_DETAIL]
                                    [--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
                                    [--export {none,trades,signals}]
                                    [--backtest-filename PATH]
                                    [--backtest-directory PATH]
                                    [--freqai-backtest-live-models]
                                    [--minimum-trade-amount INT]
                                    [--targeted-trade-amount INT]
                                    [--lookahead-analysis-exportfilename LOOKAHEAD_ANALYSIS_EXPORTFILENAME]

选项:
  -h, --help            显示帮助信息并退出
  -i TIMEFRAME, --timeframe TIMEFRAME
                        指定时间周期(`1m`, `5m`, `30m`, `1h`, `1d`)。
  --timerange TIMERANGE
                        指定要使用的数据时间范围。
  --data-format-ohlcv {json,jsongz,feather,parquet}
                        下载的蜡烛图(OHLCV)数据的存储格式。
                        (默认:`feather`)。
  --max-open-trades INT
                        覆盖配置设置中的 `max_open_trades` 值。
  --stake-amount STAKE_AMOUNT
                        覆盖配置设置中的 `stake_amount` 值。
  --fee FLOAT           指定手续费比率。将在交易入场和出场时各应用一次。
  -p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
                        限制命令仅处理这些交易对。交易对以空格分隔。
  --enable-protections, --enableprotections
                        为回测启用保护措施。这将显著降低回测速度,但会包含已配置的保护措施。
  --dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
                        起始余额,用于回测/超参数优化和模拟运行。
  --timeframe-detail TIMEFRAME_DETAIL
                        指定回测的详细时间周期(`1m`, `5m`, `30m`, `1h`, `1d`)。
  --strategy-list STRATEGY_LIST [STRATEGY_LIST ...]
                        提供要回测的策略列表,以空格分隔。请注意,时间周期需要在配置中或通过命令行设置。当与 `--export trades` 一起使用时,策略名称会被注入到文件名中(因此 `backtest-data.json` 变为 `backtest-data-SampleStrategy.json`)。
  --export {none,trades,signals}
                        导出回测结果(默认:trades)。
  --backtest-filename PATH, --export-filename PATH
                        使用此文件名作为回测结果。示例:
                        `--backtest-filename=backtest_results_2020-09-27_16-20-48.json`。
                        假设以 `user_data/backtest_results/` 或 `--export-directory` 作为基础目录。
  --backtest-directory PATH, --export-directory PATH
                        用于回测结果的目录。示例:
                        `--export-directory=user_data/backtest_results/`。
  --minimum-trade-amount INT
                        前瞻分析的最小交易金额。
  --targeted-trade-amount INT
                        前瞻分析的目标交易金额。
  --lookahead-analysis-exportfilename LOOKAHEAD_ANALYSIS_EXPORTFILENAME
                        使用此 CSV 文件名存储前瞻分析结果。

通用参数:
  -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 的额外查找路径。

介绍

许多策略在程序员不知情的情况下都陷入了前瞻性偏差的陷阱。这通常会使策略回测看起来有利可图,有时甚至达到极端程度,但这并不现实,因为策略通过查看在模拟或实盘模式下无法获得的数据来"作弊"。

策略可以"作弊"的原因是因为 freqtrade 回测过程在开始时就会填充完整的数据框,包括所有蜡烛图时间戳。如果程序员不够谨慎或不了解内部工作原理(有时这真的很难发现),那么策略就会看到未来的数据。

这个命令旨在尝试验证上述前瞻性偏差的有效性。

命令如何工作?

它首先会对所有交易对进行回测,为指标和入场/出场生成基准。在初始回测运行后,它会检查是否满足 minimum-trade-amount,如果不满足则取消该策略的前瞻性分析。如果发生这种情况,请使用更宽的时间范围来获取更多交易进行分析,或使用发生更多交易的时间范围。

设置基准后,它将为每个入场和出场分别进行额外的回测运行。当这些验证回测完成后,它将比较信号蜡烛图(包括入场和出场)的指标并报告偏差。在所有信号都被验证或证伪后,将为用户生成一个结果表。

如何发现和消除偏差?如何挽救有偏差的策略?

如果你在网上发现了一个有偏差的策略,想要获得相同的结果,只是没有偏差,那么在大多数情况下你会失望。通常策略中的偏差是"好得难以置信"的利润的主要驱动因素。移除那些因偏差而推高利润的条件或指标通常会使策略显著变差。如果偏差指标或条件不是策略的核心,或者有其他不带有偏差的入场和出场信号,你可能能够部分挽救它。

前瞻性偏差的例子

结果表中的列是什么意思?

如果你有与这些出场配对的偏差入场信号,你可能会在 biased_exit_signals 中得到误报。 然而,偏差入场通常也会导致偏差出场,即使出场本身不产生偏差 - 特别是如果你的入场和出场条件使用相同的偏差指标。

首先解决入场偏差,然后解决出场偏差。

注意事项