使用 Docker 运行 Freqtrade¶
本页面介绍如何使用 Docker 运行交易机器人。该方法并非开箱即用,您仍需阅读文档并了解如何正确配置系统。
安装 Docker¶
首先下载并为您所在的平台安装 Docker / Docker Desktop:
安装 Docker Compose
Freqtrade 文档默认使用 Docker Desktop(或 Docker Compose 插件)。
虽然独立安装的 docker-compose 仍然可用,但需要将所有 docker compose 命令改为 docker-compose 才能正常运行(例如,docker compose up -d 需改为 docker-compose up -d)。
Windows 上的 Docker
如果您刚刚在 Windows 系统上安装了 Docker,请务必重启系统,否则可能会遇到与 Docker 容器网络连接相关的无法解释的问题。
使用 Docker 运行 Freqtrade¶
Freqtrade 在 Dockerhub 上提供了官方 Docker 镜像,以及一个可供直接使用的 docker compose 文件。
注意
- 以下章节假设已安装
docker并可供当前登录用户使用。 - 以下所有命令均使用相对路径,必须在包含
docker-compose.yml文件的目录中执行。
Docker 快速启动¶
创建一个新目录,并将 docker-compose 文件 放入该目录。
mkdir ft_userdata
cd ft_userdata/
# Download the docker-compose file from the repository
curl https://raw.githubusercontent.com/freqtrade/freqtrade/stable/docker-compose.yml -o docker-compose.yml
# Pull the freqtrade image
docker compose pull
# Create user directory structure
docker compose run --rm freqtrade create-userdir --userdir user_data
# Create configuration - Requires answering interactive questions
docker compose run --rm freqtrade new-config --config user_data/config.json
上述代码片段会创建一个名为 ft_userdata 的新目录,下载最新的 compose 文件并拉取 freqtrade 镜像。代码片段中的最后两步会创建 user_data 目录,并根据您的选择交互式地生成默认配置。
如何编辑机器人配置?
您可以随时编辑配置文件,使用上述配置时,该文件位于 ft_userdata 目录下的 user_data/config.json。
您还可以通过编辑 docker-compose.yml 文件中的命令部分来更改策略和命令。
添加自定义策略¶
- 配置文件现在位于
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。
远程服务器上的 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 只需运行以下两个命令即可:
# Download the latest image
docker compose pull
# Restart the image
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,请确保相应地调整配置,否则用户界面将无法访问。
docker compose run --rm
包含 --rm 会在命令执行完成后删除容器,建议除交易模式(使用 freqtrade trade 命令)外的所有模式都使用该选项。
不使用 docker compose 的 Docker 用法
"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 天历史数据,时间周期为 1 小时。数据将存储在主机的 user_data/data/ 目录中。
docker compose run --rm freqtrade download-data --pairs ETH/BTC --exchange binance --days 5 -t 1h
请前往数据下载文档了解有关数据下载的更多详情。
示例:使用 Docker 进行回测¶
在 Docker 容器中对 SampleStrategy 策略使用指定时间段的历史数据,在 5 分钟时间周期上运行回测:
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(Desktop),请务必重启系统。Docker 在未重启的情况下可能会出现网络连接问题。当然,你也应确保正确配置了相应的设置。
警告
鉴于上述情况,我们不建议在生产环境中使用 Windows 上的 Docker,而仅推荐用于实验、数据下载和回测。为可靠运行 Freqtrade,最佳选择是使用 Linux 虚拟专用服务器(VPS)。