使用 Freqtrade 与 Docker
本页面说明如何使用 Docker 运行机器人。它并非开箱即用的解决方案。你仍需要通读文档并了解如何正确配置它。
安装 Docker
首先为你的平台下载并安装 Docker / Docker Desktop:
Freqtrade 文档假设使用 Docker desktop(或 docker compose 插件)。
虽然独立的 docker-compose 安装仍然可用,但需要将所有 docker compose 命令改为 docker-compose 才能工作(例如 docker compose up -d 需要改为 docker-compose up -d)。
如果你刚在 Windows 系统上安装了 docker,请确保重启你的系统,否则你可能会遇到与 docker 容器网络连接相关的无法解释的问题。
使用 Docker 的 Freqtrade
Freqtrade 在 Dockerhub 上提供官方 Docker 镜像,以及一个可以直接使用的 docker compose 文件。
- 以下部分假设
docker已安装并且可供登录用户使用。 - 下面的所有命令都使用相对目录,必须从包含
docker-compose.yml文件的目录执行。
Docker 快速开始
创建一个新目录并将 docker-compose 文件放在此目录中。
mkdir ft_userdata
cd ft_userdata/
# 从仓库下载 docker-compose 文件
curl https://raw.githubusercontent.com/freqtrade/freqtrade/stable/docker-compose.yml -o docker-compose.yml
# 拉取 freqtrade 镜像
docker compose pull
# 创建用户目录结构
docker compose run --rm freqtrade create-userdir --userdir user_data
# 创建配置 - 需要回答交互式问题
docker compose run --rm freqtrade new-config --config user_data/config.json
上面的片段创建了一个名为 ft_userdata 的新目录,下载最新的 compose 文件并拉取 freqtrade 镜像。片段中的最后 2 个步骤创建带有 user_data 的目录,以及基于你的选择(交互式)生成默认配置。
你可以随时编辑配置,使用上述配置时,配置文件为 user_data/config.json(在目录 ft_userdata 中)。
你也可以通过编辑 docker-compose.yml 文件的 command 部分来更改策略和命令。
添加自定义策略
- 配置现在可以在
user_data/config.json中找到 - 将自定义策略复制到目录
user_data/strategies/ - 将策略的类名添加到
docker-compose.yml文件
默认运行 SampleStrategy。
SampleStrategy 只是演示!SampleStrategy 仅供你参考并为你提供自己策略的想法。请始终回测你的策略并在冒真钱风险之前先干跑一段时间!你可以在策略文档中找到有关策略开发的更多信息。
完成此操作后,你就可以启动机器人的交易模式(干跑或实盘交易,取决于你对上述相应问题的回答)。
docker compose up -d
虽然生成的配置大多是功能性的,但在启动机器人之前,你仍然需要验证所有选项是否符合你的要求(如定价、交易对列表...)。
访问 UI
如果你在 new-config 步骤中选择启用 FreqUI,你将在端口 localhost:8080 上可以使用 freqUI。
你现在可以通过在浏览器中输入 localhost:8080 来访问 UI。
如果你在 VPS 上运行,你应该考虑使用 ssh 隧道或设置 VPN(openVPN、wireguard)来连接到你的机器人。这将确保 freqUI 不会直接暴露在互联网上,出于安全原因不建议这样做(freqUI 不支持开箱即用的 https)。这些工具的设置不是本教程的一部分,但是在互联网上可以找到许多好的教程。请同时阅读使用 docker 的 API 配置部分以了解有关此配置的更多信息。
监控机器人
你可以使用 docker compose ps 检查正在运行的实例。这应该将服务 freqtrade 列为 running。如果不是这种情况,最好检查日志(参见下一点)。
Docker compose 日志
日志将写入:user_data/logs/freqtrade.log。
你也可以使用命令 docker compose logs -f 检查最新的日志。
数据库
数据库将位于:user_data/tradesv3.sqlite
使用 docker 更新 freqtrade
使用 docker 时更新 freqtrade 就像运行以下 2 个命令一样简单:
# 下载最新镜像
docker compose pull
# 重启镜像
docker compose up -d
这将首先拉取最新镜像,然后使用刚拉取的版本重启容器。
你应该始终检查变更日志以了解破坏性更改/需要手动干预的内容,并确保机器人在更新后正确启动。
编辑 docker-compose 文件
高级用户可以进一步编辑 docker-compose 文件以包含所有可能的选项或参数。
所有 freqtrade 参数都可以通过运行 docker compose run --rm freqtrade <command> <optional arguments> 来使用。
docker compose交易命令(freqtrade trade <...>)不应通过 docker compose run 运行 - 而应使用 docker compose up -d。这确保容器正确启动(包括端口转发)并确保容器在系统重启后重新启动。如果你打算使用 freqUI,请同时确保相应调整配置,否则 UI 将不可用。
docker compose run --rm包含 --rm 将在完成后删除容器,强烈建议用于除交易模式之外的所有模式(使用 freqtrade trade 命令运行)。
"docker compose run --rm" 将需要提供 compose 文件。一些不需要身份验证的 freqtrade 命令(如 list-pairs)可以改用 "docker run --rm" 运行。
例如 docker run --rm freqtradeorg/freqtrade:stable list-pairs --exchange binance --quote BTC --print-json。
这对于获取交易所信息添加到你的 config.json 而不影响正在运行的容器很有用。
示例:使用 docker 下载数据
从 Binance 下载 ETH/BTC 交易对 5 天的回测数据,时间框架为 1h。数据将存储在主机上的 user_data/data/ 目录中。
docker compose run --rm freqtrade download-data --pairs ETH/BTC --exchange binance --days 5 -t 1h
前往数据下载文档了解下载数据的更多详细信息。
示例:使用 docker 回测
在 docker 容器中为 SampleStrategy 运行回测,指定历史数据的时间范围,时间框架为 5m:
docker compose run --rm freqtrade backtesting --config user_data/config.json --strategy SampleStrategy --timerange 20190801-20191001 -i 5m
前往回测文档了解更多信息。
使用 docker 的额外依赖
如果你的策略需要默认镜像中未包含的依赖项 - 则需要在你的主机上构建镜像。为此,请创建一个包含额外依赖项安装步骤的 Dockerfile(查看 docker/Dockerfile.custom 作为示例)。
然后你还需要修改 docker-compose.yml 文件并取消注释构建步骤,以及重命名镜像以避免命名冲突。
image: freqtrade_custom
build:
context: .
dockerfile: "./Dockerfile.<yourextension>"
然后你可以运行 docker compose build --pull 来构建 docker 镜像,并使用上述命令运行它。
使用 docker 绘图
通过将 docker-compose.yml 文件中的镜像更改为 *_plot,命令 freqtrade plot-profit 和 freqtrade plot-dataframe(文档)可用。然后你可以按如下方式使用这些命令:
docker compose run --rm freqtrade plot-dataframe --strategy AwesomeStrategy -p BTC/ETH --timerange=20180801-20180805
输出将存储在 user_data/plot 目录中,可以用任何现代浏览器打开。
使用 docker compose 进行数据分析
Freqtrade 提供一个 docker-compose 文件,可以启动 jupyter lab 服务器。你可以使用以下命令运行此服务器:
docker compose -f docker/docker-compose-jupyter.yml up
这将创建一个运行 jupyter lab 的 docker 容器,可以通过 https://127.0.0.1:8888/lab 访问。请使用启动后控制台中打印的链接来简化登录。
由于此镜像的一部分是在你的机器上构建的,建议不时重建镜像以保持 freqtrade(和依赖项)为最新版本。
docker compose -f docker/docker-compose-jupyter.yml build --no-cache
故障排查
Windows 上的 Docker
- 错误:
"Timestamp for this request is outside of the recvWindow."
市场 API 请求需要同步时钟,但 docker 容器中的时间会随着时间推移逐渐偏移到过去。要临时修复此问题,你需要运行wsl --shutdown并再次重启 docker(Windows 10 上会有弹窗要求你这样做)。永久解决方案是将 docker 容器托管在 Linux 主机上,或者不时使用调度程序重启 wsl。
taskkill /IM "Docker Desktop.exe" /F
wsl --shutdown
start "" "C:\Program Files\Docker\Docker\Docker Desktop.exe"
- 无法连接到 API(Windows)
如果你在 Windows 上刚刚安装了 Docker(桌面版),请确保重启你的系统。没有重启的话,Docker 在网络连接方面可能会出现问题。当然,你也应该确保你的设置正确。
由于上述原因,我们不建议在 Windows 上使用 docker 进行生产设置,仅建议用于实验、数据下载和回测。最好使用 Linux-VPS 来可靠地运行 freqtrade。