Files
MoFin/docs/REQUIREMENTS.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

190 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: MoFin 系统数据库统一 - 需求与实施计划
tags: [MoFin, 数据库, 需求文档, 当前工作]
status: 活跃
priority: P0(当前)
created: 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 个股查询
```bash
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`,支持:
```bash
python3 mofin_query.py "半导体最近5次采集的涨跌幅"
# 输出:时间 | 涨跌幅 | 净流入
```
**第二件事:搭建开发环境**
- 项目在 /home/hmo/web-dashboard/
- Python 3.12,标准库 sqlite3
- 需要申请访问 Samba 共享 \\192.168.1.246\hmo-home
- 读 docs/ 下的全部文档了解全貌