MCPcopy Create free account
hub / github.com/FinStep-AI/ContestTrade / FinalReportGenerator

Class FinalReportGenerator

cli/static/report_template.py:153–367  ·  view source on GitHub ↗

最终报告生成器

Source from the content-addressed store, hash-verified

151
152
153class FinalReportGenerator:
154 """最终报告生成器"""
155
156 def __init__(self, final_state: Dict):
157 self.final_state = final_state
158 self.console = Console()
159 self.market_type = os.environ.get('CONTEST_TRADE_MARKET', 'CN-Stock')
160
161 def get_text(self, cn_text: str, en_text: str) -> str:
162 return en_text if self.market_type == 'US-Stock' else cn_text
163
164 def generate_markdown_report(self, save_path: Path) -> str:
165 """生成Markdown格式的报告"""
166
167 # 获取基本信息
168 step_results = self.final_state.get('step_results', {})
169 data_team_results = step_results.get('data_team', {})
170 research_team_results = step_results.get('research_team', {})
171 contest_results = step_results.get('contest', {})
172
173 # 获取触发时间,确保正确解析
174 trigger_time = self.final_state.get('trigger_time', 'N/A')
175 if trigger_time == 'N/A':
176 # 尝试从其他地方获取时间
177 trigger_time = step_results.get('trigger_time', 'N/A')
178
179 data_factors_count = data_team_results.get('factors_count', 0)
180 research_signals_count = research_team_results.get('signals_count', 0)
181 best_signals = contest_results.get('best_signals', [])
182
183 # 筛选有效信号
184 valid_signals = [s for s in best_signals if s.get('has_opportunity', 'no') == 'yes']
185 invalid_signals = [s for s in best_signals if s.get('has_opportunity', 'no') != 'yes']
186
187 # 生成报告内容
188 signal_rate = f"{len(valid_signals)/len(best_signals)*100:.1f}% ({len(valid_signals)}/{len(best_signals)})" if len(best_signals) > 0 else "0% (0/0)"
189
190 report_content = f"""# ContestTrade {self.get_text('最终分析报告', 'Final Analysis Report')}
191
192## 📊 {self.get_text('执行摘要', 'Executive Summary')}
193
194**{self.get_text('分析时间', 'Analysis Time')}**: {trigger_time}
195**{self.get_text('分析状态', 'Analysis Status')}**: ✅ {self.get_text('完成', 'Completed')}
196**{self.get_text('数据源数量', 'Data Sources Count')}**: {data_factors_count}
197**{self.get_text('研究信号数量', 'Research Signals Count')}**: {research_signals_count}
198**{self.get_text('有效投资信号', 'Valid Investment Signals')}**: {len(valid_signals)}
199**{self.get_text('信号有效率', 'Signal Effectiveness Rate')}**: {signal_rate}
200
201---
202
203## 🎯 {self.get_text('投资建议摘要', 'Investment Recommendations Summary')}
204
205"""
206
207 if valid_signals:
208 report_content += f"### ✅ {self.get_text('推荐投资信号', 'Recommended Investment Signals')} ({len(valid_signals)}{self.get_text('个', '')})\n\n"
209
210 for i, signal in enumerate(valid_signals, 1):

Callers 3

display_detailed_reportFunction · 0.85
generate_final_reportFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected