增加批量分析功能
This commit is contained in:
@@ -14,11 +14,11 @@
|
||||
- **批量输入**:支持同时输入多个股票代码(每行一个或逗号分隔)
|
||||
- **双模式分析**:
|
||||
- 顺序分析:按次序逐个分析,稳定可靠
|
||||
- 多线程并行:同时分析多只股票,速度更快
|
||||
- 多线程并行:同时分析多只股票,速度更快(推荐同时3-5只,以防api限流)
|
||||
- **对比视图**:横向对比多只股票的关键指标和投资评级
|
||||
- **详细卡片**:逐个查看每只股票的完整分析报告
|
||||
- **智能筛选**:按评级、涨跌幅、信心度等条件快速筛选
|
||||
|
||||
- **智能筛选**:分析结果自动保存到历史记录
|
||||
### 1006增加跟踪主力资金mcp,增加环境配置功能
|
||||
### 1005增加股票监测功能,增加历史记录中个股导入到监测板块
|
||||
|
||||
|
||||
@@ -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("⚠️ 没有成功分析的股票")
|
||||
|
||||
Reference in New Issue
Block a user