Files
wiki/quant/freqtrade-deploy-guide.md
T

326 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Freqtrade 实盘部署全流程
从零部署 Freqtrade 交易机器人到 Vultr 服务器,运行 OKX USDT-M 永续合约实盘交易。
---
## 1. 服务器信息
| 项目 | 详情 |
|------|------|
| 服务商 | Vultr |
| IP | `104.156.239.5` |
| 系统 | Ubuntu 22.04 |
| 配置 | 2 vCPU / 2GB RAM / 61GB SSD |
| 部署路径 | `/opt/freqtrade/` |
| SSH 用户 | `root` |
| SSH 密钥 | 本机 `~/.ssh/id_rsa` |
| 跳板 | 通过阿里云 ecs 跳板(ProxyJump |
### SSH 配置
在本机 `~/.ssh/config` 中添加:
```
Host vultr
HostName 104.156.239.5
User root
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
ProxyJump ecs
```
连接命令:`ssh vultr`
### 端口
| 端口 | 用途 |
|------|------|
| 22 | SSH |
| 8080 | Freqtrade API Server / freqUI |
---
## 2. 前置依赖安装
```bash
# 更新系统
ssh vultr "apt update && apt install -y software-properties-common"
# 安装 Python 3.12Ubuntu 22.04 默认 3.10 不满足 freqtrade >=3.11
ssh vultr "add-apt-repository -y ppa:deadsnakes/ppa && apt install -y python3.12 python3.12-venv python3.12-dev"
# 安装构建依赖
ssh vultr "apt install -y build-essential git curl"
# 配置防火墙
ssh vultr "ufw allow 22/tcp && ufw allow 8080/tcp"
```
---
## 3. 部署 Freqtrade
### 3.1 克隆仓库
```bash
# 方式一:从 Gitea 克隆(推荐)
ssh vultr "git clone https://git.looq.fun/liam/freqtrade-deploy.git /opt/freqtrade"
# 方式二:从本机 scp 推送
scp -o ProxyJump=ecs -r /root/agents/freqtrade vultr:/opt/freqtrade
```
### 3.2 创建虚拟环境并安装
```bash
ssh vultr "cd /opt/freqtrade && python3.12 -m venv .venv && .venv/bin/pip install -e ."
```
### 3.3 安装 freqUI
```bash
ssh vultr "cd /opt/freqtrade && .venv/bin/freqtrade install-ui"
```
---
## 4. 配置
### 4.1 部署策略文件
将策略文件推送到服务器:
```bash
scp -o ProxyJump=ecs user_data/strategies/multi_asset_channel_breakout_v5.py \
vultr:/opt/freqtrade/user_data/strategies/
```
### 4.2 配置 config.json
`/opt/freqtrade/user_data/config.json` 中配置以下关键项:
```json
{
"max_open_trades": 2,
"stake_currency": "USDT",
"stake_amount": "unlimited",
"tradable_balance_ratio": 0.99,
"dry_run": false,
"timeframe": "15m",
"stoploss": -0.80,
"trading_mode": "futures",
"margin_mode": "isolated",
"exchange": {
"name": "okx",
"key": "e756108d-f14c-4777-8351-cd989f389dd2",
"secret": "BC4579AEE9816ED4A38218910B6EC278",
"password": "30l9L666.",
"ccxt_config": {"hostname": "www.okx.cab"},
"ccxt_async_config": {"hostname": "www.okx.cab"},
"pair_whitelist": ["BTC/USDT:USDT", "ETH/USDT:USDT"]
},
"pairlists": [{"method": "StaticPairList"}],
"api_server": {
"enabled": true,
"listen_ip_address": "0.0.0.0",
"listen_port": 8080,
"username": "liam",
"password": "30l9L666"
},
"webhook": {
"enabled": true,
"url": "https://open.feishu.cn/open-apis/bot/v2/hook/2b1bc9a6-b470-447f-b783-1b253dcf522c"
},
"strategy": "MultiAssetChannelBreakoutV5",
"strategy_path": "user_data/strategies/",
"initial_state": "running"
}
```
**OKX API Key 说明:**
- key: `e756108d-f14c-4777-8351-cd989f389dd2`
- secret: `BC4579AEE9816ED4A38218910B6EC278`
- password: `30l9L666.`
- hostname: `www.okx.cab`OKX 国内加速域名,非 `www.okx.com`
- 该 key 无 IP 限制(`ip: "0"`),任何服务器都能用
**freqUI 登录:**
- 地址:`http://104.156.239.5:8080/`
- 用户名:`liam`
- 密码:`30l9L666`
---
## 5. Systemd 服务
### 5.1 创建服务文件
```bash
ssh vultr "cat > /etc/systemd/system/freqtrade.service << 'EOF'
[Unit]
Description=Freqtrade Trading Bot
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/freqtrade
ExecStart=/opt/freqtrade/.venv/bin/freqtrade trade -c user_data/config.json
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF"
```
### 5.2 启用并启动
```bash
ssh vultr "systemctl daemon-reload && systemctl enable freqtrade && systemctl start freqtrade"
```
---
## 6. 验证部署
```bash
# 1. 检查服务状态
ssh vultr "systemctl status freqtrade --no-pager"
# 2. 检查 API 响应
curl -s http://104.156.239.5:8080/api/v1/ping
# 应返回: {"status":"pong"}
# 3. 检查策略加载
ssh vultr "journalctl -u freqtrade --no-pager -n 30 | grep -E 'strategy|timeframe|RUNNING'"
# 4. 检查交易对白名单
ssh vultr "journalctl -u freqtrade --no-pager | grep 'Whitelist with'"
# 5. 访问 Web UI
open http://104.156.239.5:8080/
```
---
## 7. 运维命令
```bash
# 查看服务状态
ssh vultr "systemctl status freqtrade --no-pager"
# 查看实时日志
ssh vultr "journalctl -u freqtrade.service -f"
# 查看最近 50 行日志
ssh vultr "journalctl -u freqtrade.service --no-pager -n 50"
# 重启服务(部署新策略或修改配置后)
ssh vultr "systemctl restart freqtrade"
# 停止服务
ssh vultr "systemctl stop freqtrade"
# 查看交易记录(SQLite
ssh vultr "cd /opt/freqtrade && python3 -c \"
import sqlite3
conn = sqlite3.connect('tradesv3.sqlite')
conn.row_factory = sqlite3.Row
rows = conn.execute('SELECT id,pair,open_rate,close_rate,close_profit_abs,exit_reason FROM trades ORDER BY id').fetchall()
for r in rows:
print(dict(r))
conn.close()
\""
```
---
## 8. 当前线上配置摘要
| 配置项 | 值 |
|--------|------|
| 策略 | MultiAssetChannelBreakoutV5 |
| 交易所 | OKX |
| 交易模式 | USDT-M 永续合约 / 逐仓 |
| 币对 | BTC/USDT, ETH/USDT |
| 时间周期 | 15m |
| 杠杆 | 10x(策略内固定) |
| 最大持仓 | 2 |
| 硬止损 | -80%config 与策略 `stoploss=-0.80` 一致;10x 杠杆下=价格 -8%) |
| 资金量 | unlimited(全仓比例 99% |
| API Server | 0.0.0.0:8080 |
| 飞书 Webhook | 已启用 |
| UI | FreqUI |
---
## 9. 策略说明(MultiAssetChannelBreakoutV5
### 9.1 核心逻辑
| 模块 | 说明 |
|------|------|
| 指标 | ATR(10) 波动率 + SMA 长均线 + 通道上下轨 + ADX(14) 动量 |
| 入场 | 收盘价突破动态上轨 **且** 在长均线上方 **且** ADX > 28 |
| 入场确认 | 实时下单防追高(偏离信号 K 线收盘价 >1% 取消)+ 防假突破(价格不低于信号 K 线均线和上轨) |
| 出场 | 收盘价跌破动态退出线(下轨 + ATR × 0.19 |
| 止损 | 分段:盈利 >5% 保本、>15% 允许 10% 回撤、>30% 允许 10% 回撤,其余靠 -8% 硬止损 |
| 杠杆 | 固定 10x |
### 9.2 关键参数
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `up_line_span` | 340 | 上轨窗口(15m K 线数,约 3.5 天) |
| `up_line_offset` | -0.18 | 上轨 ATR 偏移(负值=上轨低于最高点,降低入场门槛) |
| `buy_stop_profit_span` | 141 | 下轨窗口 |
| `buy_stop_profit_offset` | 0.19 | 下轨 ATR 偏移 |
| `ma_span_long_days` | 2 | 长均线天数(2×96=192 根 15m K 线) |
| `adx_threshold` | 28 | 动量过滤阈值 |
| `startup_candle_count` | 600 | 预热 K 线数 |
### 9.3 策略文件位置
| 位置 | 文件 |
|------|------|
| 本地 | `user_data/strategies/multi_asset_channel_breakout_v5.py` |
| 服务器 | `/opt/freqtrade/user_data/strategies/multi_asset_channel_breakout_v5.py` |
| 备份 | `skills/core/` |
---
## 10. 更换策略流程
```bash
# 1. 修改策略文件
# 本地编辑 user_data/strategies/xxx.py
# 2. 推送到服务器
scp -o ProxyJump=ecs user_data/strategies/xxx.py vultr:/opt/freqtrade/user_data/strategies/
# 3. 修改 config.json 中的 strategy 名称和 timeframe
ssh vultr "sed -i 's/\"strategy\": \"旧策略\"/\"strategy\": \"新策略\"/' /opt/freqtrade/user_data/config.json"
# 4. 重启服务
ssh vultr "systemctl restart freqtrade"
# 5. 验证
ssh vultr "journalctl -u freqtrade --no-pager -n 20 | grep -E 'strategy|RUNNING|Error'"
```
---
## 11. 注意事项
- **SSH 跳板**:必须通过 `ProxyJump ecs` 走阿里云跳板,直连 Vultr 会超时
- **Python 版本**Ubuntu 22.04 默认 3.10,必须装 3.12
- **OKX hostname**:用 `www.okx.cab` 而非 `www.okx.com`,国内访问 okx.com 受限
- **时区**:服务器保持 UTC,所有交易所时间戳和 freqtrade 内部均用 UTC
- **Warmup**:策略启动时通过 REST 拉取历史 K 线(startup_candle_count=600),约 3 次 API 调用,完成后图表立即可用
- **仅做多**`can_short = False`
- **ROI 禁用**`minimal_roi = {"0": 100}`,全部由信号出场和 custom_stoploss 处理
- **服务自恢复**`Restart=on-failure` + `RestartSec=10`,进程崩溃 10 秒后自动重启