init repo

This commit is contained in:
2026-04-25 19:21:28 +08:00
commit 35414c74a2
26 changed files with 3529 additions and 0 deletions

165
test_system.py Normal file
View File

@@ -0,0 +1,165 @@
"""
系统测试脚本
"""
import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from main import StockAnalysisSystem
import logging
# 设置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def test_quick_screening():
"""测试快速筛选功能"""
print("=== 测试快速筛选功能 ===")
system = StockAnalysisSystem()
# 测试一些知名股票
test_symbols = ['AAPL', 'MSFT', 'GOOGL', 'TSLA', 'NVDA']
for symbol in test_symbols:
print(f"\n正在测试 {symbol}...")
try:
result = system.quick_screening(symbol)
if 'error' in result:
print(f"{symbol}: {result['error']}")
else:
status = "✅ 通过" if result.get('passes_screening') else "❌ 未通过"
print(f"{status} {symbol}: {result.get('company_name', 'N/A')}")
if result.get('criteria_met'):
print(" 符合条件:")
for criteria in result['criteria_met']:
print(f"{criteria}")
if result.get('criteria_failed'):
print(" 不符合条件:")
for criteria in result['criteria_failed']:
print(f"{criteria}")
except Exception as e:
print(f"{symbol}: 测试失败 - {e}")
def test_data_collection():
"""测试数据收集功能"""
print("\n=== 测试数据收集功能 ===")
system = StockAnalysisSystem()
# 测试AAPL数据收集
symbol = 'AAPL'
print(f"正在收集 {symbol} 数据...")
try:
raw_data = system.data_collector.collect_all_data(symbol)
if raw_data.get('company_info'):
company_info = raw_data['company_info']
print(f"✅ 公司信息: {company_info.get('name', 'N/A')}")
print(f" 行业: {company_info.get('industry', 'N/A')}")
print(f" 市值: ${company_info.get('market_cap', 0):,.0f}")
else:
print("❌ 无法获取公司信息")
if not raw_data['stock_prices'].empty:
print(f"✅ 股价数据: {len(raw_data['stock_prices'])} 条记录")
else:
print("❌ 无法获取股价数据")
if raw_data['financial_statements']:
print(f"✅ 财务数据: {len(raw_data['financial_statements'])} 个期间")
else:
print("❌ 无法获取财务数据")
key_metrics = raw_data.get('key_metrics', {})
if key_metrics:
print(f"✅ 关键指标: PE={key_metrics.get('pe_ratio', 0):.2f}, PB={key_metrics.get('pb_ratio', 0):.2f}")
else:
print("❌ 无法获取关键指标")
except Exception as e:
print(f"❌ 数据收集失败: {e}")
def test_analysis_engine():
"""测试分析引擎"""
print("\n=== 测试分析引擎 ===")
system = StockAnalysisSystem()
# 先收集数据
symbol = 'AAPL'
print(f"正在分析 {symbol}...")
try:
raw_data = system.data_collector.collect_all_data(symbol)
if not raw_data.get('company_info'):
print("❌ 无法获取数据进行分析")
return
# 测试各个分析模块
print(" 估值分析...")
valuation = system.analyzer.calculate_valuation_metrics(raw_data)
print(f" 估值评分: {valuation.get('valuation_score', 0):.1f}")
print(" 财务健康度分析...")
health = system.analyzer.calculate_financial_health(raw_data)
print(f" 健康度评分: {health.get('health_score', 0):.1f}")
print(" 成长性分析...")
growth = system.analyzer.calculate_growth_metrics(raw_data)
print(f" 成长性评分: {growth.get('growth_score', 0):.1f}")
print(" 风险分析...")
risk = system.analyzer.calculate_risk_metrics(raw_data)
print(f" 风险评分: {risk.get('risk_score', 0):.1f}")
print(" DCF估值...")
dcf = system.analyzer.perform_dcf_valuation(raw_data)
print(f" DCF价值: ${dcf.get('dcf_value', 0):,.2f}")
print(" 生成投资建议...")
recommendation = system.analyzer.generate_investment_recommendation({
'valuation_score': valuation.get('valuation_score', 0),
'financial_health_score': health.get('health_score', 0),
'growth_score': growth.get('growth_score', 0),
'risk_score': risk.get('risk_score', 0)
})
print(f" 投资建议: {recommendation.get('recommendation', 'N/A')}")
print(f" 综合评分: {recommendation.get('overall_score', 0):.1f}")
print("✅ 分析引擎测试完成")
except Exception as e:
print(f"❌ 分析引擎测试失败: {e}")
def main():
"""运行所有测试"""
print("🚀 开始系统测试...")
try:
# 测试数据收集
test_data_collection()
# 测试快速筛选
test_quick_screening()
# 测试分析引擎
test_analysis_engine()
print("\n✅ 所有测试完成!")
print("\n💡 提示:")
print("- 如果看到网络错误,请检查网络连接")
print("- 如果看到数据获取失败可能是API限制或股票代码错误")
print("- 系统已准备就绪,可以使用 python main.py <股票代码> 进行分析")
except Exception as e:
print(f"❌ 测试过程中出现错误: {e}")
if __name__ == "__main__":
main()