要在同一台机器上运行多个 Freqtrade 实例,必须为每个实例配置独立的数据库文件、Telegram 机器人(如果启用)和 REST API 端口(如果启用)。每个实例使用不同的配置文件启动,并通过 --db-url 参数指定唯一的 SQLite 数据库路径,以避免交易数据冲突。例如,一个实例可使用 tradesBTC.live.sqlite 存储 BTC 交易数据,另一个使用 tradesUSDT.live.sqlite 存储 USDT 交易数据。若启用 REST API,需为每个实例分配不同的本地端口(如 8080 和 8081),防止端口冲突。同时,若使用 Telegram,每个实例需使用独立的 Bot Token 和配置文件。
Freqtrade 默认根据运行模式自动选择不同的 SQLite 数据库文件:在实时交易(live)模式下,默认使用 tradesv3.sqlite;在模拟交易(dry-run)模式下,默认使用 tradesv3.dryrun.sqlite。这两个文件分别用于保存真实交易记录和模拟交易记录,互不干扰。它们存储了交易历史、持仓状态、盈亏数据等关键信息,确保在进程意外中断后能恢复运行状态。若未手动指定 --db-url,系统会自动使用对应默认文件;若指定自定义路径,Freqtrade 会在首次启动时自动创建该数据库文件。
可以通过在启动 Freqtrade 时添加 --db-url 参数来指定自定义数据库路径,该参数需要一个符合 SQLAlchemy 格式的 URL。例如,要使用名为 tradesBTC.dryrun.sqlite 的数据库,可运行命令:freqtrade trade -c MyConfigBTC.json -s MyCustomStrategy --db-url sqlite:///user_data/tradesBTC.dryrun.sqlite。SQLite 数据库路径必须以 sqlite:/// 开头,后接文件的相对或绝对路径。如果指定的数据库文件不存在,Freqtrade 会在启动时自动创建它。确保路径中的目录已存在,否则会因权限或路径错误导致启动失败。
要使用 Docker 运行多个 Freqtrade 实例,需在 docker-compose.yml 文件中为每个实例定义独立的服务(如 freqtrade1 和 freqtrade2)。每个服务必须使用不同的容器名称、挂载相同的 user_data 卷、指定不同的数据库文件路径(如 tradesv3_freqtrade1.sqlite 和 tradesv3_freqtrade2.sqlite)、不同的日志文件路径,并为 REST API 分配不同的端口映射(如 8080:8080 和 8081:8080)。每个实例还应使用独立的配置文件(如 config.freqtrade1.json 和 config.freqtrade2.json),以便为不同实例设置不同的策略、交易对或 Telegram 设置。所有实例共享同一个 user_data 目录,但通过配置文件隔离运行参数。
除了默认的 SQLite,Freqtrade 还支持 PostgreSQL 和 MariaDB/MySQL 数据库系统,这是通过 SQLAlchemy 数据库抽象层实现的。这些数据库系统适用于需要更高并发、更稳定存储或远程访问的生产环境。但请注意,Freqtrade 不会自动安装这些数据库的驱动程序,用户需手动安装相应 Python 包:PostgreSQL 需安装 psycopg2-binary,MariaDB/MySQL 需安装 pymysql。安装后,可通过 --db-url 参数指定数据库连接字符串,例如 PostgreSQL 使用 postgresql+psycopg2://username:password@localhost:5432/freqtrade_db,MariaDB 使用 mysql+pymysql://username:password@localhost:3306/freqtrade_db。
使用 PostgreSQL 或 MariaDB 时,用户需自行负责数据库的安装、配置、备份与维护,Freqtrade 团队不提供相关支持。每个 Freqtrade 实例必须连接到独立的数据库,或使用不同的数据库用户、Schema 来隔离数据。数据库需提前创建好,并确保 Freqtrade 有权限读写。启动时,Freqtrade 会自动创建所需的表格结构,无需手动建表。建议为每个交易策略或交易对配置独立的数据库实例,以避免数据混淆。此外,由于这些数据库通常运行在远程服务器或容器中,网络延迟和连接稳定性可能影响交易性能,需进行充分测试。
要将 Freqtrade 配置为 systemd 服务,需将 freqtrade.service 文件复制到用户 systemd 目录(如 ~/.config/systemd/user/),然后修改其中的 WorkingDirectory 和 ExecStart 字段,使其指向你的 Freqtrade 安装路径和配置文件。例如,设置 ExecStart=/usr/local/bin/freqtrade trade -c /home/user/freqtrade/user_data/config.json。保存后,运行 systemctl --user start freqtrade 启动服务。若希望服务在用户登出后仍持续运行,需执行 sudo loginctl enable-linger "$USER" 启用 linger 功能。若系统不支持用户服务目录(如 Raspbian),则需将文件复制到 /etc/systemd/user/ 并使用 sudo 权限管理。
systemd watchdog 是一种由 systemd 提供的进程监控机制,可在 Freqtrade 崩溃或无响应时自动重启它。要启用该功能,需在 Freqtrade 配置文件中设置 "internals.sd_notify": true,或在启动命令中添加 --sd-notify 参数。此时,Freqtrade 会通过 sd_notify 协议向 systemd 发送心跳信号,报告其当前状态(运行、暂停或停止)。systemd 会监听这些信号,若在超时时间内未收到心跳,则自动重启服务。示例配置文件 freqtrade.service.watchdog 提供了启用 watchdog 的完整模板。注意:该功能在 Docker 容器中不可用,因为容器与主机 systemd 之间无法直接通信。
必须使用不同的数据库文件,是因为 Freqtrade 的数据库用于记录所有交易活动、持仓状态、订单历史和账户余额快照。若多个实例共享同一个数据库文件,它们将相互覆盖彼此的交易记录,导致持仓混乱、盈亏计算错误、订单状态错乱,甚至引发重复下单或误判止盈止损。例如,一个实例开仓 BTC/USDT,另一个实例可能因看到错误的持仓数据而错误地平仓。独立数据库确保每个实例的交易数据完全隔离,保证策略测试或多币种交易的准确性与可靠性。
当运行多个 Freqtrade 实例时,若启用 Telegram 通知,每个实例必须使用独立的 Telegram Bot Token 和 chat ID,以避免通知发送到错误的频道或混淆来源。这需要为每个实例创建独立的配置文件(如 config.bot1.json 和 config.bot2.json),并在其中分别设置 "telegram": { "enabled": true, "token": "xxx", "chat_id": "yyy" }。每个 Bot Token 应通过 @BotFather 创建,确保每个实例拥有专属通知通道。若共用同一 Telegram Bot,通知将无法区分来自哪个实例,可能导致操作误判或信息混乱。
在 Docker 环境中,建议将配置文件拆分为多个模块:一个基础配置文件(如 config.json)包含所有实例共用的设置(如交易所密钥、交易对列表、风险控制),每个实例拥有独立的覆盖配置文件(如 config.freqtrade1.json),仅包含该实例特有的参数(如数据库路径、端口、Telegram Token、策略参数)。启动时,通过 --config /freqtrade/user_data/config.json --config /freqtrade/user_data/config.freqtrade1.json 同时加载多个文件,后加载的配置会覆盖前面的同名字段。这种方式实现配置复用,便于统一更新公共设置,同时保持实例独立性,提升可维护性和可扩展性。
在 systemd 服务中启用 linger(通过 sudo loginctl enable-linger "$USER")是必要的,因为默认情况下,systemd 用户服务仅在用户登录状态下运行。当用户注销或关闭终端时,所有用户级服务会被终止,导致 Freqtrade 机器人停止运行。启用 linger 后,系统会在用户登出时仍保持其会话上下文,允许用户服务(如 Freqtrade)作为后台守护进程持续运行,即使没有交互式登录会话。这对于 24/7 自动交易至关重要,确保机器人不会因用户登出而意外中断。
不支持。Freqtrade 的 journald 日志功能依赖于 cysystemd Python 库,该库仅在 Linux 系统上可用,因为它直接与 systemd 的本地通信接口交互。Windows 没有 systemd 服务架构,因此无法使用 --logfile journald 或 JournaldLogHandler。在 Windows 上,应使用文件日志(--logfile)、syslog(通过第三方 syslog 服务器)或 JSON 格式日志输出,再由日志代理程序(如 Filebeat)转发至集中式日志系统。
要使用 docker-compose 更新你的交易机器人,你需要执行两个命令。首先,运行 docker-compose pull 来下载最新的镜像版本,这会从远程仓库获取最新更新的容器镜像。接着,运行 docker-compose up -d 来停止当前运行的容器并使用新镜像重新启动服务。-d 参数表示以守护进程模式在后台运行,这样你可以在终端继续其他操作。这种方式确保你的机器人始终运行在最新版本上,同时保留了原有的配置和数据卷。