2. 需求分析:因子评分接口的功能需求、非功能需求、接口契约定义

因子评分接口是量化策略从研究走向实盘的关键桥梁。需求分析阶段需要明确接口做什么(功能需求)、做到什么程度(非功能需求),以及如何约定交互(接口契约)。本章从这三个维度展开,为后续的架构设计与编码实现奠定基础。

2.1 功能需求

功能需求描述接口必须提供的业务能力。因子评分接口的核心职责是:接收一组因子数据,输出每个标的的综合评分及排序。具体功能点如下:

功能编号 功能名称 详细描述 优先级
F-01 单标的评分 输入单个标的的因子向量,返回该标的的综合评分及分项得分 P0
F-02 批量评分 输入多个标的的因子矩阵,返回所有标的的评分列表,支持按评分降序排列 P0
F-03 因子权重配置 支持通过参数动态调整各因子的权重,无需重新部署服务 P1
F-04 评分截断与归一化 对原始评分进行 Z-score 或 Min-Max 归一化,并支持上下限截断 P1
F-05 异常因子检测 识别并标记缺失值、极端值或逻辑异常的因子输入,返回警告码 P2
F-06 评分历史缓存 对相同输入在 TTL 内直接返回缓存结果,避免重复计算 P2
关键决策:P0 功能必须在 MVP 版本中实现;P1 功能在第一个迭代周期内完成;P2 功能作为性能优化和健壮性增强项,在后续版本中按需加入。

2.2 非功能需求

非功能需求定义了接口的质量属性。对于低延迟评分接口,延迟和吞吐量是最核心的约束条件。

2.2.1 延迟需求

延迟指从请求发出到收到完整响应的时间间隔。量化交易场景下,延迟直接影响策略的时效性和收益。

场景 P99 延迟上限 P50 延迟目标 说明
单标的评分 5 ms 1 ms 高频调仓场景,要求亚毫秒级响应
批量评分(100 标的) 20 ms 8 ms 中频扫描场景,批量计算需并行优化
批量评分(1000 标的) 100 ms 40 ms 全市场扫描场景,需考虑内存与 CPU 平衡
延迟测量要点:P99 延迟比平均值更能反映尾部风险。建议在压测时使用 hdrhistogram 或 latency_tracker 库记录完整百分位分布,而非仅依赖平均值。

2.2.2 吞吐量需求

吞吐量指单位时间内接口能处理的请求数量。高吞吐量意味着系统能支撑更大的策略规模和更密集的调用频率。

指标 目标值 约束条件
单机 QPS(单标的) ≥ 50,000 4 核 8G 实例,无缓存命中
单机 QPS(批量 100 标的) ≥ 5,000 4 核 8G 实例,并行计算
集群总吞吐 ≥ 200,000 QPS 水平扩展至 8 节点,负载均衡
长尾请求占比 ≤ 1% 超过 2× P99 需配置超时熔断与降级策略

2.3 接口契约定义

接口契约是前后端、服务间协作的法律文件。本接口采用 RESTful 风格,使用 JSON 作为数据交换格式,通过 OpenAPI 3.0 规范进行描述。

2.3.1 核心端点

POST /api/v1/factor/score
Content-Type: application/json
Accept: application/json

2.3.2 请求体结构

{
  "symbols": ["600519.SH", "000858.SZ", "601318.SH"],
  "factors": {
    "pe_ttm": [25.3, 18.7, 12.1],
    "roe": [0.21, 0.15, 0.18],
    "momentum_20d": [0.035, -0.012, 0.028]
  },
  "weights": {
    "pe_ttm": 0.3,
    "roe": 0.4,
    "momentum_20d": 0.3
  },
  "options": {
    "normalize": "zscore",
    "clip_min": -3.0,
    "clip_max": 3.0,
    "use_cache": true
  }
}

2.3.3 响应体结构

{
  "code": 0,
  "message": "success",
  "data": {
    "scores": [
      {
        "symbol": "600519.SH",
        "total_score": 0.872,
        "sub_scores": {
          "pe_ttm": 0.65,
          "roe": 0.92,
          "momentum_20d": 0.78
        },
        "rank": 1,
        "warnings": []
      },
      {
        "symbol": "000858.SZ",
        "total_score": 0.534,
        "sub_scores": {
          "pe_ttm": 0.42,
          "roe": 0.55,
          "momentum_20d": 0.61
        },
        "rank": 2,
        "warnings": ["factor_pe_ttm_outlier"]
      }
    ],
    "meta": {
      "computation_time_ms": 2.3,
      "cache_hit": false,
      "normalized": true
    }
  }
}

2.3.4 错误码定义

错误码 含义 处理建议
0 成功 —
40001 请求参数缺失 检查必填字段是否完整
40002 因子维度不匹配 确保 symbols 与 factors 长度一致
40003 权重之和不为 1 归一化权重或调整输入
50001 内部计算异常 重试或联系运维
50002 超时熔断 降低请求频率或拆分批次

2.4 需求分析总结:接口调用流程

下图展示了从客户端发起请求到最终返回评分的完整流程,涵盖了功能需求与非功能需求的落地位置。

因子评分接口调用流程 因子评分接口调用流程 客户端 负载均衡 API 网关 评分服务 缓存层 因子数据源 说明: ① 客户端 → 负载均衡 → API 网关(鉴权、限流)→ 评分服务(核心计算)→ 缓存层(加速)→ 因子数据源(持久化)
契约变更管理:接口契约一旦发布,应遵循向后兼容原则。如需新增字段,使用 optional 标记;如需废弃字段,先标记 deprecated 并保留至少两个版本周期。建议在响应头中加入 X-API-Version: 1.0 以便客户端识别。

2.5 需求优先级矩阵

综合功能需求与非功能需求,按业务价值和实现成本两个维度进行优先级排序,指导迭代计划。

需求优先级矩阵 需求优先级矩阵 实现成本 → 业务价值 → 高价值 / 低成本 高价值 / 高成本 低价值 / 低成本 低价值 / 高成本 F-01 单标的评分 F-02 批量评分 F-03 权重配置 F-04 归一化 F-05 异常检测 F-06 历史缓存 延迟需求 吞吐量需求
迭代建议:第一轮迭代聚焦高价值/低成本区域(F-01、F-02、延迟与吞吐量基础实现);第二轮迭代处理高价值/高成本需求(F-03、F-04);第三轮及以后根据实际运行数据决定是否投入低价值象限的需求。