refactor: BSP推送提取公共函数 + 清理

- _push_bsp() 提取重复的key构造+推送逻辑
- bsp.klc None防护
- getattr替代hasattr+属性访问
- 修正首轮日志(不再写"不推送")

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
jackyu66git
2026-05-26 14:05:20 +08:00
co-authored by Claude Opus 4.7
parent a84a80cb62
commit 42296ef971
2 changed files with 18 additions and 13 deletions
+16 -11
View File
@@ -48,6 +48,19 @@ def _bi_id(bi) -> Optional[tuple]:
return (bi.start_klc.start_time,)
def _push_bsp(engine: ChanEngine, bsp, symbol: str, name: str) -> bool:
"""推送 BSP 到 Telegram(带去重)。"""
if bsp.klc is None:
return False
key = f"{symbol}_{bsp.type}_{bsp.klc.end_time}"
msg = engine.format_bsp_detail(bsp, symbol)
msg = _escape_html(msg)
if send_bsp_alert(msg, bsp_key=key):
logger.info(f"[{name}] ✅ BSP: {key}")
return True
return False
@dataclass
class SymbolState:
symbol: str
@@ -120,11 +133,7 @@ class BSPMonitor:
bsp = engine.get_bsp_for_bi(last_confirmed)
if bsp:
key = f"{symbol}_{bsp.type}_{bsp.klc.end_time}"
msg = engine.format_bsp_detail(bsp, symbol)
msg = _escape_html(msg)
if send_bsp_alert(msg, bsp_key=key):
logger.info(f"[{name}] ✅ BSP: {key}")
_push_bsp(engine, bsp, symbol, name)
logger.info(
f"[{name}] 首次完成 — {len(confirmed)} 笔, "
@@ -145,11 +154,7 @@ class BSPMonitor:
# 7. 检查刚被分型确认这笔的终点是否为 BSP
bsp = engine.get_bsp_for_bi(last_confirmed)
if bsp:
key = f"{symbol}_{bsp.type}_{bsp.klc.end_time}"
msg = engine.format_bsp_detail(bsp, symbol)
msg = _escape_html(msg)
if send_bsp_alert(msg, bsp_key=key):
logger.info(f"[{name}] ✅ BSP: {key}")
_push_bsp(engine, bsp, symbol, name)
# 8. 中枢特征更新
pivot_state = st.pivot_monitor.update(engine.bi_zs_list)
@@ -207,7 +212,7 @@ class BSPMonitor:
logger.info(f"Telegram: {'已配置' if BOT_TOKEN and CHAT_ID else '⚠️ 未配置'}")
logger.info("=" * 50)
logger.info("首次运行(初始化,不推送...")
logger.info("首次运行(初始化)...")
await self.tick()
while True: