Update app.py
Browse files
app.py
CHANGED
|
@@ -122,7 +122,6 @@ def 启动模拟(合约: str, 周期: str, 参数json: str):
|
|
| 122 |
def 停止模拟():
|
| 123 |
"""
|
| 124 |
点击“停止模拟”时调用
|
| 125 |
-
说明:这里只设置引擎停止处理信号(不强制关闭WS)。
|
| 126 |
"""
|
| 127 |
global 引擎实例
|
| 128 |
if 引擎实例 is None:
|
|
@@ -145,8 +144,7 @@ def 获取状态():
|
|
| 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)
|
| 152 |
运行状态["净值"] = nv
|
|
@@ -183,8 +181,12 @@ with gr.Blocks(title="模拟实盘(OKX 公共WS + 多策略引擎)") as demo
|
|
| 183 |
停止按钮.click(fn=停止模拟, outputs=状态显示)
|
| 184 |
刷新按钮.click(fn=获取状态, outputs=[状态显示, 日志显示])
|
| 185 |
|
| 186 |
-
#
|
| 187 |
-
demo.load(fn=获取状态, outputs=[状态显示, 日志显示]
|
|
|
|
|
|
|
|
|
|
|
|
|
| 188 |
|
| 189 |
if __name__ == "__main__":
|
| 190 |
demo.launch(server_name="0.0.0.0", server_port=7860)
|
|
|
|
| 122 |
def 停止模拟():
|
| 123 |
"""
|
| 124 |
点击“停止模拟”时调用
|
|
|
|
| 125 |
"""
|
| 126 |
global 引擎实例
|
| 127 |
if 引擎实例 is None:
|
|
|
|
| 144 |
with 状态锁:
|
| 145 |
# 从引擎里读净值/回撤(如果有)
|
| 146 |
try:
|
| 147 |
+
if 运行状态["运行中"] and 引擎实例 is not None and hasattr(引擎实例, '交易所') and 引擎实例.交易所 is not None:
|
|
|
|
| 148 |
nv = float(getattr(引擎实例.交易所, "净值", 1.0) or 1.0)
|
| 149 |
dd = float(getattr(引擎实例.交易所, "回撤", 0.0) or 0.0)
|
| 150 |
运行状态["净值"] = nv
|
|
|
|
| 181 |
停止按钮.click(fn=停止模拟, outputs=状态显示)
|
| 182 |
刷新按钮.click(fn=获取状态, outputs=[状态显示, 日志显示])
|
| 183 |
|
| 184 |
+
# 页面首次加载时,运行一次获取状态函数
|
| 185 |
+
demo.load(fn=获取状态, outputs=[状态显示, 日志显示])
|
| 186 |
+
|
| 187 |
+
# 创建一个隐藏的定时器,每 2 秒触发一次 tick 事件
|
| 188 |
+
timer = gr.Timer(2)
|
| 189 |
+
timer.tick(fn=获取状态, outputs=[状态显示, 日志显示])
|
| 190 |
|
| 191 |
if __name__ == "__main__":
|
| 192 |
demo.launch(server_name="0.0.0.0", server_port=7860)
|