Files
MoFin/docs/REQUIREMENTS.md
知微 (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

6.2 KiB
Raw Permalink Blame History

title, tags, status, priority, created
title tags status priority created
MoFin 系统数据库统一 - 需求与实施计划
MoFin
数据库
需求文档
当前工作
活跃 P0(当前) 2026-06-20

MoFin 系统数据库统一 - 需求与实施计划

一、当前状态

已完成的管道

market_watch.py(每30分,no_agent
  → 拉取同花顺90个行业板块数据
  → 写入 market.json(最新快照,仅存当前值,无历史)

市场精选推荐-每日(16:00LLM cron
  → 读 market.json → 全市场分析
  → 选热门行业 → 查个股实时价 → 候选池 → 星级推荐
  → 写入 candidate_pool.json + 输出报告给老爸

核心问题

所有数据以 JSON 文件散落存储,无历史记录、无关联查询能力

问题 影响
market.json 只存最新快照 看不到板块涨跌趋势、资金流向变化
个股不知自己所属板块,板块不知有哪些成分股 无法 SQL join 持仓→板块→趋势
评分/策略变更无历史 看不到候选评分变化趋势
各 JSON 之间无外键约束 数据一致性全靠代码保证

二、目标

将 MoFin 全部数据纳入统一 SQLite 数据库(mofin.db),实现:

  • 数据关系化(持仓 ↔ 板块 ↔ 趋势,一条 SQL 直连)
  • 历史可追溯(板块快照、评分变更、策略版本全部时序存储)
  • 操作 no_agent 化(常用查询/告警用脚本完成,不消耗 LLM)
  • 增量无损迁移(JSON 双写 → 验证 → 切换)

三、数据库设计(详细见 docs/mofin-database-architecture.md

8 组表

替代的 JSON 核心字段
market_snapshots —(新增) timestamp, up_ratio, mood
sector_snapshots market.json sectors[] snapshot_id, name, change_pct, net_inflow
stocks multi_tf_cache.json 的 key code, name, exchange
stock_daily / weekly / monthly multi_tf_cache 内容 code, date, ohlcv
stock_fundamentals multi_tf_cache fundamentals code, pe, pb, eps
stock_sectors 新表(目前无) code ↔ sector_name 映射
holdings portfolio.json holdings code, shares, cost
holding_strategies decisions.json 策略 code, stop_loss, tp, entry 区间
watchlist_stocks watchlist.json code, name
candidates candidate_pool.json code, star, promoted
candidate_score_history candidate_pool 内嵌 history code, score, source
price_events price_events.json code, event_type, price

四、实施计划

阶段1:市场快照入库(当前,P0

改动文件:market_watch.py

market_watch.py 修改:
  1. 采集 90 个板块数据后
  2. 写 market.json(保留,兼容现有管道)
  3. 同时 INSERT INTO market_snapshots + sector_snapshots

验证标准:

  • market_watch 跑完后,mofin.db 中 market_snapshots 增加一条
  • sector_snapshots 有 90 行对应数据
  • 现有 pipeline 不受影响(继续读 market.json

阶段2:个股K线入库(P1

改动文件:refresh_mtf_cache.py

  • 将 multi_tf_cache.json 的数据同时写入 stock_daily / weekly / monthly
  • 补填 stocks 表和 stock_fundamentals 表

阶段3:板块成分映射(P1

新建脚本或集成到 market_watch

  • 从同花顺板块数据中提取成分股(ak.stock_board_industry_cons_em
  • 写入 stock_sectors 表
  • 建立个股 ↔ 板块的可查询关系

阶段4:业务表迁移(P2

  • holdings / watchlist / candidates / price_events 逐表迁移
  • 每表:JSON+SQLite 双写 → 验证 → 切到 SQLite

阶段5no_agent 查询脚本(P3

  • mofin_query.py "SELECT ..." → 输出格式化的报告
  • 定时预警:SQL 条件满足时推送通知
  • 示例查询见数据库架构文档

五、接口说明

market_watch.py 数据格式

输入:同花顺(akshare)90 个行业板块 输出字段(写入 sector_snapshots):

字段 来源 说明
name 板块名称 中文名,如"半导体"
change_pct 涨跌幅 百分比,THS 源直接可用,EM 源需÷100
up_count 上涨家数 仅 THS 源有
down_count 下跌家数 仅 THS 源有
net_inflow 资金净流入(亿) 仅 THS 源有
lead_stock 领涨股 仅 THS 源有
lead_stock_change 领涨股涨跌幅 仅 THS 源有

腾讯 API 个股查询

curl -s --noproxy '*' "http://qt.gtimg.cn/q=sh688981"
# 返回 v_sh688981="1~中芯国际~688981~140.50~...~...~...~字段32=涨跌幅"
# 第4字段 = 当前价,第32字段 = 涨跌幅(%)

六、文件清单

项目文件

路径 说明
/home/hmo/web-dashboard/market_watch.py 市场数据采集(本阶段改动)
/home/hmo/web-dashboard/market_screener.py 已暂停,暂不涉及
/home/hmo/web-dashboard/refresh_mtf_cache.py 下一阶段改动
/home/hmo/web-dashboard/data/mofin.db 目标数据库(待创建)

文档

路径 说明
docs/mofin-database-architecture.md 完整数据库架构设计
docs/market-screening-pipeline.md 当前筛选流程与提示词
docs/market-screening-system-design.md 筛选系统设计过程
docs/market-data-requirements.md 原始需求(部分已实现)
docs/strategy-evaluation-requirements.md 策略评估需求

七、当前任务(笑笑接手)

第一件事:阶段1 - market_watch.py 改双写

  1. 在 data/ 下创建 mofin.dbSQLite
  2. 执行建表 SQLCREATE TABLE market_snapshots + sector_snapshots + 索引)
  3. 修改 market_watch.py 的 main()
    • 采集板块数据后
    • 写 market.json(已有逻辑,不动)
    • 新增:INSERT market_snapshots(获取 id
    • 新增:逐板块 INSERT sector_snapshots
  4. 验证:手动跑一次 market_watch.py,检查数据库有数据
  5. 编写验证脚本 mofin_query.py,支持:
    python3 mofin_query.py "半导体最近5次采集的涨跌幅"
    # 输出:时间 | 涨跌幅 | 净流入
    

第二件事:搭建开发环境

  • 项目在 /home/hmo/web-dashboard/
  • Python 3.12,标准库 sqlite3
  • 需要申请访问 Samba 共享 \192.168.1.246\hmo-home
  • 读 docs/ 下的全部文档了解全貌