darkeril

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策略显示名称string1-50字符
symbol交易对enumBTCUSDTBTCUSDT / ETHUSDT / SOLUSDT / XRPUSDT
direction交易方向enumbothlong_only / short_only / both
initial_balance初始资金(USDT)float100001000-1000000

4.2 CVD 窗口配置

参数说明类型默认值可选项
cvd_fast_window快线CVD窗口enum30m5m / 15m / 30m
cvd_slow_window慢线CVD窗口enum4h1h / 4h

4.3 四层权重(合计必须 = 100)

参数说明默认值范围
weight_direction方向得分权重5510-80
weight_env环境得分权重255-60
weight_aux辅助因子权重150-40
weight_momentum动量权重50-20

前端校验:四项之和必须 = 100,否则不允许保存

4.4 入场阈值

参数说明默认值范围
entry_score入场最低总分7560-95

4.5 四道 Gate(过滤门)

每道 Gate 有独立开关和阈值:

Gate说明开关默认阈值参数默认值范围
gate_obi订单簿失衡门ONobi_threshold0.30.1-0.9
gate_whale_cvd大单CVD门ONwhale_cvd_threshold0.0-1.0-1.0
gate_vol_atr波动率ATR门ONatr_percentile_min205-80
gate_spot_perp现货/永续溢价门OFFspot_perp_threshold0.0020.0005-0.01

4.6 风控参数

参数说明默认值范围
sl_atr_multiplierSL宽度(×ATR)1.50.5-3.0
tp1_ratioTP1(×RD)0.750.3-2.0
tp2_ratioTP2(×RD)1.50.5-4.0
timeout_minutes持仓超时(分钟)24030-1440
flip_threshold反转平仓阈值(分)8060-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_tradesstrategy 字段改为存 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 通过后,再开始写数据合约文档

On this page