部署与运行
本章详细介绍 Freqtrade 的部署与运行管理,涵盖 Docker 部署、dry-run 模拟运行、实盘运行、systemd 进程管理以及日志配置,帮助读者搭建稳定可靠的量化交易运行环境。
Docker 部署
Docker 安装
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
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/
├── backtest_results/
├── logs/
├── plot/
├── notebooks/
└── models/
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 vs 实盘对比
| 特性 | Dry-Run | 实盘 |
|---|
| 真实资金 | 不需要 | 需要 |
| 市场数据 | 实时 | 实时 |
| 模拟成交 | ✓(按 K 线收盘价) | ✓(真实撮合) |
| 滑点模拟 | 无 | 自动处理 |
| 订单簿 | 不接入 | 接入 |
| Telegram 通知 | 可选 | 推荐 |
| API 服务 | 可选 | 推荐 |
| 风险 | 零 | 真实亏损风险 |
Dry-Run 的局限性
- 成交价格理想化:按 K 线收盘价成交,不考虑滑点和流动性
- 无订单簿交互:无法测试订单类型的真实效果
- 延迟不真实:没有网络延迟和交易所处理时间
- 资金管理简化:不考虑实际资金划转延迟
实盘运行
启动实盘交易
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 -S freqtrade
freqtrade trade --config user_data/config.json --strategy MyStrategy
实盘配置建议
{
"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 服务
[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)
[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
sudo journalctl -u freqtrade -n 100
日志配置
日志级别
{
"loglevel": "info"
}
支持的日志级别:
| 级别 | 说明 | 使用场景 |
|---|
debug | 最详细 | 调试问题 |
info | 信息 | 正常运行 |
warning | 警告 | 减少输出 |
error | 仅错误 | 静默运行 |
日志文件配置
{
"logfile": "user_data/logs/freqtrade.log",
"loglevel": "info"
}
日志轮转(logrotate)
/opt/freqtrade/user_data/logs/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
copytruncate
}
启动环境准备检查清单
freqtrade create-userdir --userdir user_data
freqtrade new-config --config user_data/config.json
freqtrade new-strategy --strategy MyStrategy --userdir user_data
freqtrade download-data --exchange binance --days 365
freqtrade backtesting --strategy MyStrategy
freqtrade trade --strategy MyStrategy
常见部署问题
| 问题 | 原因 | 解决方案 |
|---|
| Docker 权限错误 | 用户未在 docker 组 | sudo usermod -aG docker $USER |
| 容器重启循环 | 配置错误 | 运行 docker logs freqtrade 查看错误 |
| 端口被占用 | 8080 端口已被使用 | 修改 listen_port 配置 |
| 数据卷丢失 | 卷映射路径错误 | 检查 docker-compose.yml 中的路径 |
| 内存不足 | 数据量太大或模型太大 | 减少交易对,降低数据量 |
| 时区不正确 | 未设置 TZ 环境变量 | 在环境中设置 TZ=Asia/Shanghai |