V5.4 Strategy Factory 需求文档
V5.4 策略工厂完整需求文档,包含架构设计、参数配置、前后端功能需求
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 / 清算 / 市场数据)
├── 计算基础 Feature(CVD / ATR / VWAP / whale flow / OBI / spot-perp div)
└── 广播 feature_event(每15秒一次)
Strategy Workers(策略工厂)
├── Worker-1:我的BTC策略01(BTCUSDT,asyncio协程)
├── Worker-2:我的ETH策略01(ETHUSDT,asyncio协程)
├── 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_id(UUID)关联
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 表(策略配置主表):
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 上线时:
- 将现有 v53、v53_middle、v53_fast 三个策略迁移为
strategies表中的三条记录 - 历史
paper_trades数据通过 strategy 名称映射到对应 strategy_id - 直接切换,不保留 V5.3 单体并行
8. 不在本期范围内
- 实盘交易(本期只做 paper trading)
- 多用户/多账户体系
- 策略算法类型选择(本期只支持四层评分算法)
- 自动化参数优化(Optuna 集成)
9. Review 检查清单
- 范总确认需求无遗漏
- 小范审阅数据结构合理性
- 确认
strategies表字段完整性 - 确认 API 端点覆盖所有前端操作
- 确认迁移方案不丢失历史数据
- 需求文档 Review 通过后,再开始写数据合约文档