回测

您所在的位置:网站首页 大智慧回测怎么操作 回测

回测

2024-07-05 21:46| 来源: 网络整理| 查看: 265

回测¶

本页面解释了如何通过使用回测来验证策略的表现。

回测需要历史数据可用。要了解如何获取你感兴趣的交易对和交易所的数据,请前往数据下载部分查看文档。

回测命令参考¶ usage: freqtrade backtesting [-h] [-v] [--logfile FILE] [-V] [-c PATH] [-d PATH] [--userdir PATH] [-s NAME] [--strategy-path PATH] [-i TIMEFRAME] [--timerange TIMERANGE] [--data-format-ohlcv {json,jsongz,hdf5}] [--max-open-trades INT] [--stake-amount STAKE_AMOUNT] [--fee FLOAT] [-p PAIRS [PAIRS ...]] [--eps] [--dmmp] [--enable-protections] [--dry-run-wallet DRY_RUN_WALLET] [--timeframe-detail TIMEFRAME_DETAIL] [--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]] [--export {none,trades,signals}] [--export-filename PATH] [--breakdown {day,week,month} [{day,week,month} ...]] [--cache {none,day,week,month}] 可选参数: -h, --help 显示帮助信息并退出 -i TIMEFRAME, --timeframe TIMEFRAME 指定时间框架(`1m`、`5m`、`30m`、`1h`、`1d`)。 --timerange TIMERANGE 指定要使用的数据范围。 --data-format-ohlcv {json,jsongz,hdf5,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 ...] 限制命令仅适用于这些交易对。交易对之间用空格分隔。 --eps, --enable-position-stacking 允许多次购买同一交易对(位置堆叠)。 --dmmp, --disable-max-market-positions 在回测期间禁用`max_open_trades`(相当于将`max_open_trades`设置为非常大的数字)。 --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)。 --export-filename PATH, --backtest-filename PATH 使用此文件名作为回测结果。需要设置`--export`选项。例如:`--export-filename=user_data/backtest_results/backtest_today.json`。 --breakdown {day,week,month} [{day,week,month} ...] 按[day, week, month]显示回测的分解。 --cache {none,day,week,month} 加载指定的缓存回测结果,不能超过指定的年龄(默认为当天)。 通用参数: -v, --verbose 详细模式(-vv以获取更多信息,-vvv获取所有消息)。 --logfile FILE 记录到指定的文件中。特殊值:'syslog'、'journald'。详细信息请参阅文档。 -V, --version 显示程序的版本号并退出 -c PATH, --config PATH 指定配置文件(默认为`userdir/config.json`或`config.json`,以存在的文件为准)。可以使用多个--config选项。可以设置为`-`以从标准输入读取配置。 -d PATH, --datadir PATH 具有历史回测数据的目录路径。 --userdir PATH, --user-data-dir PATH 用户数据目录路径。 策略参数: -s NAME, --strategy NAME 指定机器人使用的策略类名。 --strategy-path PATH 指定附加的策略查找路径。 使用回测测试你的策略¶

现在你已经有了良好的入场和退出策略,并且有一些历史数据,你希望对其进行真实数据测试。这就是我们所称的回测。

回测将使用配置文件中的加密货币对,并默认从user_data/data/加载历史蜡烛(OHLCV)数据。如果对于交易所/交易对/时间框架组合没有可用的数据,回测将要求您首先使用freqtrade download-data下载它们。有关下载的详细信息,请参阅文档中的数据下载部分。

回测的结果将确认您的机器人在盈利与亏损方面的胜率。

所有盈利计算都包括手续费,而freqtrade将使用交易所的默认手续费进行计算。

对于回测使用动态交易对列表

使用动态交易对列表是可能的(并非所有的处理程序都允许在回测模式下使用),但它依赖于当前的市场情况 - 这将不反映交易对列表的历史状态。 另外,当使用除StaticPairlist以外的交易对列表时,无法保证回测结果的可重现性。 请阅读交易对列表文档以获取更多信息。

为了实现可重现的结果,最好通过test-pairlist命令生成一个交易对列表,并将其用作静态交易对列表。

Note

默认情况下,Freqtrade将回测结果导出到user_data/backtest_results。 导出的交易可以用于进一步分析,也可以由脚本目录下的绘图子命令(freqtrade plot-dataframe)使用。

初始资金¶

回测将需要一个初始资金,可以通过--dry-run-wallet 或--starting-balance 命令行参数或通过dry_run_wallet配置设置来提供。这个金额必须高于stake_amount,否则机器人将无法模拟任何交易。

动态赌注金额¶

回测支持通过将stake_amount配置为"unlimited"来支持动态投注金额,这将把初始余额分为max_open_trades份。 早期交易的利润将导致后续的投注金额增加,从而在回测期间实现利润复利。

示例回测命令¶

使用5分钟的蜡烛图(OHLCV数据)(默认情况下)

freqtrade backtesting --strategy AwesomeStrategy

其中--strategy AwesomeStrategy / -s AwesomeStrategy指的是策略的类名,该类名位于user_data/strategies目录下的一个python文件中。

使用1分钟的蜡烛图(OHLCV数据)

freqtrade backtesting --strategy AwesomeStrategy --timeframe 1m

提供自定义的初始余额为1000(以投注货币计)

freqtrade回测 --strategy AwesomeStrategy --dry-run-wallet 1000

使用另一个存储在磁盘上的历史蜡烛(OHLCV)数据源

假设您从Binance交易所下载了历史数据,并将其保存在 user_data/data/binance-20180101 目录中。您可以按照以下方式将此数据用于回测:

freqtrade回测 --strategy AwesomeStrategy --datadir user_data/data/binance-20180101

比较多个策略

freqtrade回测 --strategy-list SampleStrategy1 AwesomeStrategy --timeframe 5m

其中 SampleStrategy1 和 AwesomeStrategy 是策略的类名。防止将交易导出到文件中

freqtrade backtesting --strategy backtesting --export none --config config.json

只有在确定不想进一步绘制或分析结果时才使用此选项。

将交易导出到文件,指定自定义的文件名

freqtrade backtesting --strategy backtesting --export trades --export-filename=backtest_samplestrategy.json

请还阅读有关策略启动期的内容。

提供自定义手续费值

有时您的帐户具有一定的手续费折扣(从特定帐户大小或每月交易量开始的手续费减免),这对 ccxt 不可见。 为了在回测中考虑到这一点,您可以使用“--fee”命令行选项将此值提供给回测。 此手续费必须是一个比例,将应用两次(一次为交易进入,一次为交易退出)。例如,如果每笔订单的佣金费率为0.1%(即0.001表示的比例),则您可以按照以下方式运行回测:

freqtrade backtesting --fee 0.001

注意

只有在您想尝试不同的佣金费率时,请提供此选项(或相应的配置参数)。默认情况下,回测将从交易对/市场信息中获取默认费率。

通过使用时间范围来运行较小的测试集进行回测

使用 --timerange 参数来更改您想要使用的测试集的数据量。

例如,使用 --timerange=20190501- 选项来运行回测将使用从2019年5月1日开始的所有可用数据。

freqtrade backtesting --timerange=20190501-

您还可以指定特定的日期范围。

完整的时间范围指定:- 使用截至 2018/01/31 的数据:--timerange=-20180131 - 使用从 2018/01/31 开始的数据:--timerange=20180131- - 使用从 2018/01/31 到 2018/03/01 之间的数据:--timerange=20180131-20180301 - 使用 POSIX/epoch 时间戳 1527595200 和 1527618600 之间的数据:--timerange=1527595200-1527618600

理解回测结果¶

回测中最重要的是理解结果。

一个回测结果如下所示:

========================================================= 回测报告 ========================================================= | 交易对 | 成交数量 | 平均利润% | 总利润% | 总利润BTC | 总利润% | 平均持续时间 | 胜仓 平仓 负仓 胜率 | |:---------|--------:|---------:|--------:|-----------:|-------:|:-------------|------------------:| | ADA/BTC | 35 | -0.11 | -3.88 | -0.00019428 | -1.94 | 4小时35分钟 | 14 0 21 40.0 | | ARK/BTC | 11 | -0.41 | -4.52 | -0.00022647 | -2.26 | 2小时3分钟 | 3 0 8 27.3 | | BTS/BTC | 32 | 0.31 | 9.78 | 0.00048938 | 4.89 | 5小时5分钟 | 18 0 14 56.2 | | DASH/BTC | 13 | -0.08 | -1.07 | -0.00005343 | -0.53 | 4小时39分钟 | 6 0 7 46.2 | | ENG/BTC | 18 | 1.36 | 24.54 | 0.00122807 | 12.27 | 2小时50分钟 | 8 0 10 44.4 | | EOS/BTC | 36 | 0.08 | 3.06 | 0.00015304 | 1.53 | 3小时34分钟 | 16 0 20 44.4 | | ETC/BTC | 26 | 0.37 | 9.51 | 0.00047576 | 4.75 | 6小时14分钟 | 11 0 15 42.3 | | ETH/BTC | 33 | 0.30 | 9.96 | 0.00049856 | 4.98 | 7小时31分钟 | 16 0 17 48.5 | | IOTA/BTC | 32 | 0.03 | 1.09 | 0.00005444 | 0.54 | 3小时12分钟 | 14 0 18 43.8 | | LSK/BTC | 15 | 1.75 | 26.26 | 0.00131413 | 13.13 | 2小时58分钟 | 6 0 9 40.0 | | LTC/BTC | 32 | -0.04 | -1.38 | -0.00006886 | -0.69 | 4小时49分钟 | 11 0 21 34.4 | | NANO/BTC | 17 | 1.26 | 21.39 | 0.00107058 | 10.70 | 1小时55分钟 | 10 0 7 58.5 | | NEO/BTC | 23 | 0.82 | 18.97 | 0.00094936 | 9.48 | 2小时59分钟 | 10 0 13 43.5 | | REQ/BTC | 9 | 1.17 | 10.54 | 0.00052734 | 5.27 | 3小时47分钟 | 4 0 5 44.4 | | XLM/BTC | 16 | 1.22 | 19.54 | 0.00097800 | 9.77 | 3小时15分钟 | 7 0 9 43.8 | | XMR/BTC | 23 | -0.18 | -4.13 | -0.00020696 | -2.07 | 5小时30分钟 | 12 0 11 52.2 | | XRP/BTC | 35 | 0.66 | 22.96 | 0.00114897 | 11.48 | 3小时49分钟 | 12 0 23 34.3 | | ZEC/BTC | 22 | -0.46 | -10.18 | -0.00050971 | -5.09 | 2小时22分钟 | 7 0 15 31.8 | | TOTAL | 429 | 0.36 | 152.41 | 0.00762792 | 76.20 | 4小时12分钟 | 186 0 243 43.4 | ====================================================== 未平仓交易报告 ====================================================== | 交易对 | 成交数量 | 平均利润% | 总利润% | 总利润BTC | 总利润% | 平均持续时间 | 胜仓 平仓 负仓 胜率 | |:---------|--------:|---------:|--------:|-----------:|-------:|:---------------|-------------------:| | ADA/BTC | 1 | 0.89 | 0.89 | 0.00004434 | 0.44 | 6小时00分钟 | 1 0 0 100 | | LTC/BTC | 1 | 0.68 | 0.68 | 0.00003421 | 0.34 | 2小时00分钟 | 1 0 0 100 | | TOTAL | 2 | 0.78 | 1.57 | 0.00007855 | 0.78 | 4小时00分钟 | 2 0 0 100 | ==================== 退出原因统计 ==================== | 退出原因 | 退出次数 | 胜利次数 | 平局次数 | 输掉次数 | |:-----------------|----------:|----------:|---------:|----------:| | trailing_stop_loss | 205 | 150 | 0 | 55 | | stop_loss | 166 | 0 | 0 | 166 | | exit_signal | 56 | 36 | 0 | 20 | | force_exit | 2 | 0 | 0 | 2 | ================== 总结指标 ================== | 指标 | 值 | |-------------------------|---------------------| | 回测开始时间 | 2019-01-01 00:00:00 | | 回测结束时间 | 2019-05-01 00:00:00 | | 最大未平仓交易 | 3 | | | | | 总交易次数/每日平均交易次数 | 429 / 3.575 | | 起始余额 | 0.01000000 BTC | | 最终余额 | 0.01762792 BTC | | 绝对利润 | 0.00762792 BTC | | 总利润% | 76.2% | | 年均复合增长率% | 460.87% | | Sortino比率 | 1.88 | | 夏普比率 | 2.97 | | Calmar比率 | 6.29 | | 盈亏比 | 1.11 | | 期望值 (比率) | -0.15 (-0.05) | | 平均投入金额 | 0.001 BTC | | 总交易量 | 0.429 BTC | | | | | 做多 / 做空 | 352 / 77 | | 做多总利润% | 1250.58% | | 做空总利润% | -15.02% | | 做多绝对利润 | 0.00838792 BTC | | 做空绝对利润 | -0.00076 BTC | | | | | 最佳交易对 | LSK/BTC 26.26% | | 最差交易对 | ZEC/BTC -10.18% | | 最佳交易 | LSK/BTC 4.25% | | 最差交易 | ZEC/BTC -10.25% | | 最佳交易日 | 0.00076 BTC | | 最差交易日 | -0.00036 BTC | | 胜平负天数 | 12 / 82 / 25 | | 胜利交易平均持续时间 | 4小时23分钟 | | 输掉交易平均持续时间 | 6小时55分钟 | | 最大连续胜利次数 / 输掉次数 | 3 / 4 | | 被忽略的入场信号数 | 3089 | | 入场/退出超时次数 | 0 / 0 | | 被取消的交易入场次数 | 34 | | 被取消的入场指令次数 | 123 | | 被替换的入场指令次数 | 89 | | | | | 最低余额 | 0.00945123 BTC | | 最高余额 | 0.01846651 BTC | | 最大资金亏损比例 | 25.19% | | 绝对回撤 / 最近回撤 / 最大回撤 | 13.33% | | 回撤 | 0.0015 BTC | | 最大回撤时期开始时间 | 2019-02-15 14:10:00 | | 最大回撤时期结束时间 | 2019-04-11 18:15:00 | | 市场变化 | -5.88% | ===================================================== 回测报告表格¶

第一个表格包含了机器人进行的所有交易,包括“未平仓交易”。

最后一行给出了您策略的整体表现,本例中为:

| TOTAL | 429 | 0.36 | 152.41 | 0.00762792 | 76.20 | 4小时12分钟 | 186 0 243 43.4 |

该机器人已进行了429笔交易,平均持续时间为4小时12分钟,投资回报率为76.20%(利润),这意味着从0.01 BTC的初始资本开始赚取了总共0.00762792 BTC。

“Avg Profit %”列显示了所有交易的平均利润,而“Cum Profit %”列则总结了所有的利润/亏损。而“Tot Profit %”列则显示了相对于初始资金的总利润百分比。 在上述结果中,我们从0.01 BTC的初始资金开始,获得了0.00762792 BTC的绝对利润,所以“Tot Profit %”将会是(0.00762792 / 0.01) * 100 ≈ 76.2%。

您的策略绩效受到入市策略、出市策略以及您所设置的“minimal_roi”和“stop_loss”的影响。

例如,如果您的“minimal_roi”只是 "0": 0.01,则您不能期望机器人获得超过1%的利润(因为它会在每笔交易达到1%时退出)。

另一方面,如果您设置了一个过高的“minimal_roi”,比如"0": 0.55(55%),则机器人几乎不可能达到这个利润。因此,请记住您的绩效是策略的各个不同元素、配置和您设置的加密货币交易对的综合体现。

出市原因表¶

第二个表格是出市原因的总结。这个表格可以告诉您哪个方面需要进一步改进(例如,所有或者许多“exit_signal”交易都是亏损的,因此您应该改进出市信号,或者考虑禁用它)。

未完成交易表¶

第三个表格包含机器人在回测期结束时被迫“force_exit”的所有交易,以便为您呈现全面的图片。这是为了模拟实际行为的必要部分,因为回测期必须在某一时刻结束,而在现实情况下,您可以让机器人一直运行下去。这些交易也包括在第一个表格中,但在本表格中也单独显示,以增加清晰度。

总结指标¶

回测报告的最后一个元素是总结指标表。它包含有关回测数据上策略表现的一些有用的关键指标。

================== 总结指标 ================== | 指标 | 值 | |-----------------------------+---------------------| | 回测开始时间 | 2019-01-01 00:00:00 | | 回测结束时间 | 2019-05-01 00:00:00 | | 最大持仓交易对数 | 3 | | | | | 总交易次数 / 每日平均交易次数| 429 / 3.575 | | 起始余额 | 0.01000000 BTC | | 最终余额 | 0.01762792 BTC | | 绝对利润 | 0.00762792 BTC | | 总利润百分比 | 76.2% | | 年化复合增长率 | 460.87% | | Sortino比率 | 1.88 | | Sharpe比率 | 2.97 | | Calmar比率 | 6.29 | | 盈亏比 | 1.11 | | 期望值(比例) | -0.15 (-0.05) | | 平均持仓金额 | 0.001 BTC | | 总交易量 | 0.429 BTC | | | | | 多头 / 空头 | 352 / 77 | | 多头总利润百分比 | 1250.58% | | 空头总利润百分比 | -15.02% | | 多头绝对利润 | 0.00838792 BTC | | 空头绝对利润 | -0.00076 BTC | | | | | 最佳交易对 | LSK/BTC 26.26% | | 最差交易对 | ZEC/BTC -10.18% | | 最佳交易 | LSK/BTC 4.25% | | 最差交易 | ZEC/BTC -10.25% | | 最佳交易日 | 0.00076 BTC | | 最差交易日 | -0.00036 BTC | | 胜/平/负天数 | 12 / 82 / 25 | | 平均获胜持续时间 | 4:23:00 | | 平均亏损持续时间 | 6:55:00 | | 最大连续获胜/亏损次数 | 3 / 4 | | 被拒绝的入场信号数量 | 3089 | | 入场/退出超时数量 | 0 / 0 | | 取消的交易入场数量 | 34 | | 取消的入场订单数量 | 123 | | 替换的入场订单数量 | 89 | | | | | 最低账户余额 | 0.00945123 BTC | | 最高账户余额 | 0.01846651 BTC | | 最大回撤比例 | 25.19% | | 绝对回撤(以账户为基准) | 13.33% | | 回撤金额 | 0.0015 BTC | | 回撤高点 | 0.0013 BTC | | 回撤低点 | -0.0002 BTC | | 回撤开始时间 | 2019-02-15 14:10:00 | | 回撤结束时间 | 2019-04-11 18:15:00 | | 市场变化 | -5.88% | ===================================================== 回测开始时间 / 回测结束时间: 回测范围(通常使用 --timerange 选项定义)。 最大持仓交易对数: max_open_trades 设置(或 --max-open-trades)— 或交易对列表中的交易对数(以较小者为准)。 总交易次数 / 每日平均交易次数: 与回测输出表中的总交易次数相同 / 总交易次数除以回测持续时间(以天为单位)(这将为您提供有关策略预期交易次数的信息)。 起始余额: 起始余额 — 来自 dry-run-wallet(配置或命令行)。 最终余额: 最终余额 — 起始余额 + 绝对利润。 绝对利润: 以投注货币计算的利润。 总利润百分比: 总利润。对齐第一个表格TOTAL行的Tot Profit %。计算公式为:(End capital − Starting capital) / Starting capital。 年化复合增长率: 复合年增长率。 Sortino比率: 年化 Sortino 比率。 Sharpe比率: 年化 Sharpe 比率。 Calmar比率: 年化 Calmar 比率。 盈亏比: 盈利 / 亏损。 平均持仓金额: 平均持仓金额,可以是 stake_amount 或者动态持仓金额的平均值。 总交易量: 实现上述利润所需的交易量。 最佳交易对 / 最差交易对: 最佳和最差的交易对及其相应的累积利润百分比。 最佳交易 / 最差交易: 最大单笔盈利交易和最大单笔亏损交易。 最佳交易日 / 最差交易日: 基于每日利润的最佳和最差交易日。 胜/平/负天数: 获胜 / 输掉的天数(平局通常是没有完成交易的天数)。 平均获胜持续时间 / 平均亏损持续时间: 获胜交易和亏损交易的平均持续时间。 最大连续获胜/亏损次数: 连续获胜 / 亏损次数最大的次数。 被拒绝的入场信号数量: 由于达到 max_open_trades 上限而无法操作的交易入场信号数量。 入场/退出超时数量: 未执行的入场/退出订单(仅适用于使用自定义定价时)。 取消的交易入场数量: 根据用户请求通过 adjust_entry_price 取消的交易数量。 取消的入场订单数量: 根据用户请求通过 adjust_entry_price 取消的入场订单数量。 替换的入场订单数量: 根据用户请求通过 adjust_entry_price 替换的入场订单数量。 最低账户余额 / 最高账户余额: 回测期间最低和最高的钱包余额。 最大回撤比例: 自模拟开始以来,账户下跌的最大百分比。计算公式为:(Max Balance - Current Balance) / (Max Balance)。 绝对回撤(以账户为基准): 所经历的最大账户回撤。计算公式为:(绝对回撤) / (回撤高点 + 起始余额)。 回撤金额: 所经历的最大、绝对回撤。回撤高点和随后的低点之间的差值。 回撤高点 / 回撤低点: 最大回撤期间的起始利润和结束利润。负的低点意味着初始资本损失。 回撤开始时间 / 回撤结束时间: 此最大回撤的开始和结束日期时间(也可以通过 plot-dataframe 子命令可视化)。 市场变化: 回测期间市场的变化。计算公式为:所有交易对的首个和最后一个蜡烛的“close”列的平均变化。 多头 / 空头: 多头和空头的交易数量分割(仅当进行了空头交易时显示)。 多头总利润百分比 / 多头绝对利润: 仅多头交易的利润(仅当进行了空头交易时显示)。 空头总利润百分比 / 空头绝对利润: 仅空头交易的利润(仅当进行了空头交易时显示)。 每日/每周/每月细分¶

您可以使用 --breakdown 参数获取每日/每周或每月的结果概览。

要可视化每日和每周细分,请使用以下命令:

freqtrade backtesting --strategy MyAwesomeStrategy --breakdown day week ======================== 每日细分 ========================= | 日期 | 总利润 USDT | 胜利次数 | 平局次数 | 失败次数 | |------------+-----------------+---------+-----------+----------| | 2021-07-03 | 200.0 | 2 | 0 | 0 | | 2021-07-04 | -50.31 | 0 | 0 | 2 | | 2021-07-05 | 220.611 | 3 | 2 | 0 | | 2021-07-06 | 150.974 | 3 | 0 | 2 | | 2021-07-07 | -70.193 | 1 | 0 | 2 | | 2021-07-08 | 212.413 | 2 | 0 | 3 |

输出将显示一个包含给定时间段内实际获利的绝对金额(以投注货币计)的表格,以及在这一天实现的(关闭的)赢局、平局和输局数量。在下面将有一个第二个表格,用于由本周的结束日期指示的周汇总值。同样的方式适用于由月底日期指示的月份细分。

回测结果缓存¶

为了节省时间,默认情况下,当回测的策略和配置与先前的回测的策略和配置匹配时,回测将重复使用来自前一天的缓存结果。如果要强制进行新的回测,即使存在相同运行的现有结果,请指定 --cache none 参数。

警告

对于没有结束时间的时间范围(--timerange 20210101-),缓存被自动禁用了,因为 freqtrade 无法特别确保底层数据没有发生变化。如果原始回测在结尾处缺少数据,并通过下载更多数据进行了修复,缓存结果也可能在不应该使用缓存结果的情况下使用。 在这种情况下,请使用 --cache none 一次,以强制进行新的回测。

进一步分析回测结果¶

要进一步分析您的回测结果,您可以导出交易记录。然后,您可以加载这些交易记录进行进一步分析,如数据分析回测部分所示。

回测所做的假设¶

由于回测缺乏有关蜡烛内部发生的详细信息,因此需要进行一些假设:

遵守交易所的交易限制 条目发生在开盘价 所有订单以请求的价格成交(无滑点,无未成交订单) 退出信号的退出事情发生在连续蜡烛的开盘价 退出信号优先于止损,因为假设退出信号在蜡烛的开盘价上触发 投资回报率(ROI) 与最高价比较退出 - 但使用ROI值(例如,ROI = 2%,最高值=5% - 因此退出将在2%处) 退出从未“低于蜡烛”,因此2%的ROI可能导致2.4%利润时的退出 ROI输入在触发蜡烛上生效(例如,对于1小时的蜡烛,120: 0.02-从60: 0.05进入)将使用蜡烛的开盘价作为退出率 =-1 ROI输入引起的强制退出使用低点作为退出值,除非N落在蜡烛开盘价上(例如,对于1小时的蜡烛,120: -1) 止损退出确切发生在止损价格上,即使最低价更低,但亏损金额将比止损价格高 2 * fees 停损在一个蜡烛内在进行ROI之前进行评估。因此,与相同策略在模拟运行/实盘交易模式下获得的结果相比,您通常会看到具有stoploss退出原因的更多交易 最低价先于最高价进行止损,首先保护资本 移动止损 仅当移动止损低于蜡烛的最低价时才进行调整(否则将被触发) 在触发移动止损的交易开始蜡烛上,假设使用“最小偏移量”(stop_positive_offset)(而不是最高价) - 并从此点计算止损。对于自定义止损情况,此规则不适用,因为没有关于止损逻辑的信息可用。 最高价先发生 - 调整止损 最低价使用调整后的止损(因此正确回测高低差异较大的退出) ROI在移动止损之前应用,以确保利润在ROI处“顶部封顶”,如果ROI和移动止损都适用,则先应用ROI 退出原因不解释交易是盈利还是亏损,只是解释触发了退出的原因(如果使用了负的ROI值,可能会看起来很奇怪) 评估顺序(如果同一蜡烛上发生多个信号) 退出信号 止损 ROI 移动止损根据这些假设,回测试图尽可能真实地模拟交易。然而,回测永远不会取代以模拟交易方式运行策略。 此外,请记住,过去的结果并不能保证未来的成功。

除了上述假设之外,策略作者应仔细阅读常见错误部分,以避免在回测中使用实际市场条件中不可用的数据。

回测中的交易限制¶

交易所有一些交易限制,如最小(和最大)基准货币,或最小/最大收益(报价)货币。 这些限制通常在交易所文档中列出为“交易规则”或类似名称,并且在不同交易对之间可能会有很大的差异。

回测(以及实时和模拟交易)会遵守这些限制,并确保止损价可以低于此值-因此该值将略高于交易所规定的值。 然而,Freqtrade对历史限制没有任何信息。

这可能导致交易限制的膨胀,因为使用历史价格,导致最低金额超过50美元。

例如:

BTC的最小可交易金额为0.001。 BTC今天的交易价格为22,000美元(与0.001 BTC相关)- 但回测期间的价格高达50,000美元。 今天的最低金额将是0.001 * 22_000 - 或22美元。 然而,限制也可能为50美元-基于某个历史设置中的0.001 * 50_000。

交易精度限制¶

大多数交易所对价格和金额都有精度限制,因此您不能购买1.0020401个货币对,或以1.24567123123的价格购买。 相反,这些价格和金额将四舍五入或截断(根据交易所定义)为规定的交易精度。 上述值可能会被四舍五入为1.002的金额,以及1.24567的价格。这些精度值是基于当前交换限制(如上一节交易限制中描述的),因为历史精度限制不可用。

改进的回测准确性¶

回测的一个重要限制是无法知道价格在蜡烛内部如何移动(收盘前是高还是低?)。假设您在1小时的时间框架内运行回测,那么该蜡烛有四个价格(开盘价、最高价、最低价、收盘价)。

虽然回测确实对此有一些假设(参见上文)- 这永远不可能是完美的,并且总会有一种或另一种方式上的偏差。为了减轻这个问题,Freqtrade可以使用更低(更快)的时间框架来模拟蜡烛内部的价格变动。

要使用此功能,您可以将 --timeframe-detail 5m 添加到常规的回测命令中。

freqtrade backtesting --strategy AwesomeStrategy --timeframe 1h --timeframe-detail 5m

这将加载1小时数据以及5分钟数据。策略将使用1小时时间框架进行分析,并且订单将只在主时间框架上下达,但订单成交和退出信号将在5分钟蜡烛上进行评估,模拟蜡烛内部的价格变动。

所有回调函数(custom_exit()、custom_stoploss(),等等)将在交易打开后的每个5分钟蜡烛上运行一次(在上述1小时时间框架和5分钟详细时间框架的示例中,运行12次)。

--timeframe-detail 必须小于原始时间框架,否则回测无法启动。

显然,这将需要更多的内存(5分钟数据比1小时数据更大),并且还将影响运行时间(取决于交易量和交易持续时间)。此外,数据必须已经可用/已下载。!!!提示 你可以将这个函数作为策略开发的最后一部分使用,以确保你的策略没有利用回测假设之一。在这种模式下表现相似的策略有很大机会在干燥/实时模式下表现良好(尽管只有前向测试(干燥模式)才能真正确认一个策略)。

回测多个策略¶

要比较多个策略,可以将策略的列表提供给回测。

这仅限于每次运行一个时间框架值。但是,数据只从磁盘中加载一次,因此如果您有多个想要比较的策略,这将大大提高运行时效率。

所有列出的策略都需要位于同一个目录下,除非还指定了--recursive-strategy-search参数,此参数还会考虑策略目录中的子目录。

freqtrade backtesting --timerange 20180401-20180410 --timeframe 5m --strategy-list Strategy001 Strategy002 --export trades

这将把结果保存到user_data/backtest_results/backtest-result-.json文件中,包括Strategy001和Strategy002的结果。还将有一张额外的表格比较不同策略的盈亏(与第一个表格中的“总计”行相同)。所有策略的详细输出一个接着一个地可用,因此请确保向上滚动以查看每个策略的详细信息。

=========================================================== STRATEGY SUMMARY =========================================================================== | 策略 | 入场次数 | 平均收益 % | 总收益 % | 总收益 BTC | 总收益 % | 平均持续时间 | 胜利次数 | 平局次数 | 输掉次数 | 最大回撤 % | |:-----------|---------:|---------------:|---------------:|-----------------:|---------------:|:---------------|-------:|--------:|--------:|-------------:| | 策略1 | 429 | 0.36 | 152.41 | 0.00762792 | 76.20 | 4:12:00 | 186 | 0 | 243 | 45.2 | | 策略2 | 1487 | -0.13 | -197.58 | -0.00988917 | -98.79 | 4:43:00 | 662 | 0 | 825 | 241.68 | 下一步¶

很棒,你的策略是盈利的。如果机器人能够给出你的策略的最佳参数,会怎样呢?你的下一步是学习如何使用Hyperopt找到最佳参数。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3