182 lines
6.0 KiB
Python
182 lines
6.0 KiB
Python
#!/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() |