feat: risk_guard读前端紧急指令并执行
- 每5秒检查/tmp/risk_guard_emergency.json - close_all: 触发全平熔断 - block_new: 禁止新开仓(warning状态) - resume: 恢复正常交易 - 读完立即删除文件防重复执行 - 记录操作人+时间
This commit is contained in:
parent
fe754cf628
commit
7e8f83fd5a
@ -390,6 +390,49 @@ def check_auto_resume():
|
|||||||
write_risk_state()
|
write_risk_state()
|
||||||
|
|
||||||
|
|
||||||
|
# ============ 前端紧急指令处理 ============
|
||||||
|
|
||||||
|
EMERGENCY_FILE = "/tmp/risk_guard_emergency.json"
|
||||||
|
|
||||||
|
async def check_emergency_commands(session, conn):
|
||||||
|
"""读取前端发的紧急操作指令并执行"""
|
||||||
|
try:
|
||||||
|
with open(EMERGENCY_FILE) as f:
|
||||||
|
cmd = json.load(f)
|
||||||
|
# 读完立即删除,防止重复执行
|
||||||
|
os.remove(EMERGENCY_FILE)
|
||||||
|
except FileNotFoundError:
|
||||||
|
return
|
||||||
|
except Exception:
|
||||||
|
return
|
||||||
|
|
||||||
|
action = cmd.get("action")
|
||||||
|
user = cmd.get("user", "unknown")
|
||||||
|
logger.info(f"📩 收到紧急指令: {action} (操作人: {user})")
|
||||||
|
|
||||||
|
if action == "close_all":
|
||||||
|
await trigger_circuit_break(session, conn, f"人工紧急全平 (操作人: {user})", "close_all")
|
||||||
|
|
||||||
|
elif action == "block_new":
|
||||||
|
risk_state.block_new_entries = True
|
||||||
|
risk_state.status = "warning"
|
||||||
|
risk_state.circuit_break_reason = f"人工禁止新开仓 (操作人: {user})"
|
||||||
|
write_risk_state()
|
||||||
|
logger.warning(f"🟡 人工禁止新开仓 (操作人: {user})")
|
||||||
|
|
||||||
|
elif action == "resume":
|
||||||
|
risk_state.status = "normal"
|
||||||
|
risk_state.block_new_entries = False
|
||||||
|
risk_state.reduce_only = False
|
||||||
|
risk_state.circuit_break_reason = None
|
||||||
|
risk_state.circuit_break_time = None
|
||||||
|
write_risk_state()
|
||||||
|
logger.info(f"✅ 人工恢复交易 (操作人: {user})")
|
||||||
|
|
||||||
|
else:
|
||||||
|
logger.warning(f"⚠ 未知紧急指令: {action}")
|
||||||
|
|
||||||
|
|
||||||
# ============ 主循环 ============
|
# ============ 主循环 ============
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
@ -411,6 +454,9 @@ async def main():
|
|||||||
# 0. 检查自动恢复
|
# 0. 检查自动恢复
|
||||||
check_auto_resume()
|
check_auto_resume()
|
||||||
|
|
||||||
|
# 0.5 检查前端紧急操作指令
|
||||||
|
await check_emergency_commands(session, conn)
|
||||||
|
|
||||||
# 1. 今日亏损检查
|
# 1. 今日亏损检查
|
||||||
realized_r, consecutive = check_daily_loss(conn)
|
realized_r, consecutive = check_daily_loss(conn)
|
||||||
unrealized_r = await check_unrealized_loss(session)
|
unrealized_r = await check_unrealized_loss(session)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user