Files
MoFin/EXPERT_SYSTEM_DESIGN.md
T
知微 (MoFin) aa0f740381 MoFin 初始提交
完整数据采集+分析管道:
- market_watch.py:90行业板块采集(同花顺/东方财富)
- 市场精选推荐 cron:全市场分析+候选池+星级推荐
- price_monitor.py:持仓/自选高频价格监控
- refresh_mtf_cache.py:多周期K线缓存
- 策略评估/知识萃取管道

文档:docs/ 含完整需求+架构设计
注意:尚未配置 git remote,笑笑接手后自行配置
2026-06-20 12:04:21 +08:00

25 KiB
Raw Blame History

MoFin 专家系统 — 完整架构文档 v2.0

最后更新:2026-06-12 维护人:莫荷(Hermes Agent) 铁律:任何系统改动必须先读本文档,改完必须同步更新


一、核心理念

每份分析都成为下一次分析的养料
每次建议都成为下一次建议的参考
从内到外(知识→分析),从外到内(分析→沉淀)的持续闭环

二、股票操作策略生命周期

                    ┌─────────────────────────────┐
                    │   大环境+行业趋势研判         │
                    │   (盘前热点扫描·每天8:30)     │
                    │   板块扫描→发现新标的         │
                    └──────────┬──────────────────┘
                               │ 写入 watchlist.json
                               ▼
                    ┌─────────────────────────────┐
                    │   自选股池 (watchlist.json)   │
                    │                              │
                    │   🟢 可操作 — 价格在买入区内   │
                    │   🟡 关注 — 距触发3~5%        │
                    │   ⚪ 观察 — 距触发>5%          │
                    │                              │
                    │   监控:                      │
                    │   • 快速盯盘(每15分钟)         │
                    │   • 持仓情报-盘后(每天)        │
                    │   • 自选股体检(每周六)         │
                    └──────────┬──────────────────┘
                        进入买入区 │ 建仓
                               ▼
                    ┌─────────────────────────────┐
                    │   持仓股 (portfolio.json)     │
                    │                              │
                    │   监控:                      │
                    │   • 价格监控(每分钟·纯脚本)    │
                    │   • 快速盯盘(每15分钟·LLM)     │
                    │   • 持仓情报-盘中(每小时·LLM)  │
                    │   • 持仓情报-盘后(每天·LLM)    │
                    │   • 分析师-持仓复查(每周·LLM)  │
                    └──────────┬──────────────────┘
                    触发止损/止盈/清仓 │
                               ▼
                    ┌─────────────────────────────┐
                    │   回到自选股池                │
                    │   (保留策略,等待下次机会)     │
                    └─────────────────────────────┘

三、系统架构总览

┌──────────────────────────────────────────────────────────────────┐
│                         MoFin 专家系统 v2.0                       │
├──────────────────────────────────────────────────────────────────┤
│                                                                    │
│  ┌─────────────────────────┐  ┌──────────────────────────────┐   │
│  │    基础设施层(纯脚本)     │  │    分析层(LLM驱动)            │   │
│  │  0配额消耗               │  │  每次运行消耗1次配额          │   │
│  │                         │  │                              │   │
│  │  • 价格监控(1分钟)       │  │  • 盘前热点扫描(8:30)        │   │
│  │    腾讯批量API拉所有股票  │  │    → 持仓分析+板块扫描        │   │
│  │    写入portfolio/watchlist│  │    → 新机会发现→写入watchlist│   │
│  │    比对区间触发→输出     │  │                              │   │
│  │                         │  │  • 集合竞价观察(9:28)         │   │
│  │  • 市场数据采集(30分钟)   │  │    → A股竞价异常监控          │   │
│  │    板块数据→market.json  │  │                              │   │
│  │                         │  │  • 快速盯盘(每15分钟)          │   │
│  │  • 数据同步(8:55)        │  │    → 持仓操作窗口+自选接近提醒 │   │
│  │    update_data+server检查│  │                              │   │
│  │                         │  │  • 持仓情报-盘中(每小时40分)   │   │
│  │  • XMPP中继(每分钟)      │  │    → 详细盘中分析              │   │
│  │    扫输出目录→推知微     │  │                              │   │
│  │                         │  │  • 持仓情报-盘后(20:00)       │   │
│  │  • 港股低延迟行情中继    │  │  • 分析师-持仓复查(周四20:00)  │   │
│  │    tdx-relay (Windows)  │  │    → 基本面深度复查            │   │
│  │    opentdx→招商证券7727  │  │                              │   │
│  │    POST → /api/update/  │  │                              │   │
│  │       realtime          │  │                              │   │
│  └─────────┬───────────────┘  │                              │   │
│            │                  │                              │   │
│            ▼                  │                              │   │
│  ┌─────────────────────────┐  │                              │   │
│  │    数据层                │  │                              │   │
│  │  portfolio.json(持仓)   │  │                              │   │
│  │  watchlist.json(自选)   │  │    → 每只自选评估:保留/移除   │   │
│  │  decisions.json(决策库) │  │                              │   │
│  │  market.json(板块数据)  │  │  • 知微周复盘(周日22:00)      │   │
│  │  daily_reviews.json     │  │    → 周度总结                 │   │
│  │  stock_profiles.json    │  └──────────┬───────────────────┘   │
│  └─────────┬───────────────┘             │                        │
│            │                             │                        │
│            ▼                             ▼                        │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │                   推送层                                   │   │
│  │  cron_to_xmpp.py(每分钟·纯脚本)                            │   │
│  │  扫描 ~/.hermes/cron/output/*/ 目录                       │   │
│  │  发现新 .md 文件 → 提取正文 → XMPP推送【知微】             │   │
│  │  已推送的记在 .relay_journal.json,不重复推                │   │
│  └──────────────────────────────────────────────────────────┘   │
└──────────────────────────────────────────────────────────────────┘

四、完整 Cron Job 清单(14个)

🟢 基础设施层(纯脚本,0配额消耗)

# 名称 频率 脚本 输出 说明
1 价格监控-1分钟 工作日 每分钟(9-11/12/13-16) price_monitor.py 有触发→推送;无→SILENT 腾讯批量API拉所有股票实时价,写入portfolio/watchlist,比对区间触发条件
2 市场数据采集 工作日 每30分钟 market_watch.py 成功→SILENT;失败→报错 东方财富API采集板块数据→market.json
3 数据同步-dashboard 每天 8:55 sync_dashboard.py 有数据→推送;无→SILENT 跑update_data.py+检查server,挂了自动重启
4 cron-推XMPP中继 工作日 每分钟(9-16) cron_to_xmpp.py 有新报告→推送;无→静默 扫所有job输出目录,推新报告到XMPP
5 中继-16点收盘 工作日 16:00-16:10 cron_to_xmpp.py 同上 收盘时段推港股报告

🔵 分析层(LLM驱动,每次1次配额)

# 名称 频率 关键职责 价格获取方式
6 盘前热点扫描 工作日 8:30 持仓分析+板块扫描→新机会发现→写入watchlist 读文件(price_monitor刷新)
7 集合竞价观察 工作日 9:28 A股竞价异常监控,无异常SILENT A股curl竞价价+港股读文件
8 快速盯盘-15分钟 工作日 每15分钟 持仓操作窗口+自选股接近买入区提醒,无则SILENT 读文件
9 持仓情报-盘中 工作日 每小时40分 详细盘中分析+异动搜因 读文件
10 持仓情报-盘后 工作日 20:00 完整复盘+自选股回顾+数据沉淀daily_reviews 读文件
11 分析师-持仓复查 周四 20:00 每周基本面深度复查 读文件
12 自选股体检-每周 周六 20:00 🆕 每只自选评估:已建仓→移除、>30天未接近→建议移除、行业变化→更新理由 读文件+web_search
13 知微周复盘 周日 22:00 周度总结 读文件
14 策略评估-每日 工作日 21:00 双维度评估36条策略,生成反馈闭环 读文件+LLM
15 建议对账-每周 周六 20:00 对比建议vs实际持仓变化,算准确率 纯脚本
16 策略评估-每周 周六 21:00 完整评分+趋势分析+策略参数调整 纯脚本

五、数据文件

文件 路径 作用 更新频率 更新者
持仓数据 data/portfolio.json 持仓快照+实时价 每分钟 price_monitor
自选数据 data/watchlist.json 自选股列表+买入区+实时价 每分钟 price_monitor+盘前扫描+自选体检
决策库 data/decisions.json 策略+trigger+建议历史+评估数据 每次讨论后+每日评估 LLM job+策略评估
每日复盘 data/daily_reviews.json 当日判断+修正沉淀 每日20:00 持仓情报-盘后
股票档案 data/stock_profiles.json 行业/业务/逻辑 发现新信息时 LLM
市场数据 data/market.json 板块涨跌+概念热度 每30分钟 market_watch
价格事件 data/price_events.json 价格触发记录(止盈/止损/买入区) 每分钟 price_monitor
评估结果 data/evaluation.json 双维度评估+评分 每天21:00 策略评估
准确率统计 data/accuracy_stats.json 建议对账+准确率 每周六20:00 对账脚本
反馈闭环 data/strategy_feedback.json 反馈+调整建议+知识萃取 每天21:00 策略评估
区间偏离 ~/.hermes/zone_breach.json 价格偏离标记 每分钟 price_monitor
触发状态 ~/.hermes/price_trigger_state.json 每只股票各区间的进出状态 每分钟 price_monitor
relay状态 data/relay_state.json (新增) tdx-relay在线/离线状态 每分钟 server.py(update/realtime更新)

六、数据流转

tdx-relay (Windows·xxm负责)
  │  opentdx → 招商证券7727扩展行情服务
  │  拉取17只港股实时行情(1~3秒延迟)
  │  POST → http://192.168.1.246:8899/api/update/realtime
  │
  ├──→ server.py 接收 → 更新 portfolio.json / watchlist.json
  │    港股 data_source = "tdx_relay"
  │    更新 relay_state.json
  │
  └──→ price_monitor 检测 relay 状态
        relay 在线 → 跳过港股腾讯API拉取(保留实时价)
        relay 离线(>60秒) → 回退腾讯 API 兜底

price_monitor(每分钟)
  │  腾讯批量API 1次请求
  │
  ├──→ portfolio.json (持仓实时价)
  ├──→ watchlist.json (自选实时价)
  ├──→ 比对decisions.json的trigger区间
  ├──→ 有触发 → 输出 → 中继 → 知微
  └──→ 无触发 → [SILENT] → 丢弃

market_watch(每30分钟)
  │  东方财富API
  └──→ market.json (板块数据)

盘前热点扫描(每天8:30)
  │  读 market.json → 分析强势板块
  │  发现新标的 → 写入 watchlist.json
  └──→ 输出报告 → 中继 → 知微

快速盯盘(每15分钟)
  │  读 portfolio.json + watchlist.json
  │  持仓操作窗口 + 自选接近买入区
  └──→ 有发现 → 输出 → 中继 → 知微

持仓情报-盘后(每天20:00)
  │  读 portfolio.json + watchlist.json
  │  持仓回顾 + 自选回顾
  └──→ 写入 daily_reviews.json
  └──→ 输出报告 → 中继 → 知微

自选股体检(每周六20:00)
  │  读 watchlist.json + portfolio.json
  │  每只评估:保留/移除/更新
  └──→ 输出报告 → 中继 → 知微

七、报告推送策略

报告 推送 频率 静默规则
价格监控 有触发才推 每分钟 无触发→[SILENT]
盘前扫描 每日1次 有发现才写
集合竞价 有异常才推 每日1次 无异常→SILENT
快速盯盘 有发现才推 每15分钟 无操作窗口+无自选接近→SILENT
持仓情报-盘中 有发现才推 每小时40分 无操作窗口→合并后停止
持仓情报-盘后 每日20:00 有实质内容才写
分析师复查 每周四 有发现才写
自选股体检 每周六 有建议才写
知微周复盘 每周日 有实质内容才写
市场数据采集 不推 每30分钟 只写文件
数据同步 有数据才推 每天8:55 无更新→SILENT

八、关键设计决策

方面 决策 原因
价格获取 腾讯批量API qt.gtimg.cn/q=sh600110,sz000001,... 1次请求拉所有股票,无频率限制
价格监控类型 纯脚本(no_agent=True) 不需要LLM0配额消耗
中继类型 纯脚本(no_agent=True) 文件扫描+XMPP推送,不需要LLM
市场数据采集 纯脚本(no_agent=True) 只写文件不输出,不需要LLM
数据同步 纯脚本(sync_dashboard.py) 包装脚本含server检查,不需要LLM
LLM job价格来源 读文件(price_monitor每1分钟刷新) 不再逐个curl,节省配额
新机会发现 合并到盘前热点扫描(每天) 每天分析板块数据,发现新标的写入watchlist
自选股进出管理 自选股体检(每周六) 系统评估+提请确认,不自动删除
午休 价格监控跳过12:05-12:55(保留12:00) A股午休无行情

九、配额消耗估算(一个上午)

组件 运行次数 配额消耗
价格监控 ~240次(每分钟) 0 (纯脚本)
市场数据采集 ~10次 0 (纯脚本)
数据同步 1次 0 (纯脚本)
XMPP中继 ~240次 0 (纯脚本)
盘前热点扫描 1次 1次
集合竞价 1次 1次
快速盯盘 ~20次 ~20次 (有操作窗口才跑,无则SILENT不消耗)
持仓情报-盘中 ~6次 ~6次
策略评估-每日 1次 1次
总计 ~29次 LLM调用

十、策略评估反馈闭环架构

核心流程

price_monitor(每分钟·纯脚本)
  │  腾讯批量API拉所有股票实时价
  │  比对策略区间 → 触发 → 记录到 price_events.json
  │
  ├──→ 价格触发事件持久化(price_events.json
  │     event_type: entry_zone / stop_loss / take_profit
  │     code, name, price, trigger_value, timestamp
  │
  ▼
strategy_evaluator(每天21:00·纯脚本)
  │  读 decisions.json + price_events.json + portfolio.json
  │  双维度评估每只股票:
  │    阶段一(策略制定→价格达标):
  │      - 理论:价格是否达到过止盈/止损/买入区
  │      - 实际:持仓盈亏、建议执行情况
  │    阶段二(价格回落→新止损验证):
  │      - 新止损是否被后续走势验证
  │  写入 decisions.json 的 evaluation 字段
  │
  ├──→ 写入 evaluation.json
  │
  ▼
strategy_feedback(每天21:00·纯脚本,评估后自动)
  │  读 evaluation.json
  │  自动决策:
  │    - 价格达到止盈 → 标记阶段一成功,萃取经验
  │    - 跌破止损 → 标记阶段一失败,生成新区间
  │    - 14天无触发 → 标记 stale,建议重评
  │    - 准确率持续下降 → 收紧区间宽度
  │  写入 strategy_feedback.json
  │
  ├──→ 写入 strategy_feedback.json
  │
  ▼
每日评估 cron(每天21:00·LLM驱动)
  │  读 strategy_feedback.json
  │  处理反馈 → 更新策略 → 输出日报
  │  无变化 → [SILENT]
  │
  ▼
盘后知识萃取(每天16:30·LLM驱动)
  │  读 feedback 中的 knowledge 字段
  │  写入 analyst-knowledge-log.md
  │
  ▼
建议对账(每周六20:00·纯脚本)
  │  对比 advice_timeline vs portfolio.json
  │  算准确率 → 写入 accuracy_stats.json
  │
  ▼
策略评估-每周(每周六21:00·纯脚本)
  │  完整评分 → 趋势分析 → 策略参数调整
  │  写入 evaluation.json + strategy_feedback.json

双维度评估模型

维度 阶段一 阶段二
理论(策略规划) 价格是否达到止盈/止损/买入区?何时?理论盈亏? 新止损是否被后续走势验证?
实际(用户执行) 实际持仓盈亏?建议是否被采纳? 用户是否按新止损操作?实际损失?

反馈引擎自动决策规则

检测条件 自动动作
价格达到止盈位 标记阶段一成功,萃取经验到知识日志,创建新自选策略
跌破止损位 标记阶段一失败,分析原因,生成新止损/买入区间
策略14天未触发任何区间 标记为 stale,建议重新评估基本面和技术面
准确率持续下降(<50% 收紧策略区间宽度(10%→8%
准确率持续上升(>80% 放宽策略区间宽度(10%→12%

十、v2.0 更新说明(2026-06-09

本次更新基于知微与莫荷、老爸的深入讨论,对系统做了全面重构。以下记录讨论过程中的关键意图、决策和待办事项。

本次改动驱动因素

  1. 火山引擎(volcengine) 429配额超限 → 触发对 provider 配置和 fallback 链的全面梳理
  2. 发现价格监控逐个curl拉取价格 → 效率极低且浪费配额,触发了对价格获取方式的全面改造
  3. 知微反馈"问了不在回答长篇报告" → 触发了对 session 管理、system prompt、对话识别机制的修复
  4. 老爸指出持仓和自选股之间的动态生命周期关系 → 触发了对股票操作策略完整生命周期的重新设计

已完成的改造

基础设施层:

  • 价格监控从 LLM驱动(每5分钟) 改为 纯脚本(每1分钟),使用腾讯批量API一次拉所有股票
  • XMPP中继从 LLM驱动 改为 纯脚本(每1分钟)
  • 市场数据采集从 LLM驱动 改为 纯脚本
  • 数据同步从 LLM驱动 改为 纯脚本(含server检查包装脚本)
  • 所有LLM job的价格获取从"逐个curl拉取"改为"直接读文件(price_monitor每1分钟刷新)"

股票生命周期完善:

  • 新机会发现:合并到盘前热点扫描(每天8:30),板块扫描→发现新标的→写入watchlist
  • 自选接近提醒:快速盯盘(每15分钟)新增自选接近买入区(<5%)单独提醒
  • 自选回顾:持仓情报-盘后(每天20:00)新增自选股回顾板块
  • 自选体检:新增每周六20:00的自动评估+建议移除/保留

provider配置统一:

  • 莫荷(默认profile):默认ocg-old(旧key) → fallback ocg-new(新key) → volcengine(火山)
  • 知微(position-analyst):默认volcengine(火山) → fallback ocg-old(旧key) → ocg-new(新key)
  • 火山已恢复可用

对话机制修复:

  • 知微SOUL新增对话上下文识别规则(打招呼vs分析请求vs模糊提问)
  • 知微SOUL新增系统自动追加消息(bg-review)说明
  • position-analyst启用压缩(protect_last_n=200, hygiene_hard_message_limit=400)

策略评估反馈闭环(v2.0 深夜追加):

  • 价格事件持久化:price_monitor每分钟记录价格触发事件到price_events.json
  • 双维度评估:strategy_evaluator每天评估36条策略,分阶段一(策略制定→价格达标)和阶段二(价格回落→新止损验证),每个阶段同时记录理论盈亏和实际盈亏
  • 反馈引擎:strategy_feedback自动检测止盈/止损/stale策略,生成调整建议,萃取知识到知识日志
  • Dashboard评估tab:展示评分、理论vs实际盈亏对比、反馈闭环卡片
  • 建议对账:advice_reconciliation.py每周对比建议vs实际持仓变化算准确率
  • 36条策略全部填充建议记录,平均分4.8/10

设计原则/意图

  1. 知微是分析师,不是决策者 — 她出建议,老爸决定是否执行,是否执行的唯一真相来源是截图/持仓更新
  2. 莫荷是参谋,不是执行者 — 莫荷出报告和建议,不做交易操作
  3. 建议≠事实 — 不能假设建议=被执行,需要等持仓更新来验证
  4. 持仓/自选动态循环 — 持仓清仓→自动转自选保留策略,自选建仓→自动转为持仓管理
  5. 自选股进出需人工确认 — 系统可以建议移除,但不能自动删除,需老爸确认
  6. 轻对话,重分析 — 不是每条消息都需要全面分析报告,区分打招呼和干活

尚未完成/待定事项

  1. 建议自动记录+对账闭环 — 莫荷发出的建议自动记入decisions.json的advice_timeline,每周对比实际持仓变化,统计准确率( 已完成:/api/advice/record + advice_reconciliation.py + accuracy_stats.json
  2. MoFin Dashboard整合 — server.py应整合所有数据源,包括待确认决策、准确率统计等( 已完成:决策库tab + 评估tab + 反馈闭环tab
  3. 知微XMPP通信通道优化 — 当前xmpp_zhiwei_bot.py断线重连机制有缺陷(Event().wait阻塞),需修复( 已完成:watchdog循环每10秒检查连接状态)
  4. session跨profile检索 — 知微无法搜到莫荷CLI session的内容,需手动转发( 已完成:session_search profile参数可用)
  5. 策略双维度评估体系 — 理论策略vs实际执行,分阶段跟踪,自动反馈闭环( 已完成:strategy_evaluator.py + strategy_feedback.py + 每日/每周cron
  6. 价格事件持久化 — price_monitor每分钟记录价格触发事件供回溯评估( 已完成:price_events.json + record_event()

tdx-relay 集成(小小莫Windows端 + 知微Linux端)

详见单独文档:TDX_RELAY_COLLAB.md

职责分工:

  • 小小莫Windows端 tdx-relay 开发维护(opentdx→招商证券7727→港股实时行情推送)
  • 知微Linux端 MoFin API 兼容(/api/update/realtime 已实现,/api/relay/status 待实现)+ price_monitor relay 检测+回退逻辑

当前状态:

  • /api/update/realtime 端点已在 server.py 中实现
  • relay_state.json 持久化(待实现)
  • /api/relay/status GET 端点(待实现)
  • price_monitor.py relay 活跃检测(待实现)
  • relay 离线时自动回退腾讯 API(待实现)

正在进行的优化(2026-06-12

  1. 报告格式精简 — 老爸反复强调太长无重点。已改为:重点推荐(≤3只)+风险关注(≤3只)+其余持仓一行。全文≤500字。
  2. 技术面分析取代百分比策略 — 支撑/压力位用枢轴点算法,止损=min(强支撑, 成本×0.85),买入区=弱撑~弱压之间,止盈在盈亏比≥1:2处。
  3. MoFin 决策库重构 — 清空旧记录(标记obsolete),从6月11日起重新记录。新增 active_manual / current_recommend 标签,支持按此筛选排序。新增搜索框。
  4. 格式校验器 — cron_to_xmpp.py 新增 validate_format(),拦截无重点/超长/含模棱两可词语的报告。记录到 daily 汇总(不拦截推送,只记录违规)。