fiewolf1000 commited on
Commit
9ca16de
·
verified ·
1 Parent(s): e2b25b7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -17
app.py CHANGED
@@ -69,12 +69,13 @@ except Exception as e:
69
 
70
 
71
  # ---------------------- 2. 定义交易决策函数 ----------------------
 
72
  def generate_trading_decision(ticker, analysis_date, progress=gr.Progress()):
73
- """核心函数:生成交易决策,使用框架规范参数名"""
74
  logger.info(f"收到分析请求 - 股票代码: {ticker}, 分析日期: {analysis_date}")
75
 
76
  try:
77
- # 1. 验证输入
78
  if not ticker.strip():
79
  error_msg = "错误:股票代码不能为空!请输入如 AAPL、SPY 的代码。"
80
  logger.warning(error_msg)
@@ -85,7 +86,6 @@ def generate_trading_decision(ticker, analysis_date, progress=gr.Progress()):
85
  logger.warning(error_msg)
86
  return error_msg
87
 
88
- # 验证日期格式
89
  try:
90
  time.strptime(analysis_date.strip(), "%Y-%m-%d")
91
  except ValueError:
@@ -97,35 +97,64 @@ def generate_trading_decision(ticker, analysis_date, progress=gr.Progress()):
97
 
98
  # 2. 显示进度
99
  progress(0, desc="开始初始化分析...")
100
- logger.info("分析流程启动")
101
  time.sleep(1)
102
 
103
  progress(0.2, desc=f"获取 {ticker} 的金融数据(FinnHub)...")
104
- logger.info(f"正在获取 {ticker} 的金融数据")
105
  time.sleep(2)
106
 
107
  progress(0.5, desc="分析师团队分析(财务+情绪+技术指标)...")
108
- logger.info("分析师团队开始分析(财务+情绪+技术指标)")
109
  time.sleep(3)
110
 
111
  progress(0.8, desc="研究团队辩论+交易员决策+风险管理评估...")
112
- logger.info("进入研究团队辩论和风险管理评估阶段")
113
 
114
- # 3. 调用框架核心方法(使用项目规范的参数名 company_name 和 trade_date)
115
  logger.info(f"调用 propagate 方法 - company_name={ticker.strip()}, trade_date={analysis_date.strip()}")
116
  start_time = time.time()
117
- _, decision = ta.propagate(
118
- company_name=ticker.strip(),
119
- trade_date=analysis_date.strip()
120
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
  end_time = time.time()
122
  logger.info(f"分析完成,耗时 {end_time - start_time:.2f} 秒")
123
 
124
- # 4. 添加免责声明
125
- disclaimer = "\n\n【免责声明】本结果仅用于研究目的,不构成任何财务、投资或交易建议。交易风险自负。"
126
- final_result = f"# {ticker} 交易决策报告(分析日期:{analysis_date})\n\n{decision}{disclaimer}"
127
- logger.info(f"生成 {ticker} 的交易决策报告完成")
128
-
129
  progress(1.0, desc="分析完成!")
130
  return final_result
131
 
@@ -141,6 +170,7 @@ def generate_trading_decision(ticker, analysis_date, progress=gr.Progress()):
141
  return error_msg
142
 
143
 
 
144
  # ---------------------- 3. 构建 Gradio 界面 ----------------------
145
  logger.info("开始构建 Gradio 界面...")
146
  with gr.Blocks(title="TradingAgents 金融交易决策工具") as demo:
 
69
 
70
 
71
  # ---------------------- 2. 定义交易决策函数 ----------------------
72
+
73
  def generate_trading_decision(ticker, analysis_date, progress=gr.Progress()):
74
+ """核心函数:生成交易决策,显示中间分析过程"""
75
  logger.info(f"收到分析请求 - 股票代码: {ticker}, 分析日期: {analysis_date}")
76
 
77
  try:
78
+ # 1. 验证输入(与之前逻辑一致)
79
  if not ticker.strip():
80
  error_msg = "错误:股票代码不能为空!请输入如 AAPL、SPY 的代码。"
81
  logger.warning(error_msg)
 
86
  logger.warning(error_msg)
87
  return error_msg
88
 
 
89
  try:
90
  time.strptime(analysis_date.strip(), "%Y-%m-%d")
91
  except ValueError:
 
97
 
98
  # 2. 显示进度
99
  progress(0, desc="开始初始化分析...")
 
100
  time.sleep(1)
101
 
102
  progress(0.2, desc=f"获取 {ticker} 的金融数据(FinnHub)...")
 
103
  time.sleep(2)
104
 
105
  progress(0.5, desc="分析师团队分析(财务+情绪+技术指标)...")
 
106
  time.sleep(3)
107
 
108
  progress(0.8, desc="研究团队辩论+交易员决策+风险管理评估...")
 
109
 
110
+ # 3. 调用框架核心方法,捕获中间结果
111
  logger.info(f"调用 propagate 方法 - company_name={ticker.strip()}, trade_date={analysis_date.strip()}")
112
  start_time = time.time()
113
+
114
+ # ---- 关键修改:调试模式下捕获流式中间结果 ----
115
+ all_outputs = [] # 存储所有中间输出
116
+ final_state = None
117
+ processed_signal = None
118
+
119
+ # 若处于调试模式(debug=True),使用 stream 获取中间结果
120
+ if ta.debug:
121
+ # 获取 graph.invoke 所需的参数
122
+ args = ta.propagator.get_graph_args()
123
+ init_state = ta.propagator.create_initial_state(ticker.strip(), analysis_date.strip())
124
+
125
+ # 遍历流式结果
126
+ for i, chunk in enumerate(ta.graph.stream(init_state, **args)):
127
+ # 提取并格式化中间消息
128
+ if chunk.get("messages") and len(chunk["messages"]) > 0:
129
+ msg = chunk["messages"][-1].content # 假设消息内容在 .content 中
130
+ all_outputs.append(f"## 中间步骤 {i+1}\n{msg}\n\n")
131
+ logger.info(f"中间结果 {i+1}: {msg[:50]}...") # 日志简略显示
132
+
133
+ # 模拟进度(根据实际步骤数调整,这里简化)
134
+ progress(0.8 + 0.2 * i / 10, desc=f"处理中间步骤 {i+1}/10")
135
+
136
+ # 流式结束后,最终状态为最后一个 chunk
137
+ final_state = chunk
138
+ else:
139
+ # 非调试模式,直接调用(无中间结果)
140
+ final_state, processed_signal = ta.propagate(
141
+ company_name=ticker.strip(),
142
+ trade_date=analysis_date.strip()
143
+ )
144
+ all_outputs.append("(非调试模式,无中间步骤显示)\n\n")
145
+
146
+ # 处理最终结果
147
+ if final_state:
148
+ decision = final_state.get("final_trade_decision", "未获取到最终交易决策")
149
+ all_outputs.append(f"# 最终交易决策\n{decision}\n\n")
150
+
151
+ # 添加免责声明
152
+ disclaimer = "\n\n【免责声明】本结果仅用于研究目的,不构成任何财务、投资或交易建议。交易风险自负。"
153
+ final_result = f"# {ticker} 交易决策报告(分析日期:{analysis_date})\n\n" + "".join(all_outputs) + disclaimer
154
+
155
  end_time = time.time()
156
  logger.info(f"分析完成,耗时 {end_time - start_time:.2f} 秒")
157
 
 
 
 
 
 
158
  progress(1.0, desc="分析完成!")
159
  return final_result
160
 
 
170
  return error_msg
171
 
172
 
173
+
174
  # ---------------------- 3. 构建 Gradio 界面 ----------------------
175
  logger.info("开始构建 Gradio 界面...")
176
  with gr.Blocks(title="TradingAgents 金融交易决策工具") as demo: