部署与运行

本章详细介绍 Freqtrade 的部署与运行管理,涵盖 Docker 部署、dry-run 模拟运行、实盘运行、systemd 进程管理以及日志配置,帮助读者搭建稳定可靠的量化交易运行环境。

Docker 部署

Docker 安装

# 安装 Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 安装 Docker Compose
sudo apt-get install docker-compose-plugin

# 验证安装
docker --version
docker compose version

Docker Compose 完整配置

version: '3'
services:
  freqtrade:
    image: freqtradeorg/freqtrade:stable
    container_name: freqtrade
    restart: always
    volumes:
      - "./user_data:/freqtrade/user_data"
    ports:
      - "127.0.0.1:8080:8080"
    environment:
      - FREQTRADE__EXCHANGE__NAME=binance
      - FREQTRADE__EXCHANGE__KEY=${EXCHANGE_KEY}
      - FREQTRADE__EXCHANGE__SECRET=${EXCHANGE_SECRET}
      - FREQTRADE__TELEGRAM__ENABLED=true
      - FREQTRADE__TELEGRAM__TOKEN=${TELEGRAM_TOKEN}
      - FREQTRADE__TELEGRAM__CHAT_ID=${TELEGRAM_CHAT_ID}
      - FREQTRADE__DRY_RUN=false
      - TZ=Asia/Shanghai
    command: trade --strategy MyStrategy
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

Docker 常用命令

# 启动容器
docker compose up -d

# 查看日志
docker compose logs -f

# 停止容器
docker compose stop

# 重启容器
docker compose restart

# 进入容器内部执行命令
docker compose exec freqtrade freqtrade backtesting --strategy MyStrategy

# 更新镜像
docker compose pull
docker compose up -d

# 完全移除容器
docker compose down

Docker 镜像版本

镜像标签说明适用场景
freqtradeorg/freqtrade:stable最新稳定版生产环境推荐
freqtradeorg/freqtrade:stable_freqai含 FreqAI 依赖的稳定版使用机器学习策略
freqtradeorg/freqtrade:develop开发版尝鲜新功能
freqtradeorg/freqtrade:develop_freqai含 FreqAI 的开发版开发测试

Docker 数据持久化

# 目录结构
user_data/
├── config.json          # 配置文件
├── strategies/          # 策略文件
├── data/                # 下载的 K 线数据
├── backtest_results/    # 回测结果
├── logs/                # 日志文件
├── plot/                # 图表文件
├── notebooks/           # Jupyter notebooks
└── models/              # FreqAI 模型文件

Dry-Run 模式

什么是 Dry-Run

Dry-Run(模拟运行)模式允许你在不投入真实资金的情况下运行交易机器人,它会根据真实市场数据模拟交易决策:

{
    "dry_run": true,
    "dry_run_wallet": 10000,
    "max_open_trades": 3,
    "stake_amount": 100
}

启动 Dry-Run

# 使用配置文件启动
freqtrade trade --config user_data/config.json --strategy MyStrategy

# 或在配置文件中设置 dry_run: true

Dry-Run vs 实盘对比

特性Dry-Run实盘
真实资金不需要需要
市场数据实时实时
模拟成交✓(按 K 线收盘价)✓(真实撮合)
滑点模拟自动处理
订单簿不接入接入
Telegram 通知可选推荐
API 服务可选推荐
风险真实亏损风险

Dry-Run 的局限性

  1. 成交价格理想化:按 K 线收盘价成交,不考虑滑点和流动性
  2. 无订单簿交互:无法测试订单类型的真实效果
  3. 延迟不真实:没有网络延迟和交易所处理时间
  4. 资金管理简化:不考虑实际资金划转延迟

实盘运行

启动实盘交易

# 基本启动命令
freqtrade trade --config user_data/config.json --strategy MyStrategy

# 指定日志级别
freqtrade trade --config user_data/config.json --strategy MyStrategy --loglevel debug

# 后台运行
nohup freqtrade trade --config user_data/config.json --strategy MyStrategy > freqtrade.log 2>&1 &

# 使用 screen
screen -S freqtrade
freqtrade trade --config user_data/config.json --strategy MyStrategy
# Ctrl+A+D 脱离 screen
# screen -r freqtrade 重新连接

实盘配置建议

{
    "dry_run": false,
    "max_open_trades": 2,
    "stake_amount": 50,
    "tradable_balance_ratio": 0.95,
    "stake_currency": "USDT",
    "trading_mode": "spot",
    "margin_mode": "",
    "exchange": {
        "name": "binance",
        "key": "${EXCHANGE_KEY}",
        "secret": "${EXCHANGE_SECRET}",
        "ccxt_config": {
            "enableRateLimit": true
        }
    },
    "telegram": {
        "enabled": true,
        "token": "${TELEGRAM_TOKEN}",
        "chat_id": "${TELEGRAM_CHAT_ID}"
    },
    "api_server": {
        "enabled": true,
        "listen_ip_address": "127.0.0.1",
        "listen_port": 8080,
        "username": "admin",
        "password": "${API_PASSWORD}"
    }
}

systemd 进程管理

创建 systemd 服务

# /etc/systemd/system/freqtrade.service
[Unit]
Description=Freqtrade Trading Bot
After=network.target

[Service]
Type=simple
User=your_username
WorkingDirectory=/opt/freqtrade
EnvironmentFile=/opt/freqtrade/.env
ExecStart=/usr/bin/docker compose -f /opt/freqtrade/docker-compose.yml up
ExecStop=/usr/bin/docker compose -f /opt/freqtrade/docker-compose.yml down
Restart=always
RestartSec=30
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

直接 Python 环境部署(非 Docker)

# /etc/systemd/system/freqtrade.service
[Unit]
Description=Freqtrade Trading Bot
After=network.target

[Service]
Type=simple
User=your_username
WorkingDirectory=/opt/freqtrade
EnvironmentFile=/opt/freqtrade/.env
ExecStart=/opt/freqtrade/.venv/bin/freqtrade trade --config /opt/freqtrade/user_data/config.json --strategy MyStrategy
Restart=always
RestartSec=30
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

systemd 常用命令

# 加载服务
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start freqtrade

# 停止服务
sudo systemctl stop freqtrade

# 重启服务
sudo systemctl restart freqtrade

# 查看状态
sudo systemctl status freqtrade

# 开机自启
sudo systemctl enable freqtrade

# 查看日志
sudo journalctl -u freqtrade -f

# 查看最近 100 条日志
sudo journalctl -u freqtrade -n 100

日志配置

日志级别

{
    "loglevel": "info"
}

支持的日志级别:

级别说明使用场景
debug最详细调试问题
info信息正常运行
warning警告减少输出
error仅错误静默运行

日志文件配置

{
    "logfile": "user_data/logs/freqtrade.log",
    "loglevel": "info"
}

日志轮转(logrotate)

# /etc/logrotate.d/freqtrade
/opt/freqtrade/user_data/logs/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
}

启动环境准备检查清单

# 1. 初始化用户目录
freqtrade create-userdir --userdir user_data

# 2. 创建配置文件
freqtrade new-config --config user_data/config.json

# 3. 创建策略(或复制现有策略)
freqtrade new-strategy --strategy MyStrategy --userdir user_data

# 4. 下载历史数据
freqtrade download-data --exchange binance --days 365

# 5. 运行回测验证策略
freqtrade backtesting --strategy MyStrategy

# 6. 运行 dry-run 测试
freqtrade trade --strategy MyStrategy

# 7. 确认无误后切换到实盘
# 修改 config.json 中的 dry_run: false

常见部署问题

问题原因解决方案
Docker 权限错误用户未在 docker 组sudo usermod -aG docker $USER
容器重启循环配置错误运行 docker logs freqtrade 查看错误
端口被占用8080 端口已被使用修改 listen_port 配置
数据卷丢失卷映射路径错误检查 docker-compose.yml 中的路径
内存不足数据量太大或模型太大减少交易对,降低数据量
时区不正确未设置 TZ 环境变量在环境中设置 TZ=Asia/Shanghai