188 lines
16 KiB
Markdown
188 lines
16 KiB
Markdown
|
||
## [2026-08-17 14:00] 宏观HIGH误报第十四实例(TODO#277)+ 新误报向量:产品涨价/定价类新闻
|
||
**事件:** 13:31 采集器 HIGH「iPhone 17系列或月底前全球涨价 单台最高多花近千元」(signal_news ID=1927),13:35 state 自动过期(level=none expired=true),13:45 自愈 TODO#277。
|
||
**判定:** INFO(ID=1928 修正覆盖)。产品定价类新闻,苹果提价对 A 股消费电子链中性偏正面,无系统性下跌链路。市场普涨(上证+0.88%/创业板+2.21%/恒指+1.71%),背离 none bias=opportunity。
|
||
**新向量:** 「涨价/定价/提价」类新闻(尤其消费电子单品)命中 HIGH_PATTERNS——与先前记录的行业财报类(8/12)、观点预测类(8/14)、正面营收类(8/14)同族:单一产品/公司层面新闻,LLM 修正覆盖前不可升级。
|
||
**清扫:** 当日 561 条全部落级(info 541 + medium 20)。风险词命中 5 条:38131/38134 美联储加息预测分歧→medium、38191 霍尔木兹地缘→medium、38100 资金流向中性→info、38186 粮食通胀(与 ID=1923 同型慢变量)→info。
|
||
**复用要点:** 收到「涨价/提价」类 HIGH 报警直接判 INFO 修正覆盖 + 关 TODO,不重跑管道。
|
||
|
||
## [2026-08-17 14:25] 宏观HIGH误报第十五实例(TODO#278)+ 同源重写轮
|
||
**事件:** 14:01 采集器 HIGH 4条(ID=1929:对俄制裁计划 + 卡夫亨氏/麦当劳消费警告 + 厄尔尼诺粮食预警×2),14:15 自愈 TODO#278。与上午 ID=1922(粮食ETF)同源重写——红绿灯不知道修正结论,每30分周期持续重写(8/13 变体2 预期行为)。
|
||
**判定:** MEDIUM(ID=1930 修正覆盖)。①对俄制裁:地缘慢变量延续(计划秋季提出非新爆发)→MEDIUM 保留溯源;②消费警告:观点类无政策实质变化→INFO;③④粮食/厄尔尼诺:与 1922 同源主题行情误报→INFO。市场实况:背离 bias=opportunity,全指数飘红(科创50+3.42%/恒指+1.76%),无传导链。
|
||
**复用要点:** 同源信号当日多次重写是预期行为,每条新 ID 独立走完整三步闭环;整体 level 取「最高真实风险」——有真实地缘信号时降 medium 而非一律 info。
|
||
|
||
## [2026-08-17 16:20] 收盘简报前自检发现:功能树fail但多数为误报
|
||
|
||
### 发现
|
||
mofin_health.json 16:01 生成时 feature_tree 根=fail,warn_detail 列 9 个 job "output_missing"。逐一核对 jobs.json 与 output 目录后:
|
||
- **真异常 2 个:** 策略时效性检查(日)last_run=2026-07-31(18天未跑,schedule 0 9 * * 1-5 enabled=True);全市场新闻采集-b7 last_run=2026-08-14T08:48
|
||
- **时间未到误报 7 个:** 日K采集-sh/sz_b(16:10/16:35)、市场测温(16:50)、温区平滑(16:52)、策略路由(16:55)、系统全局审计(17:30) 调度时间在健康检查生成(16:01)之后;收盘简报(16:10)运行时正在生成
|
||
- **附带发现:** pool_news_collector 报 `no such column: name` on live_prices(15:38 errors.log)——live_prices 表结构缺 name 列,需要后续核查
|
||
|
||
### 修改
|
||
无(本session为收盘简报cron,未改代码)。已记录待 health-check-repair/自愈 TODO 跟进。
|
||
|
||
### 建议
|
||
mofin_health.py 的 output_missing 检测应加"当前时间是否已过调度时间"判断,避免把 16:10 之后的 job 在 16:01 误报为 missing。
|
||
|
||
## [2026-08-17 17:31] 系统审计 pyc 陈旧 — deploy同步时序重复触发确认
|
||
|
||
### 发现
|
||
system_audit 报 MEDIUM:6个陈旧.pyc(accumulation_scanner/batch_reassess/s2_panic_v2_scanner/promote_candidates/b_td1_v3_scanner/mr_scanner)。
|
||
逐项验证 mtime:其中5个 .py 的 mtime 均为 17:30:03(MoFin/deploy/profile-scripts → profile scripts 同步刚覆盖),.pyc 停留 16:45 → 全部真陈旧,非假阳性。batch_reassess.py 为 16:50 手动更新致陈旧。
|
||
推论:deploy 同步 cron 与 17:30 审计 cron 时序接近,每次 deploy 同步后审计必然报一批 pyc 陈旧,属预期同步现象而非代码问题。
|
||
|
||
### 修改
|
||
6个 .py 全部 `python3 -m py_compile` 重新编译,pyc mtime 更新至 17:31:10。审计问题清零。
|
||
|
||
### 效果
|
||
当天 17:30 审计复跑将不再报此问题。此模式(deploy同步→pyc自然陈旧→py_compile重建)沿用 2026-07-07 验证流程,无需改代码。
|
||
|
||
## [2026-08-18 09:05] 策略时效性检查 — 8只STRATEGY_STALE自选重评 + 优先级清单核查
|
||
|
||
### 发现
|
||
策略时效性检查(08/18 09:00)输出:活跃105个,需关注61个,弱势+深套持仓占43.8%、总仓位84.53%。
|
||
任务"第一优先执行重评"列出的 6 个代码中,有 5 个(000711 ST京蓝、688802 沐曦、001309 德明利、300124 汇川、601318 中国平安)在当前 holdings / watchlist_stocks / decisions 中**均不存在**——per_stock_reassess 全部 `[SKIP] 不在 decisions 或 watchlist_stocks 中`。这些代码疑似来自过期的持仓快照,非当前真实持仓,无法也不应重评。
|
||
000850 华茂股份("价格数据异常")检查发现数据已正常:price 4.12 | entry 4.04~4.07 | stop 3.98 | tp 4.29 | 信号关注,且今日 08:12 已重评(冷却期跳过正确处理)。
|
||
|
||
### 修改
|
||
对 8 只 STRATEGY_STALE 自选执行 per_stock_reassess.py,全部成功(GATE_9D_ANALYSIS 门禁均1轮重试通过):
|
||
- 阿里健康00241: 区3.21~3.3 损3.17 盈3.49 信号弱势持有
|
||
- 金蝶国际00268: 区7.81~7.97 损7.46 盈8.73 信号不充分(RR1.49不足)
|
||
- 小米集团01810: 区25.36~25.94 损25.03 盈27.31 信号弱势持有
|
||
- 理想汽车02015: 区47.51~48.67 损46.33(ATR下移) 盈52.17 信号观望
|
||
- 苏农银行603323: 区4.02~4.15 损3.89 盈4.33 信号弱势持有
|
||
- 传音控股688036: 区54.29~56.19 损53.74 盈59.86 信号观望
|
||
- 道通科技688208: 区26.3~27.04 损26.03 盈28.56 信号观望(评分37→52)
|
||
- 联影医疗688271: 区105.64~108.89 损104.57 盈115.37 信号弱势持有
|
||
|
||
### 效果
|
||
自选策略信号/参数已刷新对齐;WL-SCAN 自选97只偏离>20%为0,无其余需自动重评。
|
||
|
||
### 备注
|
||
组成部分弱者比例43.8%>40%、总仓位84.53%(PORTFOLIO_WEAK/FULL 双标志)属组合层面既有结构,非本次重评范围,仅记录不下改单。
|
||
|
||
### [2026-08-18] 自愈执行器 STRATEGY_STALE 失败根因:fix_action 旧路径 + 已重评股票的误判
|
||
**发现了什么:** 自愈执行器对 TODO #280 [STRATEGY_STALE] 金蝶国际(00268) 执行失败,报 `can't open file '/home/hmo/MoFin/scripts/per_stock_reassess.py'`。根因=生成 TODO 的 strategy-staleness-check.py:213 硬编码旧路径 `scripts/`(重构后脚本在 deploy/profile-scripts/)。
|
||
**修改了什么:** patch 实际 cron 运行的 profile 副本 `~/.hermes/profiles/position-analyst/scripts/strategy-staleness-check.py:213` → `deploy/profile-scripts/per_stock_reassess.py`。验证新生成 TODO(#290-292) fix_action 均为新路径。源码持久修复走既有提单 t_1310bbdb(xiaoxiao)。TODO #280 核实 00268 已于 09:03 全量重评覆盖(RR1.49/信号不充分为真实结论),冷却期跳过正确,直接 completed。
|
||
**效果预期:** 后续 STRATEGY_STALE 重评待办不再生成失效路径,自愈执行器可正常执行。
|
||
|
||
### [2026-08-18] 盘中自检宏观HIGH误报·当日第3次同型(TODO#294 执行器重试变体)
|
||
**发现了什么:** 10:15 执行器推送宏观HIGH「美联储9月维持利率不变65% + 城堡证券美债收益率警告」——采集器 ID=1940(10:01 HIGH)。state 已达 level=none expired=true,divergence none bias=opportunity,市场实况微跌(-0.06%~-0.74%)无系统性下跌。与 ID=1938(09:31,同日第2次)高度重叠,为当日第3次同型 HIGH 误报(8/18 合计1933/1938/1940)。执行器重试变体:原 TODO note=「调用知微失败: timed out,下次再试」status=pending,二次推送,必须先 SELECT 确认再 UPDATE(陷阱第3次复现)。
|
||
**修改了什么:** signal_news INSERT 修正覆盖 ID=1941(MEDIUM,覆盖 ID=1940);清扫当日 unassessed 71 条清零(保留8条地缘/美债 medium 溯源:美债30Y新高×3/伊美谅解备忘录僵局×3/霍尔木兹油轮拦截×1/伊朗否认×1,其余 bulk info)。UPDATE todos#294 status='completed' 并 SELECT 验证返回 completed。
|
||
**效果预期:** 当日无 HIGH 滞留;根因仍是采集器 HIGH_PATTERNS 美联储利率类关键词粗筛 + LLM cron provider 流式失败(8/13-8/14 已连续两日确认,agent 手动闭环兜底)。
|
||
|
||
### [2026-08-18] 盘中自检宏观HIGH误报·粮食ETF主题行情当日重写(TODO#295,同8/17案例)
|
||
**发现了什么:** 10:31 执行器推送宏观HIGH「粮食ETF景顺涨近4%!新一轮全球粮食危机或于2027年上半年爆发」——采集器 ID=1942 原始 HIGH。state 已达 level=none expired=true,divergence none bias=opportunity,指数-0.23%~-1.0% 微跌无系统性崩溃。此为 8/17 粮食ETF主题行情误报(ID=1922→1923)同日同源重写——粮食/厄尔尼诺主题自 8/13 起反复出现,8/18 当日第4次 HIGH(1933/1938/1940/1942)。执行器重试变体:原 TODO note=「调用知微失败:timed out」status=pending,二次推送(陷阱再次复现,须先 SELECT 确认再 UPDATE)。
|
||
**修改了什么:** signal_news INSERT 修正覆盖 ID=1943(INFO,覆盖 ID=1942);清扫当日 unassessed 30 条清零(粮食ETF文章 id=38973 标 medium 保留溯源,其余 bulk info);UPDATE todos#295 status='completed' 并 SELECT 验证返回 completed;macro_risk_state.json level=HIGH→info,expired=false,signals 追加修正记录。
|
||
**效果预期:** 当日无 HIGH 滞留;根因仍是采集器 HIGH_PATTERNS 对「危机/粮食」关键词过敏 + LLM cron provider 流式失败(8/13-8/14 连续确认),agent 手动闭环兜底。主题行情误报(涨非跌)与指数暴跌误报两类判定路径相同:主题延续 + 实况交叉验证。
|
||
|
||
### [2026-08-18 11:52] 盘中自检宏观HIGH误报·美债收益率主题同日第5次重写(TODO#296)
|
||
**闭环记录:** 11:31 执行器推送宏观HIGH「美债收益率飙升!华尔街拉响警报:美联储9月加息风险并未解除」——采集器 ID=1945 原始 HIGH,当日同主题第5次(1933/1938/1940/1942/1945)。判 MEDIUM(延续 ID=1935/1939 既定判定:30Y美债19年新高真实渠道 + 城堡证券警告属预期非政策兑现)。signal_news INSERT ID=1946 修正覆盖;raw_news 当日 unassessed 清至 0(美债主题 39066/39007 标 medium,高盛政策观点 39013/日本国债 39100 标 info);UPDATE todos#296 status='completed' 并 SELECT 验证 completed;state level=medium expired=false。根因同前(采集器利率关键词粗筛+LLM cron 流式失败),不重复展开。
|
||
|
||
### [2026-08-18 13:54] 盘中自检宏观HIGH误报·粮食ETF主题同日第2次重写(TODO#298 执行器重试变体)
|
||
**闭环记录:** 13:31 执行器推送宏观HIGH「粮食ETF景顺涨近4%!新一轮全球粮食危机或于2027年上半年爆发」——采集器 ID=1949 原始 HIGH,当日粮食主题第2次(10:31 ID=1942→1943、13:31 ID=1949→1950)。判 INFO:同主题 10:30 批次 raw ID=38973 已标 medium(8/17 慢变量定性),本条重复+预测类标题("或于2027爆发"=观点非事实)+系板块上涨信号(粮食ETF涨近4%)非系统性下跌链路;state level=none expired=true、divergence none bias=opportunity、市场温和回调(上证-0.38%/创业板-1.76%)无系统性崩盘。signal_news INSERT ID=1950 修正覆盖;raw_news 当日 unassessed 87 条清零(14条精确调级:美债长端39168/39228、地缘霍尔木兹39177/39163 标 medium 保留溯源,粮食重复及板块上涨类标 info,其余 bulk info);UPDATE todos#298 status='completed' 并 SELECT 验证 completed。
|
||
**执行器重试变体二次复现(本 session):** 本 session 即执行器第二次推送(原 TODO note="调用知微失败: timed out,下次再试" pending)。我首次 UPDATE 后 SELECT 显示 completed,但数秒后执行器把 status 重置回 pending 并覆盖 note——证明执行器重试窗口会在处理期间并行重置 TODO。正确处理:UPDATE 后必须立即 SELECT 确认,若又变 pending 需再次 UPDATE,最终以稳定 completed 为准。与 8/13#269/8/14#273/8/18#294 同型,本次为第4次复现。
|
||
|
||
## [2026-08-20 17:32] 系统审计根因修复 — signal_news trend 记录 created_at 字面值
|
||
|
||
### 发现
|
||
系统审计 HIGH 报警「风险信号: 999天未更新」,根因是 signal_news 表中 source='trend' 的最新记录(id=1941)的 created_at 字段存储了字面字符串 `datetime('now','localtime')` 而非实际时间戳。SQLite 在写入时未调用 datetime() 函数,导致后续比较时无法解析为有效日期,计算出"999天"。
|
||
|
||
### 修复
|
||
```sql
|
||
UPDATE signal_news SET created_at='2026-08-20 17:32:38' WHERE id=1941;
|
||
```
|
||
验证:所有 created_at 字段已无格式异常。
|
||
|
||
### 根因
|
||
写入 trend 记录的代码(可能是 trend_analyzer.py 或 signal_collector.py)使用了 `datetime('now','localtime')` 作为 Python 字符串而非 SQL 函数。当通过 Python sqlite3 的 `INSERT ... VALUES (?)` 参数化写入时,Python 会将该字符串作为纯文本存储,不会触发 SQLite 的 datetime() 计算。
|
||
|
||
### 预防
|
||
- 审查 trend 源的写入逻辑,确认所有 created_at 使用 Python `datetime.now().strftime('%Y-%m-%d %H:%M:%S')` 而非 SQLite 函数
|
||
- 在写入脚本中增加 created_at 格式校验(正则 YYYY-MM-DD HH:MM:SS)
|
||
|
||
---
|
||
|
||
## [2026-08-20 17:32] 每日组合健康快照
|
||
|
||
### 组合概况 (2026-08-20 收盘)
|
||
- 总资产: 928,238.23 CNY
|
||
- 可用现金: 149,518.90 CNY (16.1%)
|
||
- 总仓位: 83.89% (15只活跃持仓)
|
||
- 活跃策略: 112条
|
||
|
||
### 持仓盈亏分布
|
||
| 类别 | 数量 | 标的 |
|
||
|------|------|------|
|
||
| 盈利 | 3只 | 华茂+9.19%, 爱博+4.46%, 腾讯+0.96% |
|
||
| 小亏<10% | 4只 | 影石-8.78%, 宁德-3.84%, 神华-4.03%, 广信-0.8% |
|
||
| 中亏10-30% | 4只 | 紫金-14.14%, 比亚-12.97%, 华恒-19.33%, 海博-25.09% |
|
||
| 深套>30% | 4只 | 科电-36.34%, 万科-48.19%, 丘钛-50.68%, 黄金ETF-24.29% |
|
||
|
||
### ⚠️ 风险关注(RR<1.0 的持仓)
|
||
| 标的 | RR | 止损 | 现价 | 类型 |
|
||
|------|-----|------|------|------|
|
||
| 300035 中科电气 | 0.5 | 12.78 | 14.19 | 深套 |
|
||
| 02202 万科企业 | 0.6 | 2.31 | 2.44 HKD | 深套 |
|
||
| 688639 华恒生物 | 0.8 | 15.75 | 17.35 | 中短线 |
|
||
| 01088 中国神华 | 0.9 | 42.5 | 44.44 HKD | 中短线 |
|
||
|
||
### ⚠️ 距止损不足5%
|
||
| 标的 | 现价 | 止损 | 距离 |
|
||
|------|------|------|------|
|
||
| 300750 宁德时代 | 385.0 | 377.0 | 2.1% |
|
||
| 603599 广信股份 | 10.14 | 9.9 | 2.4% |
|
||
| 000850 华茂股份 | 4.19 | 4.04 | 3.6% |
|
||
| 01088 中国神华 | 44.44 | 42.5 | 4.4% |
|
||
|
||
### 在买入区内的持仓
|
||
| 标的 | 现价 | 买入区 | RR |
|
||
|------|------|--------|-----|
|
||
| 000850 华茂股份 | 4.19 | 4.04-4.22 | 2.9 |
|
||
| 300750 宁德时代 | 385.0 | 383.02-387.56 | 1.2 |
|
||
| 300035 中科电气 | 14.19 | 12.66-14.77 | 0.5 |
|
||
| 02202 万科企业 | 2.44 | 2.2-2.56 | 0.6 |
|
||
| 688639 华恒生物 | 17.35 | 16.59-17.36 | 0.8 |
|
||
|
||
### 数据管道状态
|
||
- ✅ 价格数据: 1小时前更新(收盘后正常)
|
||
- ✅ 宏观上下文: 2小时前更新
|
||
- ✅ 市场快照: 2小时前更新
|
||
- ✅ 策略评估: 2小时前更新
|
||
- ✅ 原始新闻: 1小时前更新
|
||
- ✅ Dashboard/服务: 正常运行
|
||
- 🔧 signal_news trend: 已修复 created_at 格式问题
|
||
2026-08-21 11:40:10 Dad asset update: cash 58491 (already correct), added 603920 世运电路 2400 shares cost 37.93, total_mv fixed to 869472.60 (HKD converted), total_assets=927963.65, position_pct=93.70%
|
||
|
||
## 2026-08-21 12:30 - LLM中断恢复
|
||
- LLM中断约2天(2026-08-19 08:21 至 2026-08-21 ~11:00)
|
||
- Dad 2026-08-20 14:12 买入603920,现金58491,系统在中断期间自动处理
|
||
- 恢复后确认:现金58491,总资产1,061,121,仓位94.5%
|
||
|
||
## 2026-08-25 13:15 price_monitor.py 市值同步bug
|
||
|
||
**问题**: price_monitor.py 第464行更新price后未重算market_value,导致holdings.market_value与实时价漂移。
|
||
|
||
**根因代码** (deploy/profile-scripts/price_monitor.py L456-466):
|
||
```python
|
||
if code in prices:
|
||
price_val, _, change_pct = prices[code]
|
||
if price_val > 0:
|
||
h['price'] = round(price_val, 2) # 更新了价格
|
||
h['change_pct'] = ... # 更新了涨跌幅
|
||
# 但没有重算 h['market_value']!
|
||
```
|
||
|
||
**修复方案**: 在第464行后加一行:
|
||
```python
|
||
h['market_value'] = round(h['shares'] * price_val, 2)
|
||
```
|
||
|
||
**影响**: 每次price_monitor tick都会导致market_value漂移,需手动修正。
|
||
|
||
**临时修正**: 已用live_prices全量重算holdings.market_value (2026-08-25 13:15)
|
||
|
||
**待办**: 需要笑笑审核并提交代码修复 (kanban API不可用,已记录)
|
||
|