darkeril

策略广场数据合约

策略广场 数据合约文档

版本:v1.0
日期:2026-03-07
状态:待范总确认 ✅
作者:露露 + 小范
分支:feature/strategy-plaza


1. 功能概述

策略广场(Strategy Plaza)将现有的 signals-v53 / paper-v53 / signals-v53fast 等分散页面整合为统一入口:

  • 总览页:策略卡片列表,展示每个策略的核心指标,30 秒自动刷新
  • 详情页:点击卡片进入,顶部 Tab 切换「信号引擎」和「模拟盘」视图

2. 前端路由

路由说明
/strategy-plaza策略广场总览(卡片列表)
/strategy-plaza/[id]策略详情页,默认「信号引擎」tab
/strategy-plaza/[id]?tab=paper策略详情页「模拟盘」tab

侧边栏变更:

  • 新增「策略广场」单一入口
  • signals-v53 / paper-v53 / signals-v53fast / paper-v53fast / signals-v53middle / paper-v53middle 页面:保留但从侧边栏隐藏(路由仍可访问)

3. API 设计

3.1 GET /api/strategy-plaza

返回所有策略的卡片摘要数据。

Response:

{
  "strategies": [
    {
      "id": "v53",
      "display_name": "V5.3 标准版",
      "status": "running",
      "started_at": 1741234567000,
      "initial_balance": 10000,
      "current_balance": 8693,
      "net_usdt": -1307,
      "net_r": -6.535,
      "trade_count": 63,
      "win_rate": 49.2,
      "avg_win_r": 0.533,
      "avg_loss_r": -0.721,
      "open_positions": 0,
      "pnl_usdt_24h": -320,
      "pnl_r_24h": -1.6,
      "std_r": 0.9,
      "last_trade_at": 1741367890000
    }
  ]
}

字段说明:

字段类型说明
idstring策略唯一标识,与 DB strategy 字段一致
display_namestring展示名称
statusstringrunning / paused / error
started_atnumber (ms)策略启动时间(暂用 paper_trades 第一条 entry_ts,后续补 strategy_meta 表)
initial_balancenumber初始余额 USDT,固定 10000
current_balancenumber当前余额 = initial_balance + net_usdt
net_usdtnumber累计盈亏 USDT = SUM(pnl_r) × 200
net_rnumber累计净 R
trade_countnumber已出场交易数
win_ratenumber胜率 %
avg_win_rnumber平均赢单 R
avg_loss_rnumber平均亏单 R(负数)
open_positionsnumber当前活跃持仓数(exit_ts IS NULL)
pnl_usdt_24hnumber最近 24h 盈亏 USDT
pnl_r_24hnumber最近 24h 净 R
std_rnumber所有已出场交易的 pnl_r 标准差(风险感知)
last_trade_atnumber (ms)最近一笔成交的 exit_ts

status 判断逻辑:

  • running:paper_config 中 enabled=true 且最近 signal_indicators 记录 < 5 分钟
  • paused:paper_config 中 enabled=false
  • error:paper_config 中 enabled=true 但 signal_indicators 最新记录 > 5 分钟

3.2 GET /api/strategy-plaza/[id]/summary

返回单个策略的完整摘要,包含卡片字段 + 详情字段。

Response(在 3.1 基础上增加):

{
  "id": "v53",
  "display_name": "V5.3 标准版",
  "cvd_windows": "30m / 4h",
  "description": "标准版:30分钟+4小时CVD双轨,适配1小时信号周期",
  "symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT", "XRPUSDT"],
  "weights": {
    "direction": 55,
    "crowding": 25,
    "environment": 15,
    "auxiliary": 5
  },
  "thresholds": {
    "signal_threshold": 75,
    "flip_threshold": 85
  },
  "...所有 3.1 字段..."
}

3.3 GET /api/strategy-plaza/[id]/signals

复用现有 /api/signals 逻辑,增加 strategy 过滤。接口参数和返回格式与现有保持一致。


3.4 GET /api/strategy-plaza/[id]/trades

复用现有 /api/paper-trades 逻辑,增加 strategy 过滤。接口参数和返回格式与现有保持一致。


4. 数据来源映射

字段数据来源
net_usdt, net_r, trade_count, win_rate, avg_win_r, avg_loss_rpaper_trades WHERE strategy=id AND exit_ts IS NOT NULL
open_positionspaper_trades WHERE strategy=id AND exit_ts IS NULL
pnl_usdt_24h, pnl_r_24hpaper_trades WHERE strategy=id AND exit_ts > NOW()-24h
std_rSTDDEV(pnl_r) FROM paper_trades WHERE strategy=id AND exit_ts IS NOT NULL
started_atMIN(entry_ts) FROM paper_trades WHERE strategy=id
last_trade_atMAX(exit_ts) FROM paper_trades WHERE strategy=id AND exit_ts IS NOT NULL
statuspaper_config.json + signal_indicators 最新记录时间
cvd_windows, weights, thresholdsbackend/strategies/[id].json

5. 前端组件规划

5.1 总览页组件

StrategyPlaza
└── StrategyCardGrid
    └── StrategyCard (×N)
        ├── 策略名 + status badge (running/paused/error)
        ├── 运行时长 (now - started_at)
        ├── 当前余额 / 初始余额
        ├── 净盈亏 USDT + 净R(带颜色)
        ├── 胜率
        ├── 最近24h盈亏(小字)
        └── 点击 → /strategy-plaza/[id]

5.2 详情页组件

StrategyDetail
├── 顶部:策略名 + status + 运行时长
├── Tab 切换:[信号引擎] [模拟盘]

├── Tab: 信号引擎
│   └── 复用 SignalsV53Page 内容

└── Tab: 模拟盘
    └── 复用 PaperV53Page 内容

6. 实现计划

阶段内容负责
P0后端 API /api/strategy-plaza露露
P1后端 API /api/strategy-plaza/[id]/summary露露
P2前端总览页(StrategyCard × 3)露露
P3前端详情页(Tab + 复用现有组件)露露
P4侧边栏整合(新增入口,隐藏旧页面)露露
Review代码审阅 + 逻辑验证小范

开发前等范总确认数据结构,不提前动代码。


7. 变更记录

版本日期内容
v1.02026-03-07初版,露露起草 + 小范审阅

On this page