Freqtrade:加密货币策略先回测、再模拟盘,别拿真钱试错
你能得到什么:在真钱下场前,用历史行情把一个加密货币交易策略「回放」一遍,看清它到底赚不赚、最多会亏多深,再用模拟盘按实时行情空跑。很多看起来很美的思路,回测一下就会露馅,省下的是本来要交的学费。适合:已经在做或打算做加密货币交易、会一点 Python 的人。不适合:想找一个「装上就躺赚」机器人的人,这样的东西不存在;也不适合承受不了亏损的资金。
先看这条
官方 README 的免责声明写得很直白:软件仅供学习,不要投入你害怕失去的钱,先用 Dry-run(模拟盘)弄懂它怎么运作。本页只讲工具,不构成任何投资建议。
项目速览
| 项目 | 内容 |
|---|---|
| 仓库 | freqtrade/freqtrade |
| Star | 55,681(截至 2026-10-21) |
| 许可证 | GPL-3.0 |
| 最新版本 | 2026.9(2026-09-29 发布) |
| 它做什么 | Python 写的开源加密货币交易机器人:回测、模拟盘、参数优化、网页界面和 Telegram 控制,支持多家主流交易所 |
安装指南
需要 Python 3.12 或更新版本。官方推荐 Docker。
mkdir ft_userdata && cd ft_userdata
curl https://raw.githubusercontent.com/freqtrade/freqtrade/stable/docker-compose.yml -o docker-compose.yml
docker compose pull
docker compose run --rm freqtrade create-userdir --userdir user_data
docker compose run --rm freqtrade new-config --config user_data/config.jsonpython3 -m venv .venv && source .venv/bin/activate
pip install freqtrade
freqtrade --versionpy -3.12 -m venv .venv
.venv\Scripts\activate
pip install freqtrade
freqtrade --version使用教程:拿官方示例策略做一次回测
- 建工作目录:
freqtrade create-userdir --userdir user_data,会生成目录结构和一个示例策略SampleStrategy。 - 写配置:交互式的
freqtrade new-config可以一步步生成;也可以直接用下面这份最小配置,dry_run设成true,交易所 API 密钥留空。 - 下载历史行情:
freqtrade download-data -c config.json --userdir user_data --timeframes 5m --timerange 20260801-。 - 回测:
freqtrade backtesting -c config.json --userdir user_data --strategy SampleStrategy --timeframe 5m --timerange 20260801-20261020。 - 看结果再说:重点看总收益、最大回撤、和同期「什么都不做、拿着不动」(报告里的 Market change)比谁好。
- 模拟盘:回测满意了,再
freqtrade trade -c config.json --userdir user_data --strategy SampleStrategy,dry_run保持true,让它按实时行情空跑一段时间。
{
"max_open_trades": 3,
"stake_currency": "USDT",
"stake_amount": "unlimited",
"tradable_balance_ratio": 0.99,
"fiat_display_currency": "USD",
"dry_run": true,
"dry_run_wallet": 1000,
"trading_mode": "spot",
"entry_pricing": { "price_side": "same", "use_order_book": true, "order_book_top": 1 },
"exit_pricing": { "price_side": "same", "use_order_book": true, "order_book_top": 1 },
"exchange": {
"name": "okx",
"key": "",
"secret": "",
"pair_whitelist": ["BTC/USDT", "ETH/USDT", "SOL/USDT"],
"pair_blacklist": []
},
"pairlists": [{ "method": "StaticPairList" }],
"bot_name": "dryrun-demo",
"initial_state": "running",
"internals": { "process_throttle_secs": 5 }
}我们这次回测看到了什么
用上面的配置,在 BTC/USDT、ETH/USDT、SOL/USDT 三个交易对、5 分钟 K 线、2026-08-01 到 2026-10-20(UTC)区间跑官方示例策略,模拟本金 1000 USDT:
| 指标 | 结果 |
|---|---|
| 交易次数 | 73 次,赢 66 次、亏 7 次,胜率 90.4% |
| 总收益 | +44.951 USDT(+4.50%) |
| 最大回撤(已平仓) | 128.723 USDT(10.97%) |
| 4 次止损合计 | −154.208 USDT |
| 同期市场涨幅(Market change) | +34.26% |
这张表最值得记住的一点:胜率 90% 听起来很厉害,但 66 次小赚(按 ROI 止盈合计 +235.918 USDT)被 4 次止损和 2 笔回测结束时强制平仓的单子吃掉了一大半,最后只赚 4.5%;而同一时期这三个币平均涨了 34%。也就是说,这个示例策略在这段行情里还不如拿着不动。示例策略本来就是教学用的,这正是回测的价值:在亏真钱之前看清这类账。
避坑与解决方案
交易所返回 451 或 403
我们这次从云电脑测试交易所接口:Binance 返回 451,Bybit 返回 403,OKX 和 Kraken 正常。很多交易所会按所在地区限制访问。解决:换一家在你所在地合规可用的交易所,配置里的 exchange.name 改一下即可;不要为了绕过限制去违反交易所条款。
回测赚钱,实盘不一定赚
回测没有滑点、成交延迟和情绪干扰,参数还可能被「调到刚好拟合历史」。官方提供了 lookahead-analysis 和 recursive-analysis 两个命令检查策略有没有偷看未来数据。解决:回测之后至少跑一段模拟盘,对比两者差距再做决定。
只看胜率
上面的回测就是例子:胜率 90.4%,收益却跑输拿着不动。看报告时把总收益、最大回撤、Market change 放在一起看。
API 密钥权限给太大
真要接实盘,交易所的 API 密钥只开「交易」权限,绝对不要开提现权限,并绑定 IP 白名单。在决定实盘之前,配置里的 key、secret 保持留空。
别点 README 里的邀请链接
仓库 README 的交易所列表里有个别链接带邀请码。直接去交易所官网注册就好,本站也不放任何返佣链接。
WANGXXXL 实测于 2026-10-21
- 环境:Linux 云电脑,Python 3.12 虚拟环境,
uv pip install freqtrade装到 2026.9 版(CCXT 4.5.89)。 - 数据:从 OKX 下载三个交易对 2026-08-01 起的 5 分钟 K 线,约 32 秒完成,SOL/USDT 一项就是 23,426 根 K 线。
- 回测:约 6 秒跑完,结果见上面的表格,数字全部来自 Freqtrade 输出的报告。
- 模拟盘:
freqtrade trade在dry_run模式下启动,日志显示Dry run is enabled、状态RUNNING并按时输出心跳;我们只空跑了 45 秒确认能启动,没有接任何真实账户。