aa0f740381
完整数据采集+分析管道: - market_watch.py:90行业板块采集(同花顺/东方财富) - 市场精选推荐 cron:全市场分析+候选池+星级推荐 - price_monitor.py:持仓/自选高频价格监控 - refresh_mtf_cache.py:多周期K线缓存 - 策略评估/知识萃取管道 文档:docs/ 含完整需求+架构设计 注意:尚未配置 git remote,笑笑接手后自行配置
6.2 KiB
6.2 KiB
title, tags, status, priority, created
| title | tags | status | priority | created | ||||
|---|---|---|---|---|---|---|---|---|
| MoFin 系统数据库统一 - 需求与实施计划 |
|
活跃 | P0(当前) | 2026-06-20 |
MoFin 系统数据库统一 - 需求与实施计划
一、当前状态
已完成的管道
market_watch.py(每30分,no_agent)
→ 拉取同花顺90个行业板块数据
→ 写入 market.json(最新快照,仅存当前值,无历史)
市场精选推荐-每日(16:00,LLM 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
阶段5:no_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 改双写
- 在 data/ 下创建 mofin.db(SQLite)
- 执行建表 SQL(CREATE TABLE market_snapshots + sector_snapshots + 索引)
- 修改 market_watch.py 的 main():
- 采集板块数据后
- 写 market.json(已有逻辑,不动)
- 新增:INSERT market_snapshots(获取 id)
- 新增:逐板块 INSERT sector_snapshots
- 验证:手动跑一次 market_watch.py,检查数据库有数据
- 编写验证脚本
mofin_query.py,支持:python3 mofin_query.py "半导体最近5次采集的涨跌幅" # 输出:时间 | 涨跌幅 | 净流入
第二件事:搭建开发环境
- 项目在 /home/hmo/web-dashboard/
- Python 3.12,标准库 sqlite3
- 需要申请访问 Samba 共享 \192.168.1.246\hmo-home
- 读 docs/ 下的全部文档了解全貌