feat: 信号新鲜度保护 — 超过2秒弃仓

- execute_entry最前面检查signal_age = now - signal_ts
- >2000ms直接return None,不开仓
- 写warn级别event到live_events(含age_ms和score)
- 正常NOTIFY链路<100ms,超2秒说明有异常
This commit is contained in:
root 2026-03-02 10:26:22 +00:00
parent d7788d3766
commit 22d06efafe

View File

@ -263,7 +263,17 @@ async def execute_entry(session: aiohttp.ClientSession, signal: dict, db_conn):
t_signal = signal_ts # 信号时间戳(ms)
# 0. 检查风控状态读risk_guard写的状态文件
# 0. 信号新鲜度检查超过2秒弃仓
SIGNAL_MAX_AGE_MS = 2000
signal_age_ms = time.time() * 1000 - t_signal
if signal_age_ms > SIGNAL_MAX_AGE_MS:
logger.warning(f"[{symbol}] ❌ 信号过期: {signal_age_ms:.0f}ms > {SIGNAL_MAX_AGE_MS}ms弃仓")
_log_event(db_conn, "warn", "trade",
f"信号过期弃仓 {direction} {symbol} | age={signal_age_ms:.0f}ms | score={score}",
symbol, {"signal_age_ms": round(signal_age_ms), "score": score})
return None
# 0.5 检查风控状态读risk_guard写的状态文件
try:
with open("/tmp/risk_guard_state.json") as f:
risk_state = json.load(f)