fix: BSP检测用last_bi_id精确定位旧笔,替代confirmed[-2]索引

管线重算后笔列表可能变化,confirmed[-2]不一定是刚结束的笔。
改为用上一轮的last_bi_id在当前bi_list中精确查找,
找到后再检查其end_klc是否为BSP。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
jackyu66git
2026-05-26 13:35:20 +08:00
co-authored by Claude Opus 4.7
parent 743c5d342e
commit ae4c79c133
+15 -3
View File
@@ -127,14 +127,26 @@ class BSPMonitor:
if current_bi_id == st.last_bi_id:
return # 无新笔,跳过
# 保存旧笔 ID,用它在当前笔列表中定位刚结束的那笔
prev_bi_id = st.last_bi_id
st.last_bi_id = current_bi_id
bi_dir = "⬆️" if last_bi.dir == Chan_BI_DIR.UP else "⬇️"
logger.info(f"[{name}] 新笔确认 — #{len(confirmed)} "
f"{bi_dir} 高度: ${last_bi.height:.2f}")
# 7. 检查上一笔终点是否为 BSP
prev_bi = confirmed[-2]
bsp = engine.get_bsp_for_bi(prev_bi)
# 7. 用旧笔 ID 精确定位刚结束的笔,检查其终点是否为 BSP
prev_bi = None
for b in engine.bi_list:
if b.is_sure and _bi_id(b) == prev_bi_id:
prev_bi = b
break
if prev_bi:
bsp = engine.get_bsp_for_bi(prev_bi)
else:
bsp = None
if bsp:
key = f"{symbol}_{bsp.type}_{bsp.klc.end_time}"
msg = engine.format_bsp_detail(bsp, symbol)