硬性策略质量门禁 validate_strategy()
新增 STRATEGY_QUALITY_GATES 检查清单(9条红线): CRITICAL: 止损/止盈存在+>0, 买入区下沿<上沿 HIGH: 止损≤买入区, 买入推荐含RR≥1.5, 港股标currency=HKD MEDIUM: signal短词, tech_snapshot含技术位 enforce_strategy_quality() 插在写入链的两处: 1. reassess_with_context() return前 → 单只重评必过 2. regenerate_all() for d in decisions: 写DB前 → 批量重评必过 不过的:status=review_needed, signal降级→信号不充分 不会写进DB/JSON,除非修复了CRITICAL问题
This commit is contained in:
@@ -1,5 +1,22 @@
|
||||
记录知微对MoFin系统的缺陷修复和知识萃取项。
|
||||
|
||||
## 2026-07-02 11:30 macro_context_collector.py Pattern 9 百分比阈值修复 + 跨句涨幅匹配修复
|
||||
|
||||
**发现了什么:** 自愈执行器报告false positive——"中概领涨"被标记为HIGH风险。追踪发现Pattern 9 `指数[^。]*?(?:跌幅|下跌)[^。]*?[2-9]%`有两个Bug:
|
||||
1. 小数阈值Bug: `[2-9]%`在"0.3%"中提取"3%"匹配,误将<2%跌幅标为HIGH
|
||||
2. 跨句匹配Bug: "指数集体下跌的背景下...中概收涨近3%"中,`[^。]*?`跨过整个句子把"下跌"和"3%"连起来,但"下跌"是指美股下跌,"3%"是指中概收涨——两个不同语境
|
||||
|
||||
**修改了什么:**
|
||||
- 文件: `/home/hmo/MoFin/scripts/macro_context_collector.py`
|
||||
- Pattern 9: `指数[^。]*?(?:跌幅|下跌)[^。]*?[2-9]%` →
|
||||
`指数[^。]*?(?:跌幅[^。]{0,20}(?:扩大至|达|至|超|为|逾)[^。]*?(?<![0-9.])(?:[2-9]|[1-9][0-9])(?:\.\d+)?%|下跌(?!.*?涨)[^。]*?(?<![0-9.])(?:[2-9]|[1-9][0-9])(?:\.\d+)?%)`
|
||||
- "跌幅"分支:要求跌幅后有测量词(扩大至/达/至/超/为/逾),防止"跌幅"和其他分句的"%"跨句匹配
|
||||
- "下跌"分支:用`(?!.*?涨)`负向前瞻阻断含有"涨"的上下文(如"收涨近3%")
|
||||
- 阈值修复:`(?<![0-9.])(?:[2-9]|[1-9][0-9])(?:\.\d+)?%` 防止"0.3%"中"3%"被提取
|
||||
- Pattern 10: `(?:暴跌|重挫|熔断).*[5-9]%` → 同样加小数排除 + 改成`[5-9]|[1-9][0-9]`范围
|
||||
- `_PATTERN_CHECKS`和`_KNOWN_BAD_SIGS`同步更新
|
||||
- `intraday_health_check.py`: 宏观风险HIGH去重,防止同一风险状态累积多个TODO
|
||||
|
||||
## 2026-06-23 09:00 数据采集脚本修复
|
||||
|
||||
**发现了什么:** `market_watch.py` cron任务报错,exit code 1
|
||||
@@ -132,3 +149,52 @@
|
||||
- 严禁从 multi_tf_cache.json / decisions.json 等缓存文件直接读取价格数据来推操作建议
|
||||
- 唯一允许的价格源:腾讯实时 API(qt.gtimg.cn)或 price_monitor 刚写入的 events/state
|
||||
- 违反这条 → 自动回滚,追加到违规记录
|
||||
|
||||
## 2026-07-02 10:00 盘中自检 NameError 修复
|
||||
|
||||
**发现了什么:** 自愈执行器报 `盘中自检: 价格数据新鲜度检查失败: name 'mo_data' is not defined`
|
||||
- 根因:`intraday_health_check.py` 第11行用 `from mo_data import read_portfolio`(直接导入函数),但第117行写的是 `mo_data.read_portfolio()`(当模块名调用)
|
||||
|
||||
**修改了什么:**
|
||||
- 文件:`/home/hmo/MoFin/scripts/intraday_health_check.py`
|
||||
- 变更:`mo_data.read_portfolio()` → `read_portfolio()`
|
||||
|
||||
**效果预期:** 盘中自检不再因这个 NameError 报异常,能正常检查 portfolio.json 数据新鲜度。
|
||||
|
||||
## 2026-07-02 10:51 宏观风险HIGH升级应对
|
||||
|
||||
**发现了什么:** 自愈执行器上报当日第二次HIGH信号(科创50扩大至-5%、创业板-4%)。同时KOSPI从-7%收窄至-3%(改善方向信号)。
|
||||
|
||||
**修改了什么:**
|
||||
- 文件:`macro_risk_state.json`
|
||||
- 变更:升级模式更新state,分别标注恶化(科创50/创业板扩大跌幅)和改善(KOSPI收窄、恒指+1.3%)两个方向,避免笼统"附加新数据点"
|
||||
|
||||
**萃取知识:**
|
||||
1. B类板块冲击下,防御仓位(紫金+6.8%、黄金ETF+2%、神华+1.2%)当日有效对冲科技股损失,验证了组合构建合理性
|
||||
2. 中芯国际A(688981)是当日最危险持仓(距止损2.14%),中芯国际AH走势分化(A-2.96% vs H-8.05%)值得关注——A股有溢价保护,H股更直接暴露于全球半导体卖压
|
||||
3. 分歧检测bias=opportunity + A/H科技背离>5pp → 极端背离时不能简单看空,A股科技暴跌时港股科技反而上涨,资金在跨市场迁移而非逃离科技板块
|
||||
|
||||
## 2026-07-02 盘中 价格数据新鲜度检查格式不兼容
|
||||
|
||||
**发现了什么:** 自愈执行器报 `盘中自检: 价格数据新鲜度检查失败: unconverted data remains: :06`
|
||||
|
||||
**根因:** `intraday_health_check.py` 的 `datetime.strptime(pf_updated, "%Y-%m-%d %H:%M:%S")` 硬编码要求带秒格式,但 `price_monitor.py` 等写入 `updated_at` 用 `strftime('%Y-%m-%d %H:%M')` 无秒格式。当 `read_portfolio()` 回退到 JSON 冷备时读到无秒时间戳 → 解析失败。
|
||||
|
||||
**修改了什么:**
|
||||
- 文件:`/home/hmo/MoFin/scripts/intraday_health_check.py`
|
||||
- 变更:引入 `_parse_updated_at()` 函数,先试带秒格式 `%Y-%m-%d %H:%M:%S`,失败则回退无秒格式 `%Y-%m-%d %H:%M`;两次都失败时明确记录"格式无法解析"而非抛异常
|
||||
|
||||
**效果预期:** 无论 `updated_at` 是 `'2026-07-02 10:43'`(无秒)还是 `'2026-07-02 10:43:53'`(有秒),都能正确解析并计算新鲜度。
|
||||
|
||||
## 2026-07-02 11:47 宏风险HIGH持续——系统无故障,已知市场事件延续
|
||||
|
||||
**发现了什么:** 自愈执行器报盘中自检→宏观风险HIGH。核实后发现该风险已在11:27向Dad推送过完整报告,且到损位均未触发。这不是系统故障,是已知市场状态(全球半导体抛售)的延续。
|
||||
|
||||
**附带的data issue:** portfolio.json的`currency`字段将所有港股(8只)标为CNY而非HKD。影响跨币种计算准确性。
|
||||
- 根因追踪:`import_holding_xls.py`(line67)正确设HKD,但`strategy_lifecycle.py`(line2027)的`setdefault('currency','CNY')`在策略更新时覆盖了币种标记
|
||||
- 修复计划:盘后(非交易时段)统一排查并修正currency字段在数据管道中的传播路径
|
||||
|
||||
**萃取知识:**
|
||||
1. 自愈执行器对宏风险的报警是设计行为(health check标记risk=high→写TODO→升级处理),需要按"已知市场状态"处理而非"系统故障"
|
||||
2. 腾讯(00700)距止损2.76%是所有持仓中最接近止损位的——本轮冲击前未被重点标记,暴露了"只关注风险最大的几个"忽略了中游风险
|
||||
|
|
||||
Reference in New Issue
Block a user