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:
co-authored by
Claude Opus 4.7
parent
a84a80cb62
commit
42296ef971
+2
-2
@@ -27,7 +27,7 @@ class ChanPivotMonitor:
|
||||
self._current_bi_count: int = 0
|
||||
self._current_is_sure: bool = False
|
||||
self._current_state: Optional[dict] = None
|
||||
self._duration_added_for_zs: set = set() # 已加入窗口的中枢 ID
|
||||
self._duration_added_for_zs: set = set() # 已加入窗口的中枢 ID(上限 200)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Public API
|
||||
@@ -87,7 +87,7 @@ class ChanPivotMonitor:
|
||||
"gg": round(zs.gg, 6),
|
||||
"dd": round(zs.dd, 6),
|
||||
**features,
|
||||
"start_time": str(zs.start_time) if hasattr(zs, "start_time") and zs.start_time else None,
|
||||
"start_time": str(t) if (t := getattr(zs, "start_time", None)) else None,
|
||||
}
|
||||
|
||||
# 中枢刚变为已确认时,将其 duration 加入滚动窗口
|
||||
|
||||
+16
-11
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user