增加批量分析功能

This commit is contained in:
oficcejo
2025-10-08 14:38:29 +08:00
parent c00978ea5a
commit 0c11a7b010
2 changed files with 37 additions and 8 deletions
+2 -2
View File
@@ -14,11 +14,11 @@
- **批量输入**:支持同时输入多个股票代码(每行一个或逗号分隔)
- **双模式分析**
- 顺序分析:按次序逐个分析,稳定可靠
- 多线程并行:同时分析多只股票,速度更快
- 多线程并行:同时分析多只股票,速度更快(推荐同时3-5只,以防api限流)
- **对比视图**:横向对比多只股票的关键指标和投资评级
- **详细卡片**:逐个查看每只股票的完整分析报告
- **智能筛选**:按评级、涨跌幅、信心度等条件快速筛选
- **智能筛选**:分析结果自动保存到历史记录
### 1006增加跟踪主力资金mcp,增加环境配置功能
### 1005增加股票监测功能,增加历史记录中个股导入到监测板块
+35 -6
View File
@@ -755,8 +755,10 @@ def analyze_single_stock_for_batch(symbol, period, enabled_analysts_config=None,
final_decision = agents.make_final_decision(discussion_result, stock_info, indicators)
# 保存到数据库
saved_to_db = False
db_error = None
try:
db.save_analysis(
record_id = db.save_analysis(
symbol=stock_info.get('symbol', ''),
stock_name=stock_info.get('name', ''),
period=period,
@@ -765,8 +767,11 @@ def analyze_single_stock_for_batch(symbol, period, enabled_analysts_config=None,
discussion_result=discussion_result,
final_decision=final_decision
)
saved_to_db = True
print(f"{symbol} 成功保存到数据库,记录ID: {record_id}")
except Exception as e:
print(f"保存到数据库时出现错误: {str(e)}")
db_error = str(e)
print(f"{symbol} 保存到数据库失败: {db_error}")
return {
"symbol": symbol,
@@ -775,7 +780,9 @@ def analyze_single_stock_for_batch(symbol, period, enabled_analysts_config=None,
"indicators": indicators,
"agents_results": agents_results,
"discussion_result": discussion_result,
"final_decision": final_decision
"final_decision": final_decision,
"saved_to_db": saved_to_db,
"db_error": db_error
}
except Exception as e:
@@ -889,9 +896,16 @@ def run_batch_analysis(stock_list, period, batch_mode="顺序分析"):
# 统计结果
success_count = sum(1 for r in results if r['success'])
failed_count = total - success_count
saved_count = sum(1 for r in results if r.get('saved_to_db', False))
# 显示完成信息
if success_count > 0:
status_text.success(f"✅ 批量分析完成!成功 {success_count} 只,失败 {failed_count}")
status_text.success(f"✅ 批量分析完成!成功 {success_count} 只,失败 {failed_count},已保存 {saved_count} 只到历史记录")
# 显示保存失败的股票
save_failed = [r['symbol'] for r in results if r.get('success') and not r.get('saved_to_db', False)]
if save_failed:
st.warning(f"⚠️ 以下股票分析成功但保存失败: {', '.join(save_failed)}")
else:
status_text.error(f"❌ 批量分析完成,但所有股票都分析失败")
@@ -899,7 +913,7 @@ def run_batch_analysis(stock_list, period, batch_mode="顺序分析"):
st.session_state.batch_analysis_results = results
st.session_state.batch_analysis_mode = batch_mode
time.sleep(2)
time.sleep(1)
progress_bar.empty()
# 自动显示结果
@@ -2048,15 +2062,22 @@ def display_batch_analysis_results(results, period):
total = len(results)
success_results = [r for r in results if r['success']]
failed_results = [r for r in results if not r['success']]
saved_count = sum(1 for r in results if r.get('saved_to_db', False))
# 显示统计
col1, col2, col3 = st.columns(3)
col1, col2, col3, col4 = st.columns(4)
with col1:
st.metric("总数", total)
with col2:
st.metric("成功", len(success_results), delta=None, delta_color="normal")
with col3:
st.metric("失败", len(failed_results), delta=None, delta_color="inverse")
with col4:
st.metric("已保存", saved_count, delta=None, delta_color="normal")
# 提示信息
if saved_count > 0:
st.info(f"💾 已有 {saved_count} 只股票的分析结果保存到历史记录,可在侧边栏点击「📖 历史记录」查看")
st.markdown("---")
@@ -2066,6 +2087,14 @@ def display_batch_analysis_results(results, period):
for result in failed_results:
st.error(f"**{result['symbol']}**: {result.get('error', '未知错误')}")
# 保存失败的股票列表
save_failed_results = [r for r in success_results if not r.get('saved_to_db', False)]
if save_failed_results:
with st.expander(f"⚠️ 查看分析成功但保存失败的 {len(save_failed_results)} 只股票", expanded=False):
for result in save_failed_results:
db_error = result.get('db_error', '未知错误')
st.warning(f"**{result['symbol']} - {result['stock_info'].get('name', 'N/A')}**: {db_error}")
# 成功的股票分析结果
if not success_results:
st.warning("⚠️ 没有成功分析的股票")