111 lines
3.1 KiB
Markdown
111 lines
3.1 KiB
Markdown
# 主力选股批量分析修复说明
|
|
|
|
## 修复日期
|
|
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)
|
|
|