1oscon commited on
Commit
4f897f3
·
verified ·
1 Parent(s): 6f9a91c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -8
app.py CHANGED
@@ -44,6 +44,8 @@ def _后台任务(合约: str, 周期: int, 参数: dict):
44
  """
45
  global 引擎实例
46
  try:
 
 
47
  from 插件_引擎.多策略引擎 import 多策略引擎
48
  from 插件_交易.策略_自适应 import 自适应策略
49
 
@@ -66,6 +68,13 @@ def _后台任务(合约: str, 周期: int, 参数: dict):
66
  _记录("引擎结束")
67
 
68
  loop.run_until_complete(主循环())
 
 
 
 
 
 
 
69
  except Exception as e:
70
  _记录(f"后台任务异常:{e}")
71
  with 状态锁:
@@ -117,6 +126,9 @@ def 停止模拟():
117
  """
118
  global 引擎实例
119
  if 引擎实例 is None:
 
 
 
120
  return "当前没有运行中的任务"
121
  try:
122
  引擎实例.停止()
@@ -133,7 +145,7 @@ def 获取状态():
133
  with 状态锁:
134
  # 从引擎里读净值/回撤(如果有)
135
  try:
136
- if 引擎实例 is not None and 引擎实例.交易所 is not None:
137
  # 交易所.净值 会在引擎每根收盘时更新;此处只是读
138
  nv = float(getattr(引擎实例.交易所, "净值", 1.0) or 1.0)
139
  dd = float(getattr(引擎实例.交易所, "回撤", 0.0) or 0.0)
@@ -163,18 +175,16 @@ with gr.Blocks(title="模拟实盘(OKX 公共WS + 多策略引擎)") as demo
163
  刷新按钮 = gr.Button("🔄 刷新状态")
164
 
165
  with gr.Column(scale=1):
166
- 状态显示 = gr.Textbox(label="运行状态", lines=1)
167
- 日志显示 = gr.Textbox(label="实时日志(最近120行)", lines=22)
168
 
169
  # 事件绑定
170
  启动按钮.click(fn=启动模拟, inputs=[合约输入, 周期选择, 参数输入], outputs=[状态显示, 日志显示])
171
  停止按钮.click(fn=停止模拟, outputs=状态显示)
172
  刷新按钮.click(fn=获取状态, outputs=[状态显示, 日志显示])
173
 
174
- # 页面加载时刷新一次
175
- demo.load(获取状态, outputs=[状态显示, 日志显示])
176
- # Gradio 4:用 Timer 每2秒刷新
177
- # 修改后的正确代码
178
- 状态显示.load(fn=获取状态, inputs=None, outputs=[状态显示, 日志显示], every_seconds=2)
179
  if __name__ == "__main__":
180
  demo.launch(server_name="0.0.0.0", server_port=7860)
 
44
  """
45
  global 引擎实例
46
  try:
47
+ # 注意:这里假设您的引擎代码位于 '插件_引擎' 和 '插件_交易' 模块中
48
+ # 在实际部署时,请确保这些模块可以被正确导入
49
  from 插件_引擎.多策略引擎 import 多策略引擎
50
  from 插件_交易.策略_自适应 import 自适应策略
51
 
 
68
  _记录("引擎结束")
69
 
70
  loop.run_until_complete(主循环())
71
+ except ImportError:
72
+ _记录("错误:未能导入 '多策略引擎' 或 '自适应策略'。这是一个演示界面,请确保后台引擎代码存在。")
73
+ # 模拟运行一段时间然后停止
74
+ time.sleep(10)
75
+ with 状态锁:
76
+ 运行状态["运行中"] = False
77
+ _记录("演示模式结束")
78
  except Exception as e:
79
  _记录(f"后台任务异常:{e}")
80
  with 状态锁:
 
126
  """
127
  global 引擎实例
128
  if 引擎实例 is None:
129
+ _记录("当前没有运行中的任务")
130
+ with 状态锁:
131
+ 运行状态["运行中"] = False # 强制更新状态
132
  return "当前没有运行中的任务"
133
  try:
134
  引擎实例.停止()
 
145
  with 状态锁:
146
  # 从引擎里读净值/回撤(如果有)
147
  try:
148
+ if 运行状态["运行中"] and 引擎实例 is not None and 引擎实例.交易所 is not None:
149
  # 交易所.净值 会在引擎每根收盘时更新;此处只是读
150
  nv = float(getattr(引擎实例.交易所, "净值", 1.0) or 1.0)
151
  dd = float(getattr(引擎实例.交易所, "回撤", 0.0) or 0.0)
 
175
  刷新按钮 = gr.Button("🔄 刷新状态")
176
 
177
  with gr.Column(scale=1):
178
+ 状态显示 = gr.Textbox(label="运行状态", lines=1, interactive=False)
179
+ 日志显示 = gr.Textbox(label="实时日志(最近120行)", lines=22, interactive=False)
180
 
181
  # 事件绑定
182
  启动按钮.click(fn=启动模拟, inputs=[合约输入, 周期选择, 参数输入], outputs=[状态显示, 日志显示])
183
  停止按钮.click(fn=停止模拟, outputs=状态显示)
184
  刷新按钮.click(fn=获取状态, outputs=[状态显示, 日志显示])
185
 
186
+ # 页面加载时运行一次,并在此后每 2 秒持续刷新
187
+ demo.load(fn=获取状态, outputs=[状态显示, 日志显示], every=2)
188
+
 
 
189
  if __name__ == "__main__":
190
  demo.launch(server_name="0.0.0.0", server_port=7860)