Update app.py
Browse files
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(
|
| 176 |
-
|
| 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)
|