Files

326 lines
8.5 KiB
Markdown
Raw Permalink Normal View History

# 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 秒后自动重启