e9e1111df9
- 后端实现: - 实现 NBA 比赛数据服务,从 Polymarket API 获取数据 - 实现数据库存储和增量拉取逻辑(优先从 DB 获取,数据不足时增量拉取) - 使用 sports_market_types 参数直接筛选 moneyline 类型 - 实现分页拉取逻辑(基于 gameStartTime 和 createdAt) - 移除 nba_markets 相关的外键约束(V12 迁移) - 修复数据拉取逻辑:超过 3 天的数据不拉取 - 前端实现: - 实现策略创建/编辑/列表页面 - 实现交易信号展示页面和统计页面 - 修复重复请求问题(使用 useCallback 包装 fetchGames) - 支持选择单场比赛进行配置 - 使用西8区时间格式化显示 - 数据库: - 创建 NBA 量化交易相关表(V11 迁移) - 移除外键约束(V12 迁移) - 文档: - 添加产品需求文档、技术方案、算法文档等
835 lines
22 KiB
Markdown
835 lines
22 KiB
Markdown
# 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 实时验证
|
||
|
||
**实时监控**:
|
||
- 监控算法执行情况
|
||
- 记录信号生成和交易结果
|
||
- 对比预测和实际结果
|
||
- 评估算法实时表现
|
||
|
||
**持续优化**:
|
||
- 根据实时表现调整参数
|
||
- 优化算法逻辑
|
||
- 提高预测准确性
|
||
|
||
---
|
||
|
||
**文档结束**
|
||
|