Files
PolyHermes/docs/zh/nba-quantitative-strategy-algorithm.md
T

835 lines
22 KiB
Markdown
Raw Normal View History

2025-12-13 08:05:08 +08:00
# NBA 量化交易策略算法文档
## 一、算法概述
### 1.1 算法目标
本算法基于 NBA 比赛数据,通过量化分析两支队伍的实力、状态、对位关系等因素,计算出哪支队伍具有更高的获胜概率和交易价值,从而生成买入/卖出交易信号。
### 1.2 算法流程
```
获取比赛数据(主队 vs 客队)
数据预处理和特征提取
计算两队综合评分
计算获胜概率和预期收益
生成交易信号(买入/卖出)
风险控制检查
输出交易信号
```
### 1.3 核心思想
**不是简单的"主队落后买入",而是**
- 综合分析两支队伍的各项指标
- 计算每支队伍的相对优势和劣势
- 评估交易价值和风险
- 选择最优的交易方向和时机
---
## 二、数据预处理
### 2.1 基础数据获取
**比赛基本信息**
- 比赛 ID、日期、主客场
- 当前比分、分差、节次、剩余时间
- 比赛状态(未开始/进行中/已结束)
**球队基础数据**
- 主队和客队的基本信息
- 当前赛季的统计数据
- 近期表现数据(近 5 场/10 场)
**球员数据**
- 核心球员的统计数据
- 球员健康状况和轮休情况
- 球员近期表现
### 2.2 数据清洗
**异常值处理**
- 检查数据合理性(如得分不超过 200 分)
- 处理缺失值(使用历史平均值或默认值)
- 处理异常数据(如负分差、超时时间等)
**数据标准化**
- 将不同量纲的数据标准化到统一范围
- 使用 Z-score 或 Min-Max 归一化
- 确保数据在 [0, 1] 或 [-1, 1] 范围内
### 2.3 特征工程
**基础特征**
- 当前分差(主队得分 - 客队得分)
- 剩余时间(分钟)
- 当前节次(1-4,加时)
- 比赛状态
**统计特征**
- 球队净效率值(进攻效率 - 防守效率)
- 球队比赛节奏(Pace
- 球队关键时刻表现(Clutch 数据)
- 球队主客场表现差异
**动态特征**
- 势头动量(过去 N 回合的净胜分)
- 手感热度(近期命中率)
- 阵容对位优势
- 球星爆发因子
---
## 三、综合评分算法
### 3.1 球队实力评分
#### 3.1.1 基础实力评分
**计算公式**
```
基础实力评分 = 净效率值评分 × W1 + 攻防效率评分 × W2 + 节奏评分 × W3
```
**评分组成**
- **净效率值评分**:基于球队赛季平均净效率值,归一化到 [0, 1]
- 评分 = (净效率值 - 联盟最低值) / (联盟最高值 - 联盟最低值)
- **攻防效率评分**:综合考虑进攻效率和防守效率
- 进攻效率评分 = (进攻效率排名 - 1) / (总球队数 - 1),排名越靠前评分越高
- 防守效率评分 = (防守效率排名 - 1) / (总球队数 - 1),排名越靠前评分越高
- 攻防效率评分 = (进攻效率评分 + 防守效率评分) / 2
- **节奏评分**:基于比赛节奏(Pace)
- 节奏评分 = (Pace - 联盟最低值) / (联盟最高值 - 联盟最低值)
**权重设置**
- W1 = 0.5(净效率值权重最高)
- W2 = 0.3(攻防效率权重)
- W3 = 0.2(节奏权重)
#### 3.1.2 近期状态评分
**计算公式**
```
近期状态评分 = 近期胜率评分 × W1 + 近期净效率值变化 × W2 + 势头评分 × W3
```
**评分组成**
- **近期胜率评分**:近 5 场或 10 场胜率
- 评分 = 近期胜率(0-1
- **近期净效率值变化**:近期净效率值与赛季平均的差值
- 变化 = (近期净效率值 - 赛季平均净效率值) / 赛季平均净效率值
- 评分 = (变化 + 1) / 2(归一化到 [0, 1]
- **势头评分**:基于连胜/连败场次
- 连胜:评分 = min(连胜场次 / 5, 1)
- 连败:评分 = max(1 - 连败场次 / 5, 0)
**权重设置**
- W1 = 0.4(胜率权重)
- W2 = 0.4(净效率值变化权重)
- W3 = 0.2(势头权重)
#### 3.1.3 阵容完整度评分
**计算公式**
```
阵容完整度评分 = 1 - (缺失球员总VORP / 球队总VORP)
```
**评分说明**
- 如果所有核心球员都在,评分为 1.0
- 如果有核心球员缺席,根据缺失球员的 VORP 值降低评分
- 缺失球员越多、重要性越高,评分越低
#### 3.1.4 球星状态评分
**计算公式**
```
球星状态评分 = 核心球星PER评分 × W1 + 核心球星TS%评分 × W2 + 核心球星健康评分 × W3
```
**评分组成**
- **核心球星 PER 评分**:基于近期 PER 与赛季平均的对比
- 评分 = (近期PER - 赛季平均PER) / 赛季平均PER + 1,归一化到 [0, 1]
- **核心球星 TS% 评分**:基于近期真实命中率
- 评分 = (近期TS% - 赛季平均TS%) / 赛季平均TS% + 1,归一化到 [0, 1]
- **核心球星健康评分**
- 健康:1.0
- 出战成疑:0.7
- 缺席:0.3
**权重设置**
- W1 = 0.4PER 权重)
- W2 = 0.4TS% 权重)
- W3 = 0.2(健康权重)
#### 3.1.5 环境因素评分
**计算公式**
```
环境因素评分 = 主客场优势评分 × W1 + 休息天数评分 × W2 + 背靠背影响评分 × W3
```
**评分组成**
- **主客场优势评分**
- 主场:1.0
- 客场:基于客场胜率,评分 = 客场胜率 / 主场胜率
- **休息天数评分**
- 休息 1 天:0.9
- 休息 2 天:1.0(最优)
- 休息 3 天以上:0.95
- **背靠背影响评分**
- 非背靠背:1.0
- 背靠背第二场:0.85
**权重设置**
- W1 = 0.5(主客场权重最高)
- W2 = 0.3(休息天数权重)
- W3 = 0.2(背靠背权重)
### 3.2 综合评分计算
**主队综合评分**
```
主队综合评分 = 基础实力评分 × 0.3
+ 近期状态评分 × 0.25
+ 阵容完整度评分 × 0.2
+ 球星状态评分 × 0.15
+ 环境因素评分 × 0.1
```
**客队综合评分**
```
客队综合评分 = 基础实力评分 × 0.3
+ 近期状态评分 × 0.25
+ 阵容完整度评分 × 0.2
+ 球星状态评分 × 0.15
+ 环境因素评分 × 0.1
```
**相对优势评分**
```
主队相对优势 = 主队综合评分 - 客队综合评分
```
---
## 四、对位分析算法
### 4.1 球星对位分析
**对位优势评分**
```
对位优势评分 = 防守限制效果评分 × W1 + 历史对位数据评分 × W2
```
**评分组成**
- **防守限制效果评分**:基于防守球员的 DRPM 和进攻球员的 ORPM
- 如果防守球员 DRPM 高,且进攻球员 ORPM 高,则限制效果好
- 评分 = (防守球员DRPM - 联盟平均DRPM) / (联盟最高DRPM - 联盟平均DRPM)
- **历史对位数据评分**:基于历史对位时的表现
- 对位效率差 = (对位时进攻球员TS% - 赛季平均TS%)
- 评分 = 1 - (对位效率差 / 最大可能效率差),归一化到 [0, 1]
**权重设置**
- W1 = 0.6(防守限制效果权重)
- W2 = 0.4(历史对位数据权重)
### 4.2 阵容克制分析
**阵容克制评分**
```
阵容克制评分 = 内线优势评分 × W1 + 外线优势评分 × W2 + 快攻优势评分 × W3
```
**评分组成**
- **内线优势评分**
- 如果主队内线得分占比高,且客队内线防守效率低,则主队有优势
- 评分 = (主队内线得分占比 - 客队内线防守效率排名归一化) / 2
- **外线优势评分**
- 如果主队三分出手占比高,且客队三分防守效率低,则主队有优势
- 评分 = (主队三分出手占比 - 客队三分防守效率排名归一化) / 2
- **快攻优势评分**
- 如果主队快攻得分占比高,且客队快攻防守效率低,则主队有优势
- 评分 = (主队快攻得分占比 - 客队快攻防守效率排名归一化) / 2
**权重设置**
- W1 = 0.4(内线权重)
- W2 = 0.4(外线权重)
- W3 = 0.2(快攻权重)
### 4.3 对位综合评分
**主队对位优势**
```
主队对位优势 = 主队球星对位优势 - 客队球星对位优势
+ 主队阵容克制优势 - 客队阵容克制优势
```
---
## 五、实时状态分析算法
### 5.1 比赛进行中的实时分析
#### 5.1.1 当前分差分析
**分差优势评分**
```
分差优势评分 = (当前分差 / 最大可能分差) × 时间调整系数
```
**时间调整系数**
- 比赛早期(第1-2节):系数 = 0.3(分差影响较小)
- 比赛中期(第3节):系数 = 0.6(分差影响中等)
- 比赛后期(第4节):系数 = 1.0(分差影响最大)
- 最后5分钟:系数 = 1.2(分差影响极大)
#### 5.1.2 势头动量分析
**势头动量评分**
```
势头动量 = (过去N回合净胜分) / (N × 平均单回合得分)
```
**评分说明**
- 如果主队过去 10 回合净胜 +8 分,则主队势头强劲
- 势头动量 > 0.3:势头强劲
- 势头动量 < -0.3:势头疲软
#### 5.1.3 实时综合评分调整
**实时调整公式**
```
实时调整评分 = 基础综合评分
+ 分差优势评分 × 0.3
+ 势头动量评分 × 0.2
- 时间衰减系数 × 0.1
```
**时间衰减系数**
- 比赛越接近结束,基础评分的影响越小,实时状态的影响越大
- 时间衰减系数 = (剩余时间 / 总时间) × 0.5
### 5.2 比赛未开始时的预测分析
**预测综合评分**
```
预测综合评分 = 基础综合评分
+ 对位优势评分 × 0.2
+ 环境因素评分 × 0.1
```
---
## 六、获胜概率计算
### 6.1 基础获胜概率
**基于综合评分的概率**
```
基础获胜概率 = 1 / (1 + exp(-k × (主队综合评分 - 客队综合评分)))
```
**参数说明**
- k 为调整系数,通常取 5-10
- 如果主队综合评分 > 客队综合评分,则主队获胜概率 > 0.5
- 如果主队综合评分 = 客队综合评分,则主队获胜概率 = 0.5
### 6.2 对位调整概率
**对位调整**
```
调整后概率 = 基础获胜概率 + 对位优势调整值
```
**对位优势调整值**
- 如果主队对位优势 > 0.1,则调整值 = +0.05
- 如果主队对位优势 < -0.1,则调整值 = -0.05
- 调整值范围:[-0.1, +0.1]
### 6.3 实时状态调整概率
**实时调整**(仅比赛进行中):
```
最终概率 = 调整后概率
+ 分差调整值 × 0.3
+ 势头调整值 × 0.2
```
**分差调整值**
- 如果主队领先,且剩余时间充足,则调整值 = +0.05
- 如果主队落后,且剩余时间不足,则调整值 = -0.05
**势头调整值**
- 如果主队势头强劲,则调整值 = +0.03
- 如果主队势头疲软,则调整值 = -0.03
### 6.4 概率归一化
**确保概率在 [0, 1] 范围内**
```
最终概率 = max(0, min(1, 最终概率))
```
---
## 七、交易价值计算
### 7.1 预期收益计算
**预期收益公式**
```
预期收益 = (获胜概率 × 获胜收益) - ((1 - 获胜概率) × 失败损失)
```
**收益和损失**
- 如果买入主队获胜(YES),价格为 P
- 获胜收益 = (1 - P) × 投入金额
- 失败损失 = P × 投入金额
- 如果买入主队失败(NO),价格为 P
- 获胜收益 = P × 投入金额
- 失败损失 = (1 - P) × 投入金额
### 7.2 风险调整收益
**风险调整公式**
```
风险调整收益 = 预期收益 × (1 - 风险系数)
```
**风险系数计算**
```
风险系数 = 概率不确定性 × 0.5 + 价格波动风险 × 0.3 + 流动性风险 × 0.2
```
**风险组成**
- **概率不确定性**:如果获胜概率接近 0.5,则不确定性高
- 不确定性 = 1 - |获胜概率 - 0.5| × 2
- **价格波动风险**:基于市场价格的波动性
- 如果价格波动大,则风险高
- **流动性风险**:基于市场的流动性
- 如果市场流动性低,则风险高
### 7.3 交易价值评分
**交易价值评分**
```
交易价值评分 = 风险调整收益 / 投入金额
```
**评分说明**
- 交易价值评分 > 0.1:高价值交易,强烈推荐
- 交易价值评分 > 0.05:中等价值交易,推荐
- 交易价值评分 > 0:低价值交易,可考虑
- 交易价值评分 <= 0:无价值交易,不推荐
---
## 八、交易信号生成算法
### 8.1 信号生成条件
**买入信号生成条件**
1. **获胜概率条件**
- 主队获胜概率 > 阈值(如 0.55)或 < 阈值(如 0.45
- 如果主队获胜概率 > 0.55,买入主队获胜(YES
- 如果主队获胜概率 < 0.45,买入主队失败(NO
2. **交易价值条件**
- 交易价值评分 > 用户配置的最小交易价值(如 0.05)
3. **价格条件**
- 当前市场价格在合理范围内
- 价格偏差在用户配置的容忍度内
4. **时间条件**
- 比赛未结束
- 剩余时间充足(如果用户配置了最小剩余时间)
### 8.2 信号方向确定
**方向判断逻辑**
```
如果 主队获胜概率 > 0.55:
方向 = YES(买入主队获胜)
目标价格 = 市场价格(如果合理)
如果 主队获胜概率 < 0.45:
方向 = NO(买入主队失败)
目标价格 = 1 - 市场价格(如果合理)
如果 0.45 <= 主队获胜概率 <= 0.55
不生成信号(概率太接近,不确定性高)
```
### 8.3 信号价格计算
**价格计算策略**
**策略一:固定价格**(用户配置)
```
信号价格 = 用户配置的固定价格
```
**策略二:市场价格**(默认)
```
信号价格 = 当前市场价格
```
**策略三:动态价格**(基于概率)
```
如果 方向 = YES
信号价格 = 主队获胜概率 × (1 + 价格偏移)
如果 方向 = NO
信号价格 = (1 - 主队获胜概率) × (1 + 价格偏移)
```
**价格偏移**
- 价格偏移 = 用户配置的价格偏移百分比(如 ±5%)
- 用于调整价格,提高交易成功率
### 8.4 信号数量计算
**数量计算策略**
**策略一:固定金额**(用户配置)
```
信号数量 = 用户配置的固定金额 / 信号价格
```
**策略二:按比例**(用户配置)
```
信号数量 = 账户余额 × 用户配置的比例 / 信号价格
```
**策略三:动态计算**(基于交易价值)
```
基础数量 = 用户配置的基础金额 / 信号价格
调整系数 = min(交易价值评分 / 0.1, 2.0) // 最多放大2倍
信号数量 = 基础数量 × 调整系数
```
### 8.5 信号原因生成
**触发原因说明**
```
触发原因 = "主队综合评分: {主队评分}, 客队综合评分: {客队评分}, "
+ "获胜概率: {获胜概率}, 交易价值: {交易价值评分}, "
+ "主要优势: {主要优势项}"
```
**主要优势项识别**
- 如果基础实力评分差异最大,则主要优势 = "基础实力"
- 如果近期状态评分差异最大,则主要优势 = "近期状态"
- 如果对位优势明显,则主要优势 = "对位优势"
- 如果实时状态优势明显,则主要优势 = "实时状态"
---
## 九、卖出信号生成算法
### 9.1 卖出条件
**卖出信号生成条件**
1. **止盈条件**
- 当前持仓的预期收益达到用户配置的止盈阈值(如 20%)
- 或市场价格达到用户配置的目标价格
2. **止损条件**
- 当前持仓的预期亏损达到用户配置的止损阈值(如 -10%)
- 或市场价格跌破用户配置的止损价格
3. **概率反转条件**
- 获胜概率发生反转(如从 0.6 降到 0.4)
- 反转幅度超过用户配置的阈值(如 0.15)
4. **时间条件**
- 比赛接近结束(剩余时间 < 用户配置的最小剩余时间)
- 或比赛已结束
### 9.2 卖出价格计算
**卖出价格**
```
卖出价格 = 当前市场价格
```
**价格调整**(可选):
```
如果 止盈卖出:
卖出价格 = min(当前市场价格, 目标价格)
如果 止损卖出:
卖出价格 = max(当前市场价格, 止损价格)
```
### 9.3 卖出数量计算
**卖出数量**
```
如果 全部卖出:
卖出数量 = 当前持仓数量
如果 部分卖出:
卖出数量 = 当前持仓数量 × 用户配置的卖出比例
```
---
## 十、风险控制算法
### 10.1 持仓限制检查
**最大持仓检查**
```
如果 信号数量 × 信号价格 > 用户配置的最大持仓:
信号数量 = 用户配置的最大持仓 / 信号价格
记录警告:超过最大持仓限制,已调整数量
```
**最小持仓检查**
```
如果 信号数量 × 信号价格 < 用户配置的最小持仓:
不生成信号
记录原因:金额低于最小持仓限制
```
### 10.2 每日限制检查
**每日亏损限制**
```
今日已亏损 = 今日所有交易的累计亏损
如果 今日已亏损 + 预期最大亏损 > 用户配置的每日亏损限制:
不生成信号
记录原因:超过每日亏损限制
```
**每日订单限制**
```
今日订单数 = 今日已生成的信号数量
如果 今日订单数 >= 用户配置的每日订单限制:
不生成信号
记录原因:超过每日订单限制
```
### 10.3 价格容忍度检查
**价格偏差检查**
```
价格偏差 = |信号价格 - 当前市场价格| / 当前市场价格
如果 价格偏差 > 用户配置的价格容忍度:
不生成信号
记录原因:价格偏差超过容忍度
```
### 10.4 概率置信度检查
**概率置信度**
```
如果 0.45 <= 获胜概率 <= 0.55
不生成信号
记录原因:获胜概率太接近,不确定性高
```
**最小概率阈值**(可选):
```
如果 获胜概率 < 用户配置的最小概率阈值:
不生成信号
记录原因:获胜概率低于最小阈值
```
---
## 十一、算法参数配置
### 11.1 用户可配置参数
**触发条件参数**
- 最小获胜概率差异:主队和客队获胜概率的最小差异(如 0.1)
- 最小交易价值:交易价值评分的最小值(如 0.05)
- 最小剩余时间:生成信号时的最小剩余时间(如 5 分钟)
**交易规则参数**
- 买入金额策略:固定金额/按比例/动态计算
- 买入金额:固定金额或比例值
- 价格策略:固定价格/市场价格/动态价格
- 价格偏移:价格偏移百分比(如 ±5%)
**风险控制参数**
- 最大持仓:单次最大买入金额
- 最小持仓:单次最小买入金额
- 每日亏损限制:每日最大亏损金额
- 每日订单限制:每日最大订单数量
- 价格容忍度:允许的价格偏差百分比
**卖出规则参数**
- 止盈阈值:预期收益达到多少时卖出(如 20%)
- 止损阈值:预期亏损达到多少时卖出(如 -10%)
- 概率反转阈值:概率反转多少时卖出(如 0.15)
- 卖出比例:部分卖出时的比例(如 50%)
### 11.2 系统默认参数
**评分权重**(可根据历史数据优化):
- 基础实力权重:0.3
- 近期状态权重:0.25
- 阵容完整度权重:0.2
- 球星状态权重:0.15
- 环境因素权重:0.1
**概率计算参数**
- k 值(逻辑回归系数):7.5
- 对位调整范围:[-0.1, +0.1]
- 实时调整权重:分差 0.3,势头 0.2
**风险系数权重**
- 概率不确定性权重:0.5
- 价格波动风险权重:0.3
- 流动性风险权重:0.2
---
## 十二、算法优化建议
### 12.1 参数优化
**历史回测优化**
- 使用历史数据回测不同参数组合
- 找到最优的参数配置
- 定期重新优化参数
**A/B 测试**
- 同时运行多组参数配置
- 对比不同参数的效果
- 选择最优参数组合
### 12.2 模型优化
**机器学习集成**
- 使用机器学习模型预测获胜概率
- 使用梯度提升决策树(XGBoost/LightGBM
- 定期重新训练模型
**特征工程优化**
- 添加更多特征(如历史对战数据、伤病信息等)
- 使用特征选择技术筛选重要特征
- 使用特征交互提高预测准确性
### 12.3 实时优化
**动态权重调整**
- 根据比赛阶段动态调整权重
- 比赛早期:基础实力权重高
- 比赛后期:实时状态权重高
**自适应阈值**
- 根据市场情况动态调整阈值
- 如果市场波动大,提高概率阈值
- 如果市场稳定,降低概率阈值
---
## 十三、算法输出
### 13.1 信号输出格式
**买入信号**
```
{
"signalType": "BUY",
"strategyId": "策略ID",
"gameId": "比赛ID",
"marketId": "市场ID",
"direction": "YES" | "NO",
"price": 0.65,
"quantity": 10.0,
"totalAmount": 6.5,
"reason": "主队综合评分: 0.72, 客队综合评分: 0.58, 获胜概率: 0.62, 交易价值: 0.08, 主要优势: 基础实力",
"winProbability": 0.62,
"tradeValue": 0.08,
"timestamp": 1234567890
}
```
**卖出信号**
```
{
"signalType": "SELL",
"strategyId": "策略ID",
"gameId": "比赛ID",
"marketId": "市场ID",
"direction": "YES" | "NO",
"price": 0.75,
"quantity": 10.0,
"totalAmount": 7.5,
"reason": "止盈卖出,预期收益: 15%",
"profit": 1.0,
"profitRate": 0.15,
"timestamp": 1234567890
}
```
### 13.2 算法执行日志
**执行日志格式**
```
{
"timestamp": 1234567890,
"strategyId": "策略ID",
"gameId": "比赛ID",
"step": "数据获取" | "特征提取" | "评分计算" | "信号生成",
"status": "SUCCESS" | "FAILED" | "SKIPPED",
"message": "执行信息",
"data": {} // 相关数据
}
```
---
## 十四、算法验证
### 14.1 回测验证
**回测流程**
1. 使用历史比赛数据
2. 模拟算法执行过程
3. 计算信号生成情况
4. 计算交易结果和盈亏
5. 评估算法效果
**评估指标**
- 信号生成数量
- 信号准确率(实际获胜 vs 预测获胜)
- 总盈亏金额
- 盈亏比率
- 最大回撤
### 14.2 实时验证
**实时监控**
- 监控算法执行情况
- 记录信号生成和交易结果
- 对比预测和实际结果
- 评估算法实时表现
**持续优化**
- 根据实时表现调整参数
- 优化算法逻辑
- 提高预测准确性
---
**文档结束**