使用 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/
# 从存储库下载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镜像。
代码段中的最后两个步骤将创建具有user_data
的目录,并以交互方式根据您的选择创建默认配置。
如何编辑机器人配置?
您可以随时编辑配置,该配置在使用上述配置时作为user_data/config.json
(位于ft_userdata
目录中)可用。
您还可以通过编辑docker-compose.yml
文件的命令部分来更改所选策略和命令。
添加自定义策略1. 现在的配置文件可在 user_data/config.json
中找到。¶
- 将自定义策略复制到
user_data/strategies/
目录。 - 在
docker-compose.yml
文件中添加 Strategy 类名。
默认情况下会运行 SampleStrategy
。
SampleStrategy
只是个演示!
SampleStrategy
是供您参考的,为您提供自己策略的灵感。
请在冒险使用真钱之前始终回测您的策略并使用仿真交易一段时间!
您可以在策略文档中找到关于策略开发的更多信息。
完成上述步骤后,您可以准备以交易模式(仿真交易或实盘交易,取决于您在之前提出的相应问题的答案)启动机器人。
docker compose up -d
默认配置
生成的配置文件基本上是可用的,但在启动机器人之前,您仍然需要验证所有选项是否与您想要的选项相符(例如定价、交易对列表等)。
访问用户界面¶
如果您在 new-config
步骤中选择启用 FreqUI,您将可以在端口 localhost:8080
访问 freqUI。
您现在可以在浏览器中输入 localhost:8080 来访问用户界面。
远程服务器上的用户界面访问
如果您在 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非常简单,只需运行以下两个命令:
# 下载最新镜像
docker compose pull
# 重启容器
docker compose up -d
这将首先拉取最新的镜像,然后使用刚拉取的版本重新启动容器。!!! 警告 "检查更改日志" 您应该始终检查更改日志以查看是否有破坏性更改/需要手动干预,确保更新后机器人能够正确启动。
编辑 docker-compose 文件¶
高级用户可以进一步编辑 docker-compose 文件以包含所有可能的选项或参数。
通过运行 docker compose run --rm freqtrade <command> <optional arguments>
可以使用所有 freqtrade 参数。
交易命令的 docker-compose
不应该通过 docker compose run
运行交易命令 (freqtrade trade <...>
),而应该使用 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
```请查看[数据下载文档](data-download.md)以获取有关下载数据的更多详细信息。
#### 示例:使用Docker进行回测
在Docker容器中对SampleStrategy和指定的历史数据时间范围进行回测,时间框架为5分钟:
``` bash
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.<your_extension>"
然后,您可以运行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(及其依赖项)的最新状态。
bash
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。bash 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。