Skip to content

高级后安装任务

本页面介绍了一些高级任务和配置选项,可以在机器人安装完成后执行,对某些环境可能有用。

如果你不知道这里提到的东西是什么意思,那你可能不需要它。

同时运行多个 Freqtrade 实例

本部分将向您展示如何在同一台机器上同时运行多个机器人。

需要考虑的事项

  • 使用不同的数据库文件。
  • 使用不同的 Telegram 机器人(需要多个不同的配置文件; 仅在启用 Telegram 时适用)。
  • 使用不同的端口(仅在启用 Freqtrade REST API web 服务器时适用)。

不同的数据库文件

为了跟踪您的交易、利润等信息,freqtrade 使用 SQLite 数据库来存储各种类型的信息,例如过去执行的交易和您在任何时间所持有的当前仓位。这允许您跟踪您的利润,但更重要的是,如果机器人进程被重新启动或意外终止,可以跟踪正在进行的活动。

Freqtrade 默认情况下将为干跑(dry-run)和实盘模式使用单独的数据库文件(这假设在配置或命令行参数中都未提供 database-url)。 对于实盘交易模式,默认数据库将是 tradesv3.sqlite,而对于干跑模式将是 tradesv3.dryrun.sqlitetrade 命令的可选参数用于指定文件的路径,叫做 --db-url,它需要一个有效的 SQLAlchemy 链接。 因此,当你以只提供配置和策略参数的方式启动一个处于模拟运行模式的交易 bot 时,下面的两个命令将会产生相同的结果。

freqtrade trade -c MyConfig.json -s MyStrategy
# 等价于
freqtrade trade -c MyConfig.json -s MyStrategy --db-url sqlite:///tradesv3.dryrun.sqlite

这意味着,如果你在两个不同的终端中运行 trade 命令,例如一个用于测试 USDT 交易,另一个用于测试 BTC 交易,你需要使用不同的数据库运行它们。

如果你指定了一个不存在的数据库 URL,freqtrade 将会创建一个以你指定的名称命名的数据库。因此,为了使用 BTC 和 USDT 两种货币进行测试你的自定义策略,你可以使用以下命令(在两个独立的终端中):

# 终端 1:
freqtrade trade -c MyConfigBTC.json -s MyCustomStrategy --db-url sqlite:///user_data/tradesBTC.dryrun.sqlite
# 终端 2:
freqtrade trade -c MyConfigUSDT.json -s MyCustomStrategy --db-url sqlite:///user_data/tradesUSDT.dryrun.sqlite

相反地,如果你希望在生产模式下做同样的事情,你还需要创建至少一个新的数据库(除了默认的那个)并指定路径到“live”数据库,例如:

# 终端 1:
freqtrade trade -c MyConfigBTC.json -s MyCustomStrategy --db-url sqlite:///user_data/tradesBTC.live.sqlite
# 终端 2:
freqtrade trade -c MyConfigUSDT.json -s MyCustomStrategy --db-url sqlite:///user_data/tradesUSDT.live.sqlite

有关使用 sqlite 数据库的更多信息,例如手动输入或删除交易,请参阅 SQL 速查表

使用 Docker 运行多个实例

要使用 Docker 运行多个 freqtrade 实例,你需要编辑 docker-compose.yml 文件,并将所有你想要的实例作为单独的服务添加进去。记住,你可以将配置文件分成多个文件,这样可以将它们模块化,如果你需要编辑对所有 bot 都适用的一些内容,你可以在一个配置文件中进行编辑。

---
version: '3'
services:
  freqtrade1:
    image: freqtradeorg/freqtrade:stable
    # image: freqtradeorg/freqtrade:develop
    # 使用绘图图像
    # image: freqtradeorg/freqtrade:develop_plot
    # 构建步骤 - 仅在需要额外依赖项时需要
    # build:
    #   context: .
    #   dockerfile: "./docker/Dockerfile.custom"
    restart: always
    container_name: freqtrade1
    volumes:
      - "./user_data:/freqtrade/user_data"
    # 将 API 暴露在 8080 端口上(仅对本地主机)
    # 请务必在启用此功能之前阅读 https://www.freqtrade.io/en/latest/rest-api/ 文档。
    ports:
      - "127.0.0.1:8080:8080"
    # 运行 `docker compose up` 时使用的默认命令
    command: >
      trade
      --logfile /freqtrade/user_data/logs/freqtrade1.log
      --db-url sqlite:////freqtrade/user_data/tradesv3_freqtrade1.sqlite
      --config /freqtrade/user_data/config.json
      --config /freqtrade/user_data/config.freqtrade1.json
      --strategy SampleStrategy

  freqtrade2:
    image: freqtradeorg/freqtrade:stable
    # image: freqtradeorg/freqtrade:develop
    # 使用绘图图像
    # image: freqtradeorg/freqtrade:develop_plot
    # 构建步骤 - 仅在需要额外依赖项时需要
    # build:
    #   context: .
    #   dockerfile: "./docker/Dockerfile.custom"
    restart: always
    container_name: freqtrade2
    volumes:
      - "./user_data:/freqtrade/user_data"
    # 将 API 暴露在 8080 端口上(仅对本地主机)
    # 请务必在启用此功能之前阅读 https://www.freqtrade.io/en/latest/rest-api/ 文档。
    ports:
      - "127.0.0.1:8081:8080"
    # 运行 `docker compose up` 时使用的默认命令
    command: >
      trade
      --logfile /freqtrade/user_data/logs/freqtrade2.log
      --db-url sqlite:////freqtrade/user_data/tradesv3_freqtrade2.sqlite
      --config /freqtrade/user_data/config.json
      --config /freqtrade/user_data/config.freqtrade2.json
      --strategy SampleStrategy
你可以使用任何命名规范,freqtrade1和2是任意的。注意,你需要为每个实例使用不同的数据库文件、端口映射和Telegram配置,正如前面提到的。

配置将机器人作为systemd服务运行

freqtrade.service 文件复制到你的systemd用户目录(通常是~/.config/systemd/user),并更新 WorkingDirectoryExecStart 以匹配你的设置。

注意

某些系统(如Raspbian)不会从用户目录加载服务单元文件。在这种情况下,将 freqtrade.service 复制到 /etc/systemd/user/(需要超级用户权限)。

之后,可以使用以下命令启动守护进程:

systemctl --user start freqtrade

要使其持久化(在用户退出登录时运行),您需要为freqtrade用户启用 linger

sudo loginctl enable-linger "$USER"

如果将机器人作为服务运行,您可以使用systemd服务管理器作为软件看门狗,监视freqtrade机器人的状态并在失败的情况下重新启动它。如果在配置中将 internals.sd_notify 参数设置为true,或者使用 --sd-notify 命令行选项,该机器人将使用sd_notify(systemd通知)协议向systemd发送保持活动的ping消息,并在状态变化时告知systemd它的当前状态(Running或Stopped)。

freqtrade.service.watchdog 文件包含一个示例,其中使用systemd作为看门狗的服务单元配置文件。!!! 注意 如果机器人在Docker容器中运行,则机器人与systemd服务管理器之间的sd_notify通信将不起作用。

高级日志

在许多Linux系统上,可以将机器人配置为将其日志消息发送到syslogjournald系统服务。在Windows上,也可以将日志发送到远程syslog服务器。可以使用--logfile命令行选项的特殊值来实现。

发送日志到syslog

要将Freqtrade日志消息发送到本地或远程syslog服务,请使用以下格式的--logfile命令行选项值:

  • --logfile syslog:<syslog_address> -- 使用<syslog_address>作为syslog地址将日志消息发送到syslog服务。

syslog地址可以是Unix域套接字(套接字文件名)或UDP套接字规范,由:字符分隔的IP地址和UDP端口组成。

因此,以下是可能使用的示例:

  • --logfile syslog:/dev/log -- 使用/dev/log套接字(适用于大多数系统)将日志记录到syslog(rsyslog)。
  • --logfile syslog -- 与上述相同,是/dev/log的快捷方式。
  • --logfile syslog:/var/run/syslog -- 使用/var/run/syslog套接字将日志记录到syslog(rsyslog)。在MacOS上使用此选项。
  • --logfile syslog:localhost:514 -- 如果本地syslog侦听514端口,则使用UDP套接字将日志记录到本地syslog。
  • --logfile syslog:<ip>:514 -- 将日志记录到IP地址和端口514的远程syslog。这在Windows上用于远程记录到外部syslog服务器。

日志消息使用user设施发送到syslog。因此,您可以使用以下命令查看日志消息:* tail -f /var/log/user,或者 * 安装一个综合的图形查看器(比如Ubuntu的'Log File Viewer')。

在许多系统上,syslogrsyslog)从journald获取数据(反之亦然),因此可以同时使用--logfile syslog--logfile journald,并使用journalctl和syslog查看器工具查看消息。您可以按照您更喜欢的方式组合使用这些功能。

对于rsyslog,可以将来自机器人的消息重定向到一个单独的专用日志文件中。为此,请在rsyslog配置文件的某个位置添加以下内容:

if $programname startswith "freqtrade" then -/var/log/freqtrade.log

例如,在/etc/rsyslog.d/50-default.conf文件的末尾。

对于syslogrsyslog),可以切换到减少模式。这将减少重复的消息数量。例如,多个机器人心跳消息将在机器人未发生其他活动时被减少为一条消息。为此,请在/etc/rsyslog.conf中进行以下设置:

# Filter duplicated messages
$RepeatedMsgReduction on

记录到journald

这需要安装了cysystemdPython包作为依赖项(pip install cysystemd),这在Windows上不可用。因此,运行Windows上的机器人无法使用整个journald日志记录功能。

要将Freqtrade日志消息发送到journald系统服务,请使用以下格式的--logfile命令行选项值:* --logfile journald -- 将日志消息发送到 journald

通过 user 设备,将日志消息发送到 journald,您可以使用以下命令查看它们:

  • journalctl -f -- 显示发送到 journald 的 Freqtrade 日志消息以及 journald 获取的其他日志消息。
  • journalctl -f -u freqtrade.service -- 当机器人作为 systemd 服务运行时,可以使用此命令。

journalctl 实用程序有很多其他选项可用于过滤消息,请参阅此实用程序的手册页面。

在许多系统中,syslog (rsyslog) 从 journald 获取数据(反之亦然),因此可以使用 --logfile syslog--logfile journald 并使用 journalctl 和 syslog 查看器工具查看消息。您可以根据自己的需求进行任意组合。