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

Function display_detailed_report

cli/main.py:803–905  ·  view source on GitHub ↗

显示详细的可滚动终端报告(使用Rich交互式显示)

(final_state: Dict)

Source from the content-addressed store, hash-verified

801
802
803def display_detailed_report(final_state: Dict):
804 """显示详细的可滚动终端报告(使用Rich交互式显示)"""
805 if not final_state:
806 console.print("[red]无结果可显示[/red]")
807 return
808
809 try:
810 from .static.report_template import FinalReportGenerator
811 generator = FinalReportGenerator(final_state)
812 step_results = final_state.get('step_results', {})
813 data_team_results = step_results.get('data_team', {})
814 research_team_results = step_results.get('research_team', {})
815 contest_results = step_results.get('contest', {})
816
817 trigger_time = final_state.get('trigger_time', 'N/A')
818 data_factors_count = data_team_results.get('factors_count', 0)
819 research_signals_count = research_team_results.get('signals_count', 0)
820 best_signals = contest_results.get('best_signals', [])
821
822 valid_signals = [s for s in best_signals if s.get('has_opportunity', 'no') == 'yes']
823 invalid_signals = [s for s in best_signals if s.get('has_opportunity', 'no') != 'yes']
824
825 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)"
826
827 markdown_content = f"""# ContestTrade {get_text('详细分析报告', 'Detailed Analysis Report')}
828
829## 📊 {get_text('执行摘要', 'Executive Summary')}
830
831**{get_text('分析时间', 'Analysis Time')}**: {trigger_time}
832**{get_text('数据源数量', 'Data Sources Count')}**: {data_factors_count}
833**{get_text('研究信号数量', 'Research Signals Count')}**: {research_signals_count}
834**{get_text('有效投资信号', 'Valid Investment Signals')}**: {len(valid_signals)}
835**{get_text('信号有效率', 'Signal Effectiveness Rate')}**: {signal_rate}
836
837---
838
839## 🎯 {get_text('投资信号详情', 'Investment Signals Details')}
840"""
841
842 if valid_signals:
843 markdown_content += f"\n### ✅ {get_text('推荐投资信号', 'Recommended Investment Signals')} ({len(valid_signals)}{get_text('个', '')})\n\n"
844
845 for i, signal in enumerate(valid_signals, 1):
846 symbol_name = signal.get('symbol_name', 'N/A')
847 symbol_code = signal.get('symbol_code', 'N/A')
848 action = signal.get('action', 'N/A')
849 probability = signal.get('probability', 'N/A')
850 agent_id = signal.get('agent_id', 'N/A')
851
852 markdown_content += f"#### {i}. {symbol_name} ({symbol_code})\n\n"
853 markdown_content += f"- **{get_text('投资动作', 'Investment Action')}**: {action}\n"
854 markdown_content += f"- **{get_text('分析来源', 'Analysis Source')}**: Research Agent {agent_id}\n\n"
855
856 evidence_list = signal.get('evidence_list', [])
857 if evidence_list:
858 markdown_content += f"**📋 {get_text('支撑证据', 'Supporting Evidence')} ({len(evidence_list)}{get_text('项', '')}):**\n\n"
859 for j, evidence in enumerate(evidence_list, 1):
860 desc = evidence.get('description', 'N/A')

Callers 1

ask_user_for_next_actionFunction · 0.85

Calls 3

get_textFunction · 0.85

Tested by

no test coverage detected