Files
20250920-e194e889/run_analysis.py
2026-04-25 19:21:28 +08:00

182 lines
6.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
美股分析系统启动脚本
提供交互式界面进行股票分析
"""
import sys
import os
from main import StockAnalysisSystem
def print_banner():
"""打印系统横幅"""
banner = """
╔══════════════════════════════════════════════════════════════╗
║ 美股低价值公司分析系统 ║
║ US Stock Value Analysis ║
╚══════════════════════════════════════════════════════════════╝
"""
print(banner)
def print_menu():
"""打印主菜单"""
menu = """
请选择操作:
1. 分析单只股票 (完整分析)
2. 快速筛选股票 (检查是否符合低价值标准)
3. 批量分析多只股票
4. 查看历史分析结果
5. 系统测试
6. 退出
请输入选项 (1-6): """
return input(menu).strip()
def analyze_single_stock():
"""分析单只股票"""
symbol = input("请输入股票代码 (如: AAPL): ").strip().upper()
if not symbol:
print("❌ 股票代码不能为空")
return
print(f"\n🔍 正在分析 {symbol}...")
print("⏳ 这可能需要2-3分钟请耐心等待...")
system = StockAnalysisSystem()
result = system.analyze_stock(symbol)
if 'error' in result:
print(f"❌ 分析失败: {result['error']}")
else:
print(f"\n{symbol} 分析完成!")
print(f"📊 投资建议: {result.get('recommendation', 'N/A')}")
print(f"🎯 综合评分: {result.get('overall_score', 0):.1f}/100")
recommendation = result.get('investment_recommendation', {})
if recommendation.get('key_strengths'):
print("\n💪 关键优势:")
for strength in recommendation['key_strengths']:
print(f"{strength}")
if recommendation.get('key_concerns'):
print("\n⚠️ 关键担忧:")
for concern in recommendation['key_concerns']:
print(f"{concern}")
if result.get('report_file'):
print(f"\n📄 详细报告: {result['report_file']}")
if result.get('summary_file'):
print(f"📝 简要报告: {result['summary_file']}")
def quick_screen_stock():
"""快速筛选股票"""
symbol = input("请输入股票代码 (如: AAPL): ").strip().upper()
if not symbol:
print("❌ 股票代码不能为空")
return
print(f"\n🔍 正在快速筛选 {symbol}...")
system = StockAnalysisSystem()
result = system.quick_screening(symbol)
if 'error' in result:
print(f"❌ 筛选失败: {result['error']}")
else:
print(f"\n📋 {symbol} 筛选结果:")
print(f"🏢 公司名称: {result.get('company_name', 'N/A')}")
print(f"💰 市值: ${result.get('market_cap', 0):,.0f}")
if result.get('passes_screening'):
print("✅ 通过低价值投资筛选")
else:
print("❌ 未通过低价值投资筛选")
if result.get('criteria_met'):
print("\n✅ 符合条件:")
for criteria in result['criteria_met']:
print(f"{criteria}")
if result.get('criteria_failed'):
print("\n❌ 不符合条件:")
for criteria in result['criteria_failed']:
print(f"{criteria}")
def batch_analyze_stocks():
"""批量分析股票"""
symbols_input = input("请输入股票代码,用逗号分隔 (如: AAPL,MSFT,GOOGL): ").strip()
if not symbols_input:
print("❌ 股票代码不能为空")
return
symbols = [s.strip().upper() for s in symbols_input.split(',')]
print(f"\n🔍 正在批量分析 {len(symbols)} 只股票...")
print("⏳ 这可能需要较长时间,请耐心等待...")
system = StockAnalysisSystem()
results = system.batch_analysis(symbols)
print(f"\n📊 批量分析结果:")
print("=" * 60)
for symbol, result in results.items():
if 'error' in result:
print(f"{symbol}: {result['error']}")
else:
recommendation = result.get('recommendation', 'N/A')
score = result.get('overall_score', 0)
print(f"📈 {symbol}: {recommendation} (评分: {score:.1f})")
def view_history():
"""查看历史分析结果"""
print("\n📚 历史分析结果功能开发中...")
print("💡 提示: 分析结果已保存在数据库中,详细报告在 reports/ 目录下")
def run_system_test():
"""运行系统测试"""
print("\n🧪 正在运行系统测试...")
try:
from test_system import main as test_main
test_main()
except ImportError:
print("❌ 测试模块未找到")
except Exception as e:
print(f"❌ 测试失败: {e}")
def main():
"""主函数"""
print_banner()
while True:
try:
choice = print_menu()
if choice == '1':
analyze_single_stock()
elif choice == '2':
quick_screen_stock()
elif choice == '3':
batch_analyze_stocks()
elif choice == '4':
view_history()
elif choice == '5':
run_system_test()
elif choice == '6':
print("\n👋 感谢使用美股分析系统!")
break
else:
print("❌ 无效选项,请重新选择")
input("\n按回车键继续...")
print("\n" + "="*60)
except KeyboardInterrupt:
print("\n\n👋 程序已退出")
break
except Exception as e:
print(f"\n❌ 发生错误: {e}")
input("按回车键继续...")
if __name__ == "__main__":
main()