MoFin Cron 架构深度审查与重构设计
创建:2026-08-11 | 审查人:小小莫 | 状态:📋 审查完成,重构方案待老莫批准
背景:新策略(预测超跌反弹 p_oversold)引入前,必须清理 cron 架构的
重复调度、代码分叉、职责混乱问题,让架构清晰可维护。
一、现状全景
1.1 调度系统
| 调度系统 |
任务数 |
说明 |
| hermes 顶层 jobs.json |
16 |
⚠️ 7/23 起调度器停摆(残留) |
| hermes position-analyst |
63 |
✅ 主调度(活跃) |
| hermes mohe |
2 |
✅ 少量 |
| 系统 crontab |
~33 |
⚠️ 部分与 hermes 重复 |
1.2 脚本总数
- deploy/profile-scripts/:~100 个 py
- hermes scripts/:硬链接(sync_profile_scripts.sh 维护)
- MoFin 根目录:库文件 + 残留
二、核心架构问题
问题 1:策略扫描器嵌入数据采集器(违反单一职责)
现状:
问题:
- market_watch 职责 = 数据采集 + 市场阶段 + 2 个策略扫描,四合一
- mr_scanner/s2_scanner 无独立调度,只能被 market_watch 触发
- timeout=1500s(25分钟)嵌入采集器,若超时影响采集
- 新策略 p_oversold 替换时无处安放(要改 market_watch 还是新建?)
重构方案:策略扫描器独立调度
- 每个扫描器独立 job、独立日志、独立幂等
- market_watch 只做采集(单一职责)
问题 2:同一脚本多个调度入口
| 脚本 |
入口 |
建议 |
| market_watch.py |
顶层(0,30 9-16) + position(*/10) |
停顶层(调度器已死) |
| stale_detector.py |
策略评估-每日(21:00) + 周末重评(30 10 0,6) |
保留(两用途不同) |
| memory_guardian.py |
顶层 + position |
停顶层 |
| cron_to_xmpp.py |
顶层(* 9-16) + position(*/5) |
停顶层(已停 crontab) |
| divergence_detector.py |
工作日(*/30 8-15) + 周末(30 8-16/2) |
保留(两用途合理) |
问题 3:一份代码多版本(分叉)
| 文件 |
副本 |
状态 |
| market_watch.py |
MoFin根(旧) vs deploy(新) |
❌ 分叉,根目录残留 |
| promote_candidates.py |
docs/backup 残留 |
❌ 备份未清理 |
| self_todo_executor.py |
deploy vs hermes vs AgentsMeeting |
⚠️ 新旧版并存 |
| agents_health_check.py |
MoFin/AgentsMeeting/self-growing |
⚠️ 三项目各自维护 |
原则(红线):
- 一份代码只存在于一个 canonical 位置(MoFin git 仓库)
- deploy/profile-scripts ↔ hermes scripts 用硬链接(已规范)
- 其他位置(根目录/backup/其他项目)不得有副本
问题 4:健康检查体系过度层级化
现状 8 个健康类脚本:
问题:8 个脚本职责重叠,互相引用,排查复杂
建议:保留核心 4 层(Tier1/morning+intraday/functional/self_repair),合并冗余
三、逐任务设计文档(分类)
3.1 候选管道(核心链路)
| 脚本 |
职责 |
调度 |
数据流 |
问题 |
| accumulation_scanner |
主力建仓扫描 |
*/10 |
行情→candidates |
与新策略无关,保留 |
| candidate_filter |
6阶段过滤 |
*/30 |
candidates→评分 |
耦合 accumulation 设计 |
| promote_candidates |
候选提拔 |
*/30 |
candidates→自选 |
RR>=2 门槛需适配 |
| premarket_full_review |
盘前重评 |
8:10 |
全量重评 |
依赖缓存预热 |
3.2 策略扫描器(问题 1 核心)
| 脚本 |
职责 |
当前入口 |
重构后 |
| mr_scanner.py |
v_weak 弱市扫描 |
嵌入 market_watch |
独立 cron |
| s2_scanner.py |
S2 恐慌买 |
嵌入 market_watch |
独立 cron |
| predictive_oversold_scanner |
新策略(待建) |
无 |
独立 cron |
3.3 数据采集
| 脚本 |
职责 |
调度 |
问题 |
| price_monitor |
价格(A+港股) |
hermes */2 9-16 |
✅ 已统一 |
| market_watch |
板块 |
hermes */10 |
⚠️ 待拆策略扫描 |
| capital_flow_collector |
资金流 |
1,31 9-15 |
✅ 已修锁 |
| refresh_mtf_cache |
多周期缓存 |
50 7,11,14 |
✅ 已修 flush |
| fundamentals_refresh |
基本面 |
早/午两次 |
⚠️ 午间可停? |
| sector_enrich_cninfo |
行业富集 |
早/午两次 |
⚠️ 午间可停? |
| macro_context_collector |
宏观新闻 |
*/30 |
✅ |
| refresh_macro_context |
宏观上下文 |
*/30 |
✅ |
| news_collector |
新闻 |
crontab 30 9,13,17 |
✅ |
| divergence_detector |
跨市场背离 |
*/30+周末 |
✅ |
3.4 健康自检(问题 4)
| 脚本 |
职责 |
调度 |
保留 |
| agents_health_check |
Tier1 4服务 |
*/5 |
✅ |
| morning_health_check |
每日体检 8类40项 |
8:00 |
✅ |
| intraday_health_check |
盘中自检 |
*/15 |
✅ |
| functional_health_check |
L1 功能 |
*/15 |
✅ |
| mofin_health |
dashboard 数据 |
*/15 |
✅ |
| self_repair |
L3 LLM 修复 |
*/30 |
✅ |
| meta_watchdog |
L4 元监控 |
5min |
✅ |
| system_hygiene_audit |
卫生审计 |
8:20 |
⚠️ 与 system_audit 重叠 |
| system_audit |
全局审计 |
17:30 |
⚠️ 与 hygiene 重叠 |
| system_health_check |
传统检查 |
已停 |
❌ 可归档 |
3.5 报告简报
| 脚本 |
职责 |
调度 |
备注 |
| opening_brief/closing_brief |
开/收盘简报 |
9:35/16:10 |
✅ |
| market_insight |
知微洞察 |
15:35 |
✅ |
| strategy_review |
策略复盘 |
20:00 |
✅ |
| strategy_evaluator |
策略评估 |
每周/每日 |
⚠️ 每日版可停 |
| collect_evaluation_data |
评估数据 |
20:30 |
✅ |
| prepare_report_data |
报告数据 |
周四 |
✅ |
3.6 自成长
| 脚本 |
职责 |
调度 |
备注 |
| branch_scanner |
分支自成长 |
15min |
✅ |
| prune_branches |
分支剪枝 |
21:00 |
✅ |
| meta_growth |
元自成长 |
0:45/12:45 |
✅ |
| hardcode_scanner |
硬编码扫描 |
17:25 |
✅ |
3.7 系统维护
| 脚本 |
职责 |
调度 |
备注 |
| deploy_guard |
部署守卫 |
*/15 |
✅ 核心 |
| fix_gateway_port |
gateway 看门狗 |
10min |
✅ 核心 |
| agent_spiral_watchdog |
螺旋监控 |
*/10 |
✅ |
| db_daily_backup |
DB 备份 |
7:50 |
✅ |
| vacuum_state_db |
state.db 整理 |
周六 |
✅ |
| system_audit |
全局审计 |
17:30 |
✅ |
四、重构方案(待老莫批准)
4.1 立即执行(低风险)
- 停顶层 jobs.json 残留(16个 job 调度器已死)——enabled=False 或确认清理
- 清理 market_watch.py 根目录分叉(旧版移 archive)
- 清理 promote_candidates.py backup 残留
- 统一 agents_health_check(确认三项目各自维护是否必要)
4.2 重构(中等风险,需测试)
- 拆 market_watch 策略扫描:mr_scanner/s2_scanner 独立调度
- fundamentals/sector_enrich 午间版停用(早间足够)
- 评估每日版停用(每周版足够)
4.3 为 p_oversold 准备
- 新建 predictive_oversold_scanner.py(独立 cron,对齐 accumulation_scanner 模式)
- 候选管道适配(p_oversold 走专属评估,绕过 RR>=2)
4.4 红线(杜绝多版本)
- 一份代码一个 canonical 位置(MoFin git)
- deploy↔hermes 硬链接(已规范)
- 根目录不留脚本副本(库文件除外,且必须与 deploy 硬链)
- 备份不进仓库
五、执行优先级
| 优先级 |
动作 |
风险 |
| P0 |
停顶层 jobs 残留 + 清 market_watch 分叉 |
低 |
| P1 |
拆策略扫描器独立调度 |
中 |
| P2 |
停午间重复采集 |
低 |
| P3 |
建 p_oversold 扫描器 |
中 |
待老莫确认后分批执行。