-
Notifications
You must be signed in to change notification settings - Fork 34
Expand file tree
/
Copy pathdemo_batch_analysis.py
More file actions
257 lines (217 loc) · 8.71 KB
/
demo_batch_analysis.py
File metadata and controls
257 lines (217 loc) · 8.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
#!/usr/bin/env python3
"""
批量分析功能演示脚本
"""
import sys
import os
from pathlib import Path
# 添加项目根目录到Python路径
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))
def demo_batch_analysis_form():
"""演示批量分析表单功能"""
print("📋 批量分析表单功能演示")
print("=" * 40)
try:
from web.components.batch_analysis_form import parse_stock_symbols, validate_and_format_symbol
# 演示股票代码解析
print("🔍 股票代码解析演示:")
# 美股示例
us_stocks = "AAPL,TSLA,MSFT\nGOOGL,AMZN"
print(f"输入: {us_stocks}")
parsed_us = parse_stock_symbols(us_stocks, "美股")
print(f"解析结果: {parsed_us}")
# A股示例
cn_stocks = "000001,600519,000858"
print(f"\n输入: {cn_stocks}")
parsed_cn = parse_stock_symbols(cn_stocks, "A股")
print(f"解析结果: {parsed_cn}")
# 港股示例
hk_stocks = "0700.HK,9988.HK\n3690"
print(f"\n输入: {hk_stocks}")
parsed_hk = parse_stock_symbols(hk_stocks, "港股")
print(f"解析结果: {parsed_hk}")
# 演示股票代码验证
print("\n✅ 股票代码验证演示:")
test_cases = [
("AAPL", "美股"),
("000001", "A股"),
("0700.HK", "港股"),
("0700", "港股"),
("INVALID", "美股")
]
for symbol, market in test_cases:
try:
validated = validate_and_format_symbol(symbol, market)
print(f"✅ {symbol} ({market}) -> {validated}")
except Exception as e:
print(f"❌ {symbol} ({market}) -> 验证失败: {e}")
print("\n🎉 批量分析表单功能演示完成!")
return True
except Exception as e:
print(f"❌ 演示失败: {e}")
return False
def demo_batch_analysis_runner():
"""演示批量分析执行器功能"""
print("\n🚀 批量分析执行器功能演示")
print("=" * 40)
try:
from web.utils.batch_analysis_runner import BatchAnalysisRunner
# 创建批量分析执行器
batch_id = "demo_batch_123"
runner = BatchAnalysisRunner(batch_id)
print(f"✅ 批量分析执行器创建成功: {batch_id}")
# 模拟批量分析结果
mock_results = {
'AAPL': {
'success': True,
'decision': {
'action': '买入',
'confidence': 0.85,
'risk_score': 0.3,
'target_price': 180.0,
'reasoning': '技术面突破,基本面强劲'
}
},
'TSLA': {
'success': True,
'decision': {
'action': '持有',
'confidence': 0.65,
'risk_score': 0.5,
'target_price': 250.0,
'reasoning': '波动较大,需要观察'
}
},
'INVALID': {
'success': False,
'error': '股票代码无效'
}
}
# 设置模拟结果
runner.results = mock_results
runner.status = "completed"
# 生成汇总报告
summary_report = runner._generate_summary_report()
print("📊 汇总报告生成:")
print(f" - 总股票数: {summary_report['overview']['total_stocks']}")
print(f" - 成功分析: {summary_report['overview']['successful_analyses']}")
print(f" - 失败分析: {summary_report['overview']['failed_analyses']}")
print(f" - 成功率: {summary_report['overview']['success_rate'] * 100:.1f}%")
print(f" - 买入: {summary_report['investment_recommendations']['buy_count']} 个")
print(f" - 卖出: {summary_report['investment_recommendations']['sell_count']} 个")
print(f" - 持有: {summary_report['investment_recommendations']['hold_count']} 个")
print(f" - 平均置信度: {summary_report['risk_metrics']['average_confidence'] * 100:.1f}%")
print(f" - 平均风险分数: {summary_report['risk_metrics']['average_risk_score'] * 100:.1f}%")
print("\n🎉 批量分析执行器功能演示完成!")
return True
except Exception as e:
print(f"❌ 演示失败: {e}")
return False
def demo_batch_report_exporter():
"""演示批量分析报告导出功能"""
print("\n📄 批量分析报告导出功能演示")
print("=" * 40)
try:
from web.utils.batch_report_exporter import BatchReportExporter
# 模拟批量分析结果
mock_batch_results = {
'batch_id': 'demo_batch_123',
'total_stocks': 3,
'successful_analyses': 2,
'failed_analyses': 1,
'analysis_date': '2024-01-15',
'market_type': '美股',
'research_depth': 3,
'analysts': ['market', 'fundamentals'],
'summary_report': {
'overview': {
'total_stocks': 3,
'successful_analyses': 2,
'failed_analyses': 1,
'success_rate': 0.67
},
'investment_recommendations': {
'buy_count': 1,
'sell_count': 0,
'hold_count': 1,
'buy_percentage': 0.5,
'sell_percentage': 0.0,
'hold_percentage': 0.5
},
'risk_metrics': {
'average_confidence': 0.75,
'average_risk_score': 0.4,
'high_confidence_stocks': 1,
'low_risk_stocks': 1
}
},
'results': {
'AAPL': {
'success': True,
'decision': {
'action': '买入',
'confidence': 0.85,
'risk_score': 0.3,
'target_price': 180.0,
'reasoning': '技术面突破,基本面强劲'
}
},
'TSLA': {
'success': True,
'decision': {
'action': '持有',
'confidence': 0.65,
'risk_score': 0.5,
'target_price': 250.0,
'reasoning': '波动较大,需要观察'
}
},
'INVALID': {
'success': False,
'error': '股票代码无效'
}
}
}
# 创建报告导出器
exporter = BatchReportExporter(mock_batch_results)
print("✅ 批量分析报告导出器创建成功")
# 演示Markdown报告生成
print("📝 生成Markdown报告内容:")
markdown_content = exporter._generate_markdown_content(include_summary=True)
print("报告预览(前500字符):")
print(markdown_content[:500] + "..." if len(markdown_content) > 500 else markdown_content)
print("\n🎉 批量分析报告导出功能演示完成!")
return True
except Exception as e:
print(f"❌ 演示失败: {e}")
return False
def main():
"""主演示函数"""
print("🚀 批量股票分析功能演示")
print("=" * 50)
# 演示各个组件
form_demo = demo_batch_analysis_form()
runner_demo = demo_batch_analysis_runner()
exporter_demo = demo_batch_report_exporter()
print("\n" + "=" * 50)
if form_demo and runner_demo and exporter_demo:
print("🎉 所有演示完成!批量分析功能运行正常")
print("\n📋 功能总结:")
print("✅ 股票代码解析和验证")
print("✅ 批量分析执行器")
print("✅ 汇总报告生成")
print("✅ 多格式报告导出")
print("✅ 错误处理机制")
print("\n🚀 下一步:")
print("1. 启动Web应用: python -m streamlit run web/app.py")
print("2. 在浏览器中访问应用")
print("3. 选择 '📈 批量分析' 功能")
print("4. 输入股票代码开始批量分析")
return True
else:
print("❌ 演示过程中出现错误")
return False
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)