Compare commits

...

1 Commits

Author SHA1 Message Date
root
b1ed55382c docs: add V5.4 Strategy Factory requirements document 2026-03-11 12:47:44 +00:00

View File

@ -0,0 +1,265 @@
# V5.4 Strategy Factory 需求文档
**版本**v1.0
**日期**2026-03-11
**作者**:露露
**状态**:待范总 + 小范 Review
---
## 1. 背景与目标
当前系统V5.3)使用单体 `signal_engine.py`,所有策略逻辑耦合在一起,存在以下问题:
- 修改任意策略参数需重启整个引擎,中断数据采集
- 不同策略无法独立运行和对比A/B 测试成本高
- 参数配置分散在 JSON 文件中,无法通过前端界面管理
- 无法按币种独立优化权重
V5.4 目标:构建 **Strategy Factory策略工厂**,将信号引擎解耦为数据总线 + 独立策略 Worker支持前端可视化管理策略生命周期和参数配置。
---
## 2. 核心架构
### 2.1 整体架构
```
Signal Engine数据总线
├── 采集原始数据aggTrades / OBI / 清算 / 市场数据)
├── 计算基础 FeatureCVD / ATR / VWAP / whale flow / OBI / spot-perp div
└── 广播 feature_event每15秒一次
Strategy Workers策略工厂
├── Worker-1我的BTC策略01BTCUSDTasyncio协程
├── Worker-2我的ETH策略01ETHUSDTasyncio协程
├── Worker-N...
└── 每个 Worker 订阅 feature_event独立打分、开仓、管仓
```
### 2.2 关键设计原则
- **同一进程 + asyncio 协程**:所有 Worker 共享同一 Python 进程feature_event 内存传递,省资源
- **独立资金池**:每个 Worker 有独立的 paper trading 余额,互不影响
- **15秒内热生效**前端修改参数后Worker 在下一个评估周期≤15秒自动从 DB 读取新参数
- **配置存 DB**所有策略配置存入数据库JSON 文件废弃
- **直接切换**V5.4 上线后直接替换 V5.3 单体,不并行
---
## 3. 策略生命周期
### 3.1 状态定义
```
created已创建→ running运行中→ paused已暂停→ running
deprecated已废弃→ running重新启用
```
- **只有「废弃」,没有「删除」**
- 废弃的策略数据永久保留,可在废弃列表中检索
- 废弃策略可重新启用,继续使用原有余额和历史数据
### 3.2 策略标识
- 用户填写**显示名称**(自由命名,如"我的BTC激进策略"
- 后台自动生成**UUID**作为唯一标识,用户不感知
- `paper_trades` 等表通过 strategy_idUUID关联
### 3.3 余额管理
- 创建时设置初始资金(默认 10,000 USDT
- 支持**追加余额**:追加后,`initial_balance` 同步增加,`current_balance` 同步增加
- 废弃后重新启用,继续使用废弃时的余额和历史数据
---
## 4. 策略配置参数
每个策略实例(每个币种独立)包含以下可配置参数,均存入数据库,前端可编辑。
### 4.1 基础信息
| 参数 | 说明 | 类型 | 默认值 | 范围 |
|------|------|------|--------|------|
| display_name | 策略显示名称 | string | — | 1-50字符 |
| symbol | 交易对 | enum | BTCUSDT | BTCUSDT / ETHUSDT / SOLUSDT / XRPUSDT |
| direction | 交易方向 | enum | both | long_only / short_only / both |
| initial_balance | 初始资金(USDT) | float | 10000 | 1000-1000000 |
### 4.2 CVD 窗口配置
| 参数 | 说明 | 类型 | 默认值 | 可选项 |
|------|------|------|--------|--------|
| cvd_fast_window | 快线CVD窗口 | enum | 30m | 5m / 15m / 30m |
| cvd_slow_window | 慢线CVD窗口 | enum | 4h | 1h / 4h |
### 4.3 四层权重(合计必须 = 100
| 参数 | 说明 | 默认值 | 范围 |
|------|------|--------|------|
| weight_direction | 方向得分权重 | 55 | 10-80 |
| weight_env | 环境得分权重 | 25 | 5-60 |
| weight_aux | 辅助因子权重 | 15 | 0-40 |
| weight_momentum | 动量权重 | 5 | 0-20 |
> 前端校验:四项之和必须 = 100否则不允许保存
### 4.4 入场阈值
| 参数 | 说明 | 默认值 | 范围 |
|------|------|--------|------|
| entry_score | 入场最低总分 | 75 | 60-95 |
### 4.5 四道 Gate过滤门
每道 Gate 有独立开关和阈值:
| Gate | 说明 | 开关默认 | 阈值参数 | 默认值 | 范围 |
|------|------|----------|----------|--------|------|
| gate_obi | 订单簿失衡门 | ON | obi_threshold | 0.3 | 0.1-0.9 |
| gate_whale_cvd | 大单CVD门 | ON | whale_cvd_threshold | 0.0 | -1.0-1.0 |
| gate_vol_atr | 波动率ATR门 | ON | atr_percentile_min | 20 | 5-80 |
| gate_spot_perp | 现货/永续溢价门 | OFF | spot_perp_threshold | 0.002 | 0.0005-0.01 |
### 4.6 风控参数
| 参数 | 说明 | 默认值 | 范围 |
|------|------|--------|------|
| sl_atr_multiplier | SL宽度×ATR | 1.5 | 0.5-3.0 |
| tp1_ratio | TP1×RD | 0.75 | 0.3-2.0 |
| tp2_ratio | TP2×RD | 1.5 | 0.5-4.0 |
| timeout_minutes | 持仓超时(分钟) | 240 | 30-1440 |
| flip_threshold | 反转平仓阈值(分) | 80 | 60-95 |
---
## 5. 前端功能需求
### 5.1 策略广场列表页(已有基础,新增以下)
- **右上角「+ 新增策略」按钮**:点击进入参数配置创建界面
- **每个卡片新增「调整参数」按钮**:点击进入参数配置编辑界面(预填当前参数)
- **每个卡片新增「废弃」按钮**:点击弹出二次确认,确认后策略进入废弃状态
- **每个卡片新增「追加余额」功能**:输入追加金额,确认后更新余额
### 5.2 参数配置界面(新建/编辑共用)
- 基础信息:名称、币种、交易方向、初始资金
- CVD窗口快线/慢线各独立选择
- 四层权重滑块或数字输入实时显示合计合计≠100时禁止保存
- 四道Gate开关 + 阈值输入,各有说明文字和合理范围提示
- 风控参数:数字输入,有最小/最大值限制
- 底部:「保存并启动」(新建)/ 「保存」(编辑)按钮
### 5.3 策略详情页(已有基础,新增以下)
- 新增第三个 Tab**「参数配置」**
- 展示当前所有参数,可点击编辑跳转到编辑界面
### 5.4 侧边栏新增入口
- **「废弃策略」**:点击进入废弃策略列表
- 展示格式与正常卡片相同,额外显示废弃时间
- 每个废弃策略有「重新启用」按钮
- 重新启用后恢复至运行中状态,继续原余额和数据
### 5.5 权限
- 所有页面需登录才能访问(复用现有 JWT
- 登录后有全部操作权限,无角色区分
---
## 6. 后端架构需求
### 6.1 数据库新增表
**`strategies` 表**(策略配置主表):
```sql
strategy_id UUID PRIMARY KEY
display_name TEXT NOT NULL
symbol TEXT NOT NULL
direction TEXT NOT NULL DEFAULT 'both'
status TEXT NOT NULL DEFAULT 'running' -- running/paused/deprecated
initial_balance FLOAT NOT NULL DEFAULT 10000
current_balance FLOAT NOT NULL DEFAULT 10000
cvd_fast_window TEXT NOT NULL DEFAULT '30m'
cvd_slow_window TEXT NOT NULL DEFAULT '4h'
weight_direction INT NOT NULL DEFAULT 55
weight_env INT NOT NULL DEFAULT 25
weight_aux INT NOT NULL DEFAULT 15
weight_momentum INT NOT NULL DEFAULT 5
entry_score INT NOT NULL DEFAULT 75
gate_obi_enabled BOOL NOT NULL DEFAULT TRUE
obi_threshold FLOAT NOT NULL DEFAULT 0.3
gate_whale_enabled BOOL NOT NULL DEFAULT TRUE
whale_cvd_threshold FLOAT NOT NULL DEFAULT 0.0
gate_vol_enabled BOOL NOT NULL DEFAULT TRUE
atr_percentile_min INT NOT NULL DEFAULT 20
gate_spot_perp_enabled BOOL NOT NULL DEFAULT FALSE
spot_perp_threshold FLOAT NOT NULL DEFAULT 0.002
sl_atr_multiplier FLOAT NOT NULL DEFAULT 1.5
tp1_ratio FLOAT NOT NULL DEFAULT 0.75
tp2_ratio FLOAT NOT NULL DEFAULT 1.5
timeout_minutes INT NOT NULL DEFAULT 240
flip_threshold INT NOT NULL DEFAULT 80
deprecated_at TIMESTAMP
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
```
### 6.2 现有表调整
- `paper_trades``strategy` 字段改为存 `strategy_id`UUID兼容现有数据v53/v53_middle/v53_fast 保留字符串形式)
- `signal_indicators`:同上
### 6.3 API 新增端点
```
POST /api/strategies 创建策略
GET /api/strategies 获取所有策略列表(含废弃)
GET /api/strategies/{id} 获取单个策略详情
PATCH /api/strategies/{id} 更新策略参数
POST /api/strategies/{id}/pause 暂停策略
POST /api/strategies/{id}/resume 恢复策略
POST /api/strategies/{id}/deprecate 废弃策略
POST /api/strategies/{id}/restore 重新启用
POST /api/strategies/{id}/add-balance 追加余额
```
### 6.4 Signal Engine 改造
- Signal Engine 只负责 feature 计算和广播,不再包含评分/开仓逻辑
- 每个 Strategy Worker 作为 asyncio 协程,订阅 feature_event
- Worker 启动时从 DB 读取配置每15秒评估时重新读取捕获参数变更
---
## 7. 迁移计划
V5.4 上线时:
1. 将现有 v53、v53_middle、v53_fast 三个策略迁移为 `strategies` 表中的三条记录
2. 历史 `paper_trades` 数据通过 strategy 名称映射到对应 strategy_id
3. 直接切换,不保留 V5.3 单体并行
---
## 8. 不在本期范围内
- 实盘交易(本期只做 paper trading
- 多用户/多账户体系
- 策略算法类型选择(本期只支持四层评分算法)
- 自动化参数优化Optuna 集成)
---
## 9. Review 检查清单
- [ ] 范总确认需求无遗漏
- [ ] 小范审阅数据结构合理性
- [ ] 确认 `strategies` 表字段完整性
- [ ] 确认 API 端点覆盖所有前端操作
- [ ] 确认迁移方案不丢失历史数据
- [ ] 需求文档 Review 通过后,再开始写数据合约文档