diff --git a/docs/strategy-recommendation-spec.md b/docs/strategy-recommendation-spec.md new file mode 100644 index 00000000..10c56792 --- /dev/null +++ b/docs/strategy-recommendation-spec.md @@ -0,0 +1,70 @@ +# 策略推荐规范(2026-08-17 老莫定稿) + +> 目的:所有推送给老爸的操作建议,必须**带上所依据的策略**,并根据策略描述推荐理由。 +> 不可追溯的推荐一律不采信(教训:广信股份/博力威 2026-08-17 两起)。 + +--- + +## 一、为什么必须有依据(教训) + +### 案例1:博力威(688345) 2026-08-17 10:36 +- 知微推"建仓1手,止损56.02/止盈65.65/RR=2.72"——**但这是 strategy_history 的旧重评快照** +- 实际当前策略(holding_strategies):**信号=信号不充分、止损55.78、止盈65.54、买入区56.99~59.31、操作=空仓关注** +- 三处硬伤:①过期数据 ②RR算错(按现价57.88实际是4.18不是2.72)③与"信号不充分"直接矛盾 +- **结论:不采信** + +### 案例2:广信股份(603599) 2026-08-17 10:25 +- 知微说"跌破9.88清仓"——**9.88是买入区下沿,不是止损**(止损是9.8) +- 且是引用08:35重评结论,未注明依据来源 +- **结论:不采信** + +## 二、规则(推荐必须遵守) + +### 1. 每条推荐必须引用当前策略快照 +推送操作建议时,必须包含: +- **策略版本**(如 version=1) +- **重评时间**(reassessed_at / updated_at) +- **当前信号**(timing_signal:买入/卖出/持有/信号不充分) +- **止损/止盈/买入区**(精确数值,不凭记忆) +- **操作建议原文**(action) + +数据源:`holding_strategies` 表当前 active 记录(SSOT)。 +**禁止**从 strategy_history 旧快照或 LLM 记忆引用。 + +### 2. 信号不充分 = 不给操作建议 +- "信号不充分/观望/等信号/暂不买入" → 不是操作,**不推送** +- 候选股(非持仓)利好/利空新闻 → **不推送**(除非有明确"建议买入"信号) + +### 3. 触发新重评再推 +持仓股触发操作区间(破止损/进止盈区/基本面重大变化)→ +**先触发盘中重评(reassess_with_context)→ 重评结论维持 → 才按新重评推送**。 +不触发重评就直接推旧结论 = 假警报。 + +### 4. 逻辑自洽(普世真理) +- 重评结论"持有" → 止损放结构支撑下方,不紧贴现价(避免正常回调触发) +- 重评结论"卖出/止盈" → 止损可紧贴(执行风控) +- 推送的操作建议必须与引用策略的信号一致,不得矛盾 + +## 三、系统实现(2026-08-17 已落地) + +| 组件 | 改动 | +|---|---| +| `pool_news_collector.py` | 采集输出附**当前策略快照**(每只池子股票:版本/重评/止损/止盈/信号/操作),知微执行时可见真实策略 | +| `price_monitor.py` | 破止损推送:**重评后带完整操作原因 + 逻辑自洽**(重评持有则不推卖出,止损更新到重评值) | +| cron `pool_news_collector_30min` prompt | 写入推送门槛:实质操作才推、候选股不推、信号不充分不推、持仓股精确引用止损/止盈 | + +## 四、知微执行指引 + +执行池子新闻/个股新闻 cron 时: +1. 先读 Script Output 中的**【当前策略快照】**段 +2. 只对"信号=买入/卖出/持有且触发操作区"的股票给操作建议 +3. 推送格式: + ``` + ⚠️/✅ 名称(代码) 现价X | 依据策略: version=N(重评时间) | 信号=X + 止损S 止盈T 买入区L~H | RR=X.X | 操作: [引用action原文] + ``` +4. 信号不充分/观望 → [SILENT] 或只报健康度,不列个股 + +--- + +*文档位置:docs/strategy-recommendation-spec.md | 2026-08-17*