增加主力选股批量分析
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
# 主力选股批量分析修复说明
|
||||
|
||||
## 修复日期
|
||||
2025-10-22
|
||||
|
||||
## 修复问题
|
||||
|
||||
### 1. JSON序列化失败
|
||||
**问题描述**: 批量分析结果保存到历史记录时失败,错误信息:`Object of type DataFrame is not JSON serializable`
|
||||
|
||||
**原因**: 分析结果中包含Pandas DataFrame和Series对象,无法直接序列化为JSON
|
||||
|
||||
**解决方案**:
|
||||
- 在 `main_force_batch_db.py` 中添加 `_clean_results_for_json()` 方法
|
||||
- 递归清理所有不可序列化的对象:
|
||||
- DataFrame → `to_dict('records')`
|
||||
- Series → `to_dict()`
|
||||
- 其他对象 → `str(value)`
|
||||
- 限制DataFrame最大行数为100,避免数据过大
|
||||
|
||||
**相关文件**:
|
||||
- `main_force_batch_db.py` (lines 50-102)
|
||||
|
||||
### 2. 历史记录显示N/A
|
||||
**问题描述**: 批量分析历史记录中,股票名称和评级显示为N/A
|
||||
|
||||
**原因**: 字段名不匹配
|
||||
- 代码中访问: `stock_info.get('股票名称', 'N/A')`
|
||||
- 实际字段名: `stock_info['name']`
|
||||
- 代码中访问: `final_decision.get('investment_rating', 'N/A')`
|
||||
- 实际字段名: `final_decision['rating']`
|
||||
|
||||
**解决方案**:
|
||||
修复以下文件中的字段名访问:
|
||||
- `main_force_history_ui.py`:
|
||||
- `股票名称` → `name`
|
||||
- `investment_rating` → `rating`
|
||||
- `investment_advice` → `operation_advice`
|
||||
- `main_force_ui.py`:
|
||||
- `advice` → `operation_advice`
|
||||
|
||||
**相关文件**:
|
||||
- `main_force_history_ui.py` (lines 109, 110, 126, 130)
|
||||
- `main_force_ui.py` (line 906)
|
||||
|
||||
### 3. 详细调试日志
|
||||
**问题描述**: 难以追踪批量分析和保存过程中的问题
|
||||
|
||||
**解决方案**:
|
||||
- 在并行分析中添加详细的进度日志
|
||||
- 在保存历史记录前添加数据类型检查
|
||||
- 添加保存耗时统计
|
||||
- 添加详细的错误堆栈信息
|
||||
|
||||
**相关文件**:
|
||||
- `main_force_ui.py` (lines 650-692, 706-753)
|
||||
|
||||
## 数据结构参考
|
||||
|
||||
### stock_info 字段
|
||||
```python
|
||||
{
|
||||
"symbol": "600519",
|
||||
"name": "贵州茅台", # <-- 正确的字段名
|
||||
"current_price": "1850.00",
|
||||
"change_percent": "2.5%",
|
||||
"pe_ratio": "30.5",
|
||||
"pb_ratio": "10.2",
|
||||
"market_cap": "2.3万亿",
|
||||
"market": "中国A股",
|
||||
"exchange": "上海/深圳证券交易所"
|
||||
}
|
||||
```
|
||||
|
||||
### final_decision 字段
|
||||
```python
|
||||
{
|
||||
"rating": "买入", # <-- 正确的字段名
|
||||
"target_price": "2000",
|
||||
"operation_advice": "...", # <-- 正确的字段名
|
||||
"entry_range": "1800-1850",
|
||||
"take_profit": "2000",
|
||||
"stop_loss": "1750",
|
||||
"holding_period": "3-6个月",
|
||||
"position_size": "中等仓位",
|
||||
"risk_warning": "...",
|
||||
"confidence_level": "8"
|
||||
}
|
||||
```
|
||||
|
||||
## 测试建议
|
||||
|
||||
1. **功能测试**:
|
||||
- 运行10只股票的批量分析
|
||||
- 检查历史记录是否正确保存
|
||||
- 验证股票名称和评级正确显示
|
||||
|
||||
2. **性能测试**:
|
||||
- 测试大量DataFrame数据的序列化性能
|
||||
- 验证100行限制是否合理
|
||||
|
||||
3. **边界测试**:
|
||||
- 测试包含异常数据的分析结果
|
||||
- 测试空DataFrame的处理
|
||||
- 测试None值的处理
|
||||
|
||||
## 相关文档
|
||||
- [主力选股批量分析功能说明](./主力选股批量分析功能说明.md)
|
||||
- [主力选股批量分析历史记录功能说明](./主力选股批量分析历史记录功能说明.md)
|
||||
|
||||
Reference in New Issue
Block a user