fix: reconcile缩进修复(SIGNAL_JSON优先段的fallback块)
This commit is contained in:
@@ -1202,17 +1202,31 @@ def reconcile_signal_from_analysis(conn, code: str) -> str:
|
|||||||
return ""
|
return ""
|
||||||
fa, old_sig = row[0] or "", row[1] or ""
|
fa, old_sig = row[0] or "", row[1] or ""
|
||||||
verdict = ""
|
verdict = ""
|
||||||
for line in fa.split("\n"):
|
# ── 2026-08-25 机器可读结论优先(SIGNAL_JSON 行存在则直接用,散文匹配降级为兜底)──
|
||||||
if "【综合结论】" in line:
|
_mj = re.search(r'^SIGNAL_JSON:\s*(\{.*\})\s*$', fa, re.M)
|
||||||
# 2026-08-25 开头匹配(601866教训:"关注(条件性买入机会)"被顺序扫描误抓"买入")
|
if _mj:
|
||||||
# 综合结论词的规范位置=【综合结论】之后紧跟的第一个词
|
try:
|
||||||
tail = line.split("【综合结论】", 1)[1].strip()
|
import json as _js2
|
||||||
# 长词在前防前缀误抓(弱势持有>持有, 可买入/可加仓>买入)
|
_sj = _js2.loads(_mj.group(1))
|
||||||
for s in ("可买入", "可加仓", "弱势持有", "买入", "卖出", "止盈", "关注", "观望", "持有"):
|
verdict = _sj.get("signal", "") or ""
|
||||||
if tail.startswith(s):
|
# LLM 自己标注 actionable=false 的动作信号 → 直接降级(不再依赖否定词表)
|
||||||
verdict = s
|
if verdict in ("买入", "可买入", "可加仓") and _sj.get("actionable") is False:
|
||||||
break
|
verdict = "关注"
|
||||||
break
|
print(f" [RECONCILE] {code} SIGNAL_JSON actionable=false,信号降级为关注", flush=True)
|
||||||
|
except Exception:
|
||||||
|
verdict = ""
|
||||||
|
if not verdict:
|
||||||
|
for line in fa.split("\n"):
|
||||||
|
if "【综合结论】" in line:
|
||||||
|
# 2026-08-25 开头匹配(601866教训:"关注(条件性买入机会)"被顺序扫描误抓"买入")
|
||||||
|
# 综合结论词的规范位置=【综合结论】之后紧跟的第一个词
|
||||||
|
tail = line.split("【综合结论】", 1)[1].strip()
|
||||||
|
# 长词在前防前缀误抓(弱势持有>持有, 可买入/可加仓>买入)
|
||||||
|
for s in ("可买入", "可加仓", "弱势持有", "买入", "卖出", "止盈", "关注", "观望", "持有"):
|
||||||
|
if tail.startswith(s):
|
||||||
|
verdict = s
|
||||||
|
break
|
||||||
|
break
|
||||||
if verdict:
|
if verdict:
|
||||||
new_sig = verdict
|
new_sig = verdict
|
||||||
# ── 矛盾降级(2026-07-24 老爸:688660综合结论=买入但操作建议说"继续空仓观望暂不执行")──
|
# ── 矛盾降级(2026-07-24 老爸:688660综合结论=买入但操作建议说"继续空仓观望暂不执行")──
|
||||||
|
|||||||
Reference in New Issue
Block a user