Files
PolyHermes/docs/zh/nba-api-integration-technical-solution.md
WrBug e9e1111df9 feat: 实现 NBA 量化交易系统
- 后端实现:
  - 实现 NBA 比赛数据服务,从 Polymarket API 获取数据
  - 实现数据库存储和增量拉取逻辑(优先从 DB 获取,数据不足时增量拉取)
  - 使用 sports_market_types 参数直接筛选 moneyline 类型
  - 实现分页拉取逻辑(基于 gameStartTime 和 createdAt)
  - 移除 nba_markets 相关的外键约束(V12 迁移)
  - 修复数据拉取逻辑:超过 3 天的数据不拉取

- 前端实现:
  - 实现策略创建/编辑/列表页面
  - 实现交易信号展示页面和统计页面
  - 修复重复请求问题(使用 useCallback 包装 fetchGames)
  - 支持选择单场比赛进行配置
  - 使用西8区时间格式化显示

- 数据库:
  - 创建 NBA 量化交易相关表(V11 迁移)
  - 移除外键约束(V12 迁移)

- 文档:
  - 添加产品需求文档、技术方案、算法文档等
2025-12-13 08:05:08 +08:00

31 KiB
Raw Permalink Blame History

NBA 量化交易系统技术方案

一、概述

1.1 产品定位

本系统是一个基于 NBA 比赛数据的量化交易系统,用户在前端配置量化策略参数,系统后台实时获取 NBA 比赛数据,根据配置的策略参数进行量化分析,自动生成买入/卖出信号,并通过 WebSocket 实时推送给前端展示。

1.2 产品流程

用户在前端配置策略参数
        ↓
后台保存配置并启动量化任务
        ↓
后台实时获取 NBA 比赛数据
        ↓
后台执行量化分析逻辑
        ↓
生成买入/卖出信号
        ↓
通过 WebSocket 推送给前端
        ↓
前端展示交易信号和结果

1.3 核心功能

  1. 策略配置管理:用户在前端配置量化策略参数(如触发条件、买入卖出规则、风险控制参数等)
  2. 数据获取:后台实时获取 NBA 比赛数据、球队统计、球员统计等
  3. 量化分析:根据配置的策略参数和实时数据,执行量化分析逻辑
  4. 信号生成:生成买入/卖出信号,包含市场、方向、价格、数量等信息
  5. 实时推送:通过 WebSocket 将交易信号实时推送给前端
  6. 结果展示:前端展示交易信号、执行结果、统计数据等

1.4 技术栈

  • 后端框架: Spring Boot 3.2.0 + Kotlin
  • HTTP 客户端: Retrofit 2.9.0 + OkHttp 4.12.0
  • 数据存储: MySQL 8.2.0(结构化数据)+ Redis(缓存)
  • 爬虫框架: Jsoup(用于 Basketball Reference
  • 任务调度: Spring Scheduler(定时任务)
  • WebSocket: Spring WebSocket(实时推送)

二、系统架构设计

2.1 整体架构

┌─────────────────────────────────────────────────────────────┐
│                     前端层 (Frontend Layer)                   │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │ 策略配置页面 │  │ 交易信号展示 │  │ 结果统计页面 │      │
│  └──────────────┘  └──────────────┘  └──────────────┘      │
└─────────────────────────────────────────────────────────────┘
                            │ HTTP API / WebSocket
┌─────────────────────────────────────────────────────────────┐
│                     应用层 (Application Layer)                │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │ 策略配置API  │  │ 量化任务API │  │ WebSocket    │      │
│  └──────────────┘  └──────────────┘  └──────────────┘      │
└─────────────────────────────────────────────────────────────┘
                            │
┌─────────────────────────────────────────────────────────────┐
│                     服务层 (Service Layer)                    │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │ 策略配置服务 │  │ 量化分析服务 │  │ 数据推送服务 │      │
│  └──────────────┘  └──────────────┘  └──────────────┘      │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │ NBA数据服务  │  │ 信号生成服务 │  │ 任务调度服务 │      │
│  └──────────────┘  └──────────────┘  └──────────────┘      │
└─────────────────────────────────────────────────────────────┘
                            │
┌─────────────────────────────────────────────────────────────┐
│                     数据层 (Data Layer)                       │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │ NBA API      │  │ 数据存储     │  │ 缓存服务     │      │
│  └──────────────┘  └──────────────┘  └──────────────┘      │
└─────────────────────────────────────────────────────────────┘

2.2 模块划分

2.2.1 前端模块

  • 策略配置模块:用户配置量化策略参数
  • 交易信号展示模块:实时展示买入/卖出信号
  • 结果统计模块:展示交易结果和统计数据

2.2.2 后端模块

  • 策略配置管理模块:管理用户配置的策略参数
  • NBA 数据获取模块:从 NBA Stats API 和 Basketball Reference 获取数据
  • 量化分析模块:执行量化分析逻辑,生成交易信号
  • 信号推送模块:通过 WebSocket 推送交易信号
  • 任务调度模块:管理量化任务的启动、停止、调度

三、产品功能设计

3.1 策略配置功能

3.1.1 配置参数

用户在前端可以配置以下参数:

基础配置

  • 策略名称:用户自定义策略名称
  • 启用状态:是否启用该策略
  • 关联账户:选择用于交易的账户

触发条件配置

  • 比赛筛选:选择关注的比赛(可按球队、日期、重要性等筛选)
  • 数据指标:选择用于分析的指标(如分差、剩余时间、球队实力等)
  • 触发阈值:设置触发买入/卖出的阈值条件

交易规则配置

  • 买入规则:配置买入条件、买入金额、买入时机等
  • 卖出规则:配置卖出条件、卖出金额、卖出时机等
  • 价格策略:配置价格计算方式(如固定价格、动态价格等)

风险控制配置

  • 最大持仓:单次最大买入金额
  • 最小持仓:单次最小买入金额
  • 每日亏损限制:每日最大亏损金额
  • 每日订单限制:每日最大订单数量
  • 价格容忍度:允许的价格偏差范围

高级配置

  • 数据更新频率:NBA 数据更新频率(如 30 秒、1 分钟等)
  • 分析频率:量化分析执行频率
  • 推送设置:是否推送失败订单、推送频率等

3.1.2 配置管理

  • 创建策略:用户在前端创建新的量化策略配置
  • 编辑策略:用户可以修改已有策略的配置参数
  • 删除策略:用户可以删除不需要的策略
  • 启用/禁用策略:用户可以启用或禁用策略,禁用后停止执行量化分析
  • 策略列表:展示所有策略配置,支持搜索、筛选、排序

3.2 量化分析功能

3.2.1 数据获取

系统后台实时获取以下数据:

比赛数据

  • 实时比分和分差
  • 比赛状态(未开始/进行中/已结束)
  • 当前节次和剩余时间
  • Play-by-Play 数据(每个回合的详细记录)

统计数据

  • 球队统计数据(进攻效率、防守效率、净效率值等)
  • 球员统计数据(得分、篮板、助攻、真实命中率等)
  • 高级统计数据(PER、BPM、VORP、DRPM 等)

历史数据

  • 历史比赛数据
  • 历史对战记录
  • 历史统计数据

3.2.2 量化分析逻辑

系统根据用户配置的策略参数和实时获取的 NBA 数据,执行量化分析:

核心思想

  • 不是简单的条件判断(如"主队落后买入")
  • 而是综合分析两支队伍的实力、状态、对位关系等因素
  • 计算每支队伍的综合评分和获胜概率
  • 评估交易价值和风险
  • 选择最优的交易方向和时机

数据预处理

  • 数据清洗和验证
  • 数据标准化和归一化
  • 特征工程(提取关键特征)

综合评分计算

  • 计算主队和客队的基础实力评分(净效率值、攻防效率、节奏等)
  • 计算近期状态评分(近期胜率、净效率值变化、势头等)
  • 计算阵容完整度评分(基于缺失球员的VORP)
  • 计算球星状态评分(PER、TS%、健康状况等)
  • 计算环境因素评分(主客场、休息天数、背靠背等)
  • 综合计算主队和客队的综合评分

对位分析

  • 分析球星对位优势(防守限制效果、历史对位数据)
  • 分析阵容克制关系(内线、外线、快攻优势)
  • 计算对位综合评分

实时状态分析(比赛进行中):

  • 分析当前分差和剩余时间
  • 分析势头动量(过去N回合的净胜分)
  • 实时调整综合评分

获胜概率计算

  • 基于综合评分计算基础获胜概率
  • 根据对位优势调整概率
  • 根据实时状态调整概率(比赛进行中)
  • 最终得到主队和客队的获胜概率

交易价值计算

  • 计算预期收益(基于获胜概率和价格)
  • 计算风险调整收益(考虑不确定性、价格波动、流动性)
  • 计算交易价值评分

策略执行

  • 根据配置的触发条件(最小获胜概率差异、最小交易价值等),判断是否满足买入/卖出条件
  • 根据配置的交易规则,计算买入/卖出价格和数量
  • 根据配置的风险控制参数,验证交易是否合规

信号生成

  • 生成买入信号:包含市场 ID、方向(YES/NO,由系统自动判断)、价格、数量、原因等
  • 生成卖出信号:包含市场 ID、方向、价格、数量、原因等
  • 信号验证:验证信号的有效性和合规性

3.3 信号推送功能

3.3.1 推送方式

系统通过 WebSocket 实时推送交易信号给前端:

推送内容

  • 买入信号:市场信息、方向、价格、数量、触发原因、时间戳等
  • 卖出信号:市场信息、方向、价格、数量、触发原因、时间戳等
  • 信号状态:信号生成、信号执行中、信号执行成功、信号执行失败等

推送频率

  • 实时推送:信号生成后立即推送
  • 批量推送:多个信号可以批量推送(减少网络开销)

3.3.2 订阅管理

前端通过 WebSocket 订阅交易信号:

订阅方式

  • 订阅所有策略的信号
  • 订阅特定策略的信号
  • 订阅特定市场的信号

订阅管理

  • 前端可以动态订阅/取消订阅
  • 支持多个前端客户端同时订阅
  • 连接断开后自动重连和恢复订阅

3.4 结果展示功能

3.4.1 实时信号展示

前端实时展示交易信号:

信号列表

  • 展示所有生成的交易信号
  • 支持按策略、市场、时间等筛选
  • 支持按时间、价格等排序

信号详情

  • 展示信号的详细信息(市场、方向、价格、数量、原因等)
  • 展示信号的执行状态和结果
  • 展示信号的历史记录

3.4.2 统计展示

前端展示交易统计:

策略统计

  • 每个策略的信号数量
  • 每个策略的成功率
  • 每个策略的盈亏情况

总体统计

  • 总信号数量
  • 总成功率
  • 总盈亏情况
  • 每日/每周/每月统计

四、数据源集成方案

4.1 NBA Stats API 集成

4.1.1 API 基础信息

  • Base URL: https://stats.nba.com/stats/
  • 认证: 无需认证,但需要设置正确的请求头
  • 请求限制: 建议 < 10 请求/秒
  • 数据格式: JSON

4.1.2 请求头配置

需要设置以下请求头:

  • User-Agent: 浏览器标识
  • Referer: 来源页面
  • Accept: 接受 JSON 格式
  • Accept-Language: 语言设置

4.1.3 主要接口

比赛数据接口

  • 赛程和比分接口:获取指定日期的所有比赛
  • 比赛统计接口:获取比赛的详细统计数据
  • Play-by-Play 接口:获取比赛的回合数据

统计数据接口

  • 球队统计面板接口:获取球队的统计数据
  • 球队关键时刻数据接口:获取球队关键时刻的表现
  • 球员统计面板接口:获取球员的统计数据
  • 球员单场数据接口:获取球员的单场数据

4.1.4 数据获取策略

实时数据获取

  • 比赛进行时:每 30 秒轮询一次比赛数据
  • 比赛未开始:每 5 分钟轮询一次(检查比赛状态)
  • 比赛结束:每 10 分钟轮询一次(确保数据完整)

统计数据获取

  • 每天更新一次球队和球员统计数据
  • 比赛结束后立即更新相关统计数据

4.2 Basketball Reference 爬虫集成

4.2.1 数据来源

  • Base URL: https://www.basketball-reference.com
  • 数据格式: HTML 页面
  • 优势: 提供高级统计数据(PER、BPM、VORP、DRPM 等)

4.2.2 爬取策略

请求频率控制

  • 请求间隔:至少 1 秒(避免反爬虫)
  • 请求队列:使用队列管理请求,控制并发数

数据爬取

  • 球员高级统计数据:从球员页面爬取 PER、BPM、VORP、DRPM 等
  • 球队高级统计数据:从球队页面爬取相关数据
  • 阵容统计数据:从阵容页面爬取阵容组合数据

数据缓存

  • 爬取的数据存储到数据库,避免重复请求
  • 高级统计数据更新频率较低,可以缓存较长时间

4.3 数据存储方案

4.3.1 数据库设计

策略配置表

  • 存储用户配置的策略参数
  • 包含策略名称、配置参数、启用状态等字段

比赛数据表

  • 存储比赛基本信息(比赛 ID、日期、主客场、比分等)
  • 存储比赛状态(未开始/进行中/已结束)
  • 存储当前节次和剩余时间

统计数据表

  • 球队统计表:存储球队的统计数据
  • 球员统计表:存储球员的统计数据
  • Play-by-Play 表:存储比赛的回合数据

交易信号表

  • 存储生成的交易信号
  • 包含市场信息、方向、价格、数量、状态等字段
  • 包含信号的执行结果和统计信息

4.3.2 缓存策略

Redis 缓存

  • 比赛数据缓存:缓存 5 分钟(实时数据)
  • 统计数据缓存:缓存 1 小时(统计数据更新较慢)
  • 高级统计缓存:缓存 24 小时(Basketball Reference 更新较慢)

缓存更新

  • 数据更新时同步更新缓存
  • 缓存过期后自动从数据库或 API 重新获取

五、实时性保证策略

5.1 数据实时性要求

不同数据类型的实时性要求:

数据类型 实时性要求 更新频率 延迟容忍度
比赛比分 极高 30秒 < 1分钟
Play-by-Play 极高 30秒 < 1分钟
比赛状态 30秒 < 2分钟
统计数据 5分钟 < 10分钟
历史数据 每天 无要求

5.2 实时性保证方案

5.2.1 多层级数据更新策略

第一层:数据源层

  • HTTP 轮询:从 NBA Stats API 轮询获取数据
  • 第三方 WebSocket API:如果可用,使用 WebSocket 实时接收数据
  • 数据缓存:使用 Redis 缓存数据,减少 API 调用

第二层:数据处理层

  • 数据变化检测:只处理变化的数据,减少不必要的处理
  • 数据验证:验证数据的有效性和完整性
  • 增量更新:只更新变化的数据,提高效率

第三层:数据推送层

  • WebSocket 推送:通过 WebSocket 实时推送数据给前端
  • 订阅管理:管理前端的订阅,只推送订阅的数据
  • 批量推送:多个数据可以批量推送,减少网络开销

第四层:前端展示层

  • 实时更新:前端实时接收和展示数据
  • 降级轮询:WebSocket 失败时降级到 HTTP 轮询
  • 数据缓存:前端缓存数据,减少重复请求

5.2.2 数据变化检测机制

数据快照比较

  • 保存上次的数据快照
  • 比较新数据和快照,只处理变化的数据
  • 更新快照,用于下次比较

增量更新

  • 只保存和推送新增或变化的数据
  • 减少数据库写入和网络传输
  • 提高系统性能

5.2.3 动态轮询频率调整

根据比赛状态动态调整轮询频率:

  • 比赛未开始5 分钟轮询一次
  • 比赛进行中30 秒轮询一次
  • 最后 5 分钟15 秒轮询一次(关键时刻)
  • 加时赛20 秒轮询一次
  • 比赛结束10 分钟轮询一次(确保数据完整)

5.2.4 WebSocket 连接管理

连接保活

  • 定期发送心跳消息,保持连接活跃
  • 检测连接状态,及时处理断开情况

自动重连

  • 连接断开后自动重连
  • 使用指数退避策略,避免频繁重连
  • 重连后恢复订阅,确保数据不丢失

连接监控

  • 监控连接健康状态
  • 记录连接统计信息
  • 异常情况告警

5.2.5 前端降级策略

WebSocket 失败降级

  • WebSocket 连接失败时,自动降级到 HTTP 轮询
  • 前端定期轮询获取数据,确保数据不中断
  • WebSocket 恢复后,自动切换回 WebSocket

数据缓存

  • 前端缓存最近的数据
  • 网络中断时,使用缓存数据展示
  • 网络恢复后,同步最新数据

5.3 实时性监控

5.3.1 数据延迟监控

延迟统计

  • 记录数据从获取到推送的延迟时间
  • 统计平均延迟、最大延迟等指标
  • 延迟超过阈值时触发告警

性能指标

  • API 调用响应时间
  • 数据处理时间
  • WebSocket 推送延迟

5.3.2 告警机制

告警条件

  • 数据延迟超过阈值(如 1 分钟)
  • API 调用失败率超过阈值
  • WebSocket 连接断开
  • 数据更新异常

告警方式

  • 日志记录
  • 系统通知
  • 邮件/短信通知(可选)

六、量化分析逻辑设计

6.1 分析流程

6.1.1 数据准备

数据获取

  • 获取实时比赛数据(比分、分差、剩余时间等)
  • 获取统计数据(球队统计、球员统计等)
  • 获取历史数据(历史比赛、历史统计等)

数据预处理

  • 数据清洗:去除异常值和缺失值
  • 数据验证:验证数据的有效性和完整性
  • 数据标准化:将数据标准化为统一的格式

6.1.2 特征提取

基础特征

  • 当前分差
  • 剩余时间
  • 当前节次
  • 比赛状态

统计特征

  • 球队实力指标(净效率值、攻防效率等)
  • 球员表现指标(PER、TS%、USG% 等)
  • 历史对战数据

衍生特征

  • 分差/剩余时间比
  • 球队实力差
  • 势头动量(过去 N 回合的净胜分)
  • 球星爆发因子(本场表现 vs 赛季平均)

6.1.3 策略执行

综合评分和对位分析

  • 计算主队和客队的综合评分(基础实力、近期状态、阵容完整度、球星状态、环境因素)
  • 分析对位优势(球星对位、阵容克制)
  • 计算实时状态调整(分差、势头动量,仅比赛进行中)

获胜概率和交易价值计算

  • 基于综合评分计算基础获胜概率
  • 根据对位优势和实时状态调整概率
  • 计算预期收益和风险调整收益
  • 计算交易价值评分

触发条件判断

  • 判断获胜概率差异是否达到阈值(如主队获胜概率 > 0.55 或 < 0.45
  • 判断交易价值评分是否达到阈值(如 > 0.05)
  • 判断其他触发条件(剩余时间、价格等)

交易规则计算

  • 根据获胜概率确定买入方向(YES 或 NO)
  • 根据配置的交易规则,计算买入/卖出价格(固定价格/市场价格/动态价格)
  • 根据配置的交易规则,计算买入/卖出数量(固定金额/按比例/动态计算)
  • 根据配置的风险控制参数,验证交易是否合规

信号生成

  • 生成买入信号:包含市场 ID、方向(由系统自动判断)、价格、数量、原因(包含综合评分、获胜概率、交易价值等)等
  • 生成卖出信号:包含市场 ID、方向、价格、数量、原因等
  • 信号验证:验证信号的有效性和合规性

6.2 策略配置映射

6.2.1 配置参数到分析逻辑的映射

触发条件配置

  • 比赛筛选 → 数据过滤逻辑
  • 数据指标 → 特征提取逻辑
  • 触发阈值 → 条件判断逻辑

交易规则配置

  • 买入规则 → 买入信号生成逻辑
  • 卖出规则 → 卖出信号生成逻辑
  • 价格策略 → 价格计算逻辑

风险控制配置

  • 最大/最小持仓 → 数量限制逻辑
  • 每日亏损限制 → 风险检查逻辑
  • 每日订单限制 → 订单计数逻辑
  • 价格容忍度 → 价格验证逻辑

6.3 信号生成规则

6.3.1 买入信号生成

触发条件

  • 满足配置的买入触发条件
  • 通过风险控制检查
  • 市场状态正常(可交易)

信号内容

  • 市场 ID:目标市场的唯一标识
  • 方向:YES 或 NO
  • 价格:买入价格(根据价格策略计算)
  • 数量:买入数量(根据交易规则计算)
  • 原因:触发买入的原因(如"分差达到阈值")
  • 时间戳:信号生成时间

6.3.2 卖出信号生成

触发条件

  • 满足配置的卖出触发条件
  • 通过风险控制检查
  • 市场状态正常(可交易)

信号内容

  • 市场 ID:目标市场的唯一标识
  • 方向:YES 或 NO
  • 价格:卖出价格(根据价格策略计算)
  • 数量:卖出数量(根据交易规则计算)
  • 原因:触发卖出的原因(如"达到止盈条件")
  • 时间戳:信号生成时间

七、WebSocket 推送方案

7.1 推送架构

7.1.1 推送流程

量化分析服务生成交易信号
        ↓
信号推送服务接收信号
        ↓
检查订阅关系(哪些前端订阅了该策略)
        ↓
通过 WebSocket 推送给订阅的前端
        ↓
前端接收并展示信号

7.1.2 订阅管理

订阅方式

  • 前端通过 WebSocket 发送订阅消息
  • 支持订阅所有策略的信号
  • 支持订阅特定策略的信号
  • 支持订阅特定市场的信号

订阅存储

  • 后端维护订阅关系(策略 ID → 前端会话列表)
  • 支持多个前端同时订阅同一策略
  • 支持前端动态订阅/取消订阅

订阅恢复

  • 前端连接断开后,自动清理订阅关系
  • 前端重连后,可以重新订阅

7.2 推送消息格式

7.2.1 买入信号消息

包含以下字段:

  • 消息类型:买入信号
  • 策略 ID:生成信号的策略标识
  • 市场 ID:目标市场标识
  • 方向:YES 或 NO
  • 价格:买入价格
  • 数量:买入数量
  • 原因:触发原因
  • 时间戳:信号生成时间

7.2.2 卖出信号消息

包含以下字段:

  • 消息类型:卖出信号
  • 策略 ID:生成信号的策略标识
  • 市场 ID:目标市场标识
  • 方向:YES 或 NO
  • 价格:卖出价格
  • 数量:卖出数量
  • 原因:触发原因
  • 时间戳:信号生成时间

7.2.3 信号状态更新消息

包含以下字段:

  • 消息类型:状态更新
  • 信号 ID:信号的唯一标识
  • 状态:执行中/执行成功/执行失败
  • 结果:执行结果详情
  • 时间戳:状态更新时间

7.3 推送优化

7.3.1 批量推送

批量策略

  • 多个信号可以批量推送,减少网络开销
  • 批量大小可配置(如每批 10 个信号)
  • 批量推送间隔可配置(如每 1 秒推送一次)

批量格式

  • 单个消息包含多个信号
  • 前端解析后分别处理每个信号

7.3.2 推送频率控制

频率限制

  • 每个策略的信号推送频率可配置
  • 避免过于频繁的推送,影响前端性能
  • 支持优先级:重要信号立即推送,普通信号批量推送

7.3.3 推送失败处理

失败重试

  • 推送失败时,记录失败信息
  • 支持重试机制(如重试 3 次)
  • 重试失败后,记录到数据库,后续可以查询

降级策略

  • WebSocket 推送失败时,可以降级到 HTTP 轮询
  • 前端定期轮询获取信号,确保不丢失

八、错误处理和容错机制

8.1 数据获取错误处理

8.1.1 API 调用失败

重试策略

  • API 调用失败时,自动重试(如重试 3 次)
  • 使用指数退避策略,避免频繁重试
  • 重试失败后,记录错误日志

降级策略

  • API 调用失败时,使用缓存数据
  • 缓存数据过期时,使用数据库数据
  • 所有数据源都失败时,记录错误并告警

8.1.2 数据解析错误

错误处理

  • 数据格式异常时,记录错误日志
  • 跳过异常数据,继续处理其他数据
  • 数据缺失时,使用默认值或历史数据

8.2 量化分析错误处理

8.2.1 分析逻辑错误

错误捕获

  • 分析逻辑执行时,捕获所有异常
  • 记录错误日志,包含错误详情和上下文
  • 错误不影响其他策略的执行

错误恢复

  • 错误发生后,跳过本次分析
  • 等待下次分析周期,重新执行
  • 连续错误时,触发告警

8.2.2 信号生成错误

错误处理

  • 信号生成失败时,记录错误日志
  • 不生成无效信号,避免误导用户
  • 错误原因推送给前端(可选)

8.3 推送错误处理

8.3.1 WebSocket 推送失败

失败处理

  • 推送失败时,记录失败信息
  • 支持重试机制(如重试 3 次)
  • 重试失败后,记录到数据库

降级策略

  • WebSocket 推送失败时,可以降级到 HTTP 轮询
  • 前端定期轮询获取信号,确保不丢失

8.3.2 前端连接断开

连接管理

  • 检测前端连接断开,清理订阅关系
  • 前端重连后,可以重新订阅
  • 连接断开期间,信号暂存到数据库

九、性能优化方案

9.1 数据获取优化

9.1.1 请求频率控制

频率限制

  • 控制 API 请求频率,避免触发速率限制
  • 使用请求队列,管理并发请求
  • 请求失败时,使用指数退避策略

9.1.2 数据缓存

缓存策略

  • 实时数据缓存 5 分钟
  • 统计数据缓存 1 小时
  • 高级统计缓存 24 小时

缓存更新

  • 数据更新时同步更新缓存
  • 缓存过期后自动刷新

9.2 量化分析优化

9.2.1 增量分析

变化检测

  • 只分析变化的数据,减少不必要的计算
  • 使用数据快照比较,检测数据变化
  • 只处理变化的数据,提高分析效率

9.2.2 并行分析

并行策略

  • 多个策略可以并行分析
  • 使用线程池管理分析任务
  • 避免资源竞争,确保分析准确性

9.3 推送优化

9.3.1 批量推送

批量策略

  • 多个信号批量推送,减少网络开销
  • 批量大小和间隔可配置
  • 重要信号可以立即推送

9.3.2 推送频率控制

频率限制

  • 控制推送频率,避免前端性能问题
  • 支持优先级:重要信号立即推送
  • 普通信号批量推送

十、监控和日志

10.1 系统监控

10.1.1 性能监控

监控指标

  • API 调用响应时间
  • 数据处理时间
  • WebSocket 推送延迟
  • 系统资源使用率(CPU、内存等)

监控方式

  • 定期记录性能指标
  • 性能指标超过阈值时触发告警
  • 提供性能统计报表

10.1.2 业务监控

监控指标

  • 策略执行次数
  • 信号生成数量
  • 信号推送成功率
  • 数据更新延迟

监控方式

  • 记录业务指标到数据库
  • 提供业务统计报表
  • 异常情况触发告警

10.2 日志管理

10.2.1 日志级别

日志分类

  • 错误日志:记录系统错误和异常
  • 警告日志:记录警告信息
  • 信息日志:记录关键操作信息
  • 调试日志:记录详细调试信息

10.2.2 日志内容

关键操作日志

  • 策略配置变更
  • 量化分析执行
  • 信号生成和推送
  • API 调用和错误

日志格式

  • 统一日志格式,便于解析和分析
  • 包含时间戳、日志级别、模块、消息等字段
  • 支持结构化日志(JSON 格式)

十一、实施步骤

11.1 第一阶段:基础功能开发(2-3 周)

任务清单

  • 完成策略配置管理功能(前端配置页面 + 后端 API)
  • 完成 NBA 数据获取功能(API 集成 + 数据存储)
  • 完成基础量化分析功能(简单策略逻辑)
  • 完成信号推送功能(WebSocket 推送)

11.2 第二阶段:量化分析完善(2-3 周)

任务清单

  • 完善量化分析逻辑(支持复杂策略)
  • 完善特征提取和数据处理
  • 完善信号生成和验证
  • 完善错误处理和容错机制

11.3 第三阶段:实时性优化(1-2 周)

任务清单

  • 优化数据获取频率和策略
  • 优化 WebSocket 推送机制
  • 实现数据变化检测和增量更新
  • 实现前端降级策略

11.4 第四阶段:性能优化和监控(1-2 周)

任务清单

  • 性能优化(缓存、并行处理等)
  • 系统监控和日志完善
  • 压力测试和性能调优
  • 文档完善

十二、注意事项

12.1 API 限制

  • NBA Stats API: 建议请求频率 < 10 请求/秒
  • Basketball Reference: 建议请求频率 < 1 请求/秒
  • 需要设置正确的请求头,避免被拒绝

12.2 数据质量

  • API 返回的数据格式可能不一致,需要做好异常处理
  • Basketball Reference 的 HTML 结构可能变化,需要定期检查
  • 需要验证数据的合理性(如得分不超过 200 分)

12.3 法律合规

  • 遵守 NBA Stats API 的使用条款
  • 遵守 Basketball Reference 的爬虫协议(robots.txt
  • 不要过度请求,避免对服务器造成负担

12.4 风险提示

  • 量化交易存在风险,需要做好风险控制
  • 信号仅供参考,不构成投资建议
  • 需要明确告知用户风险和使用条款

十三、扩展建议

13.1 功能扩展

策略模板

  • 提供预定义的策略模板
  • 用户可以基于模板快速创建策略
  • 支持策略模板的导入和导出

回测功能

  • 支持历史数据回测
  • 评估策略的历史表现
  • 优化策略参数

多账户支持

  • 支持多个交易账户
  • 每个账户可以配置不同的策略
  • 统一管理和监控

13.2 技术扩展

机器学习集成

  • 使用机器学习模型优化策略
  • 自动学习和优化参数
  • 提高信号准确性

多数据源整合

  • 整合多个数据源(如 ESPN、Sportradar 等)
  • 提高数据完整性和准确性
  • 降低对单一数据源的依赖

分布式部署

  • 支持分布式部署,提高系统性能
  • 支持负载均衡和容错
  • 支持水平扩展