# 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.4(PER 权重) - W2 = 0.4(TS% 权重) - 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 实时验证 **实时监控**: - 监控算法执行情况 - 记录信号生成和交易结果 - 对比预测和实际结果 - 评估算法实时表现 **持续优化**: - 根据实时表现调整参数 - 优化算法逻辑 - 提高预测准确性 --- **文档结束**