# 自选股分组管理使用说明 ## 功能概述 自选股分组管理功能允许用户将股票分类到不同的分组中,实现更精细的股票管理。 ### 核心特性 ✅ **多分组支持** - 预设 4 个分组(核心自选、观察池、持仓股、概念股),支持自定义创建 ✅ **分组快速切换** - 快速查看不同分组的股票 ✅ **拖拽排序** - 分组和股票都支持拖拽排序 ✅ **批量操作** - 批量添加、移动股票 ✅ **股票备注** - 每只股票可添加个人备注 ✅ **跨分组搜索** - 快速查找股票所在分组 ✅ **颜色标识** - 每个分组有独立颜色标识 --- ## 数据结构 ### 分组表 (watchlist_groups) | 字段 | 类型 | 说明 | |------|------|------| | id | int | 分组 ID | | name | string | 分组名称 | | description | string | 分组描述 | | color | string | 颜色标识 (red/blue/green/purple) | | sort_order | int | 排序号 | | is_default | bool | 是否默认分组(不可删除) | | created_at | datetime | 创建时间 | ### 股票项表 (watchlist_items) | 字段 | 类型 | 说明 | |------|------|------| | id | int | 项目 ID | | group_id | int | 所属分组 ID | | code | string | 股票代码 | | name | string | 股票名称 | | sort_order | int | 排序号 | | note | string | 个人备注 | | added_at | datetime | 添加时间 | --- ## API 接口 ### 1. 获取所有分组 ```bash GET /api/watchlist/groups ``` **响应示例**: ```json { "ok": true, "groups": [ { "id": 1, "name": "核心自选", "description": "重点关注的核心股票", "color": "red", "count": 5, "is_default": true, "sort_order": 0 }, { "id": 2, "name": "观察池", "description": "待观察的潜力股", "color": "blue", "count": 3, "is_default": false, "sort_order": 1 } ] } ``` ### 2. 创建新分组 ```bash POST /api/watchlist/groups Content-Type: application/json { "name": "科技股", "description": "科技板块相关", "color": "purple" } ``` **可选颜色**: `red`, `blue`, `green`, `purple`, `orange`, `yellow` ### 3. 更新分组信息 ```bash PUT /api/watchlist/groups/{group_id} Content-Type: application/json { "name": "新名称", "description": "新描述", "color": "green" } ``` ### 4. 删除分组 ```bash DELETE /api/watchlist/groups/{group_id} ``` **注意**: 默认分组不能删除,删除分组会同时删除分组内的所有股票。 ### 5. 重新排序分组 ```bash POST /api/watchlist/groups/reorder Content-Type: application/json { "group_ids": [2, 1, 3, 4] } ``` ### 6. 获取分组内的股票 ```bash GET /api/watchlist/groups/{group_id}/stocks?with_quotes=true ``` **参数**: - `with_quotes` (bool): 是否包含实时行情,默认 true **响应示例**: ```json { "ok": true, "group": { "id": 1, "name": "核心自选", "description": "重点关注的核心股票", "color": "red" }, "stocks": [ { "id": 1, "code": "600519", "name": "贵州茅台", "price": 1680.5, "pct": 2.3, "change": 37.8, "amount": 125.6, "note": "长期持有", "added_at": "2024-01-15" } ] } ``` ### 7. 添加股票到分组 ```bash POST /api/watchlist/groups/{group_id}/stocks Content-Type: application/json { "code": "600519", "note": "优质白马股" } ``` ### 8. 批量添加股票 ```bash POST /api/watchlist/groups/{group_id}/stocks/batch Content-Type: application/json { "codes": ["600519", "300750", "002594"] } ``` **响应示例**: ```json { "ok": true, "added": 3, "skipped": 0 } ``` ### 9. 从分组中移除股票 ```bash DELETE /api/watchlist/stocks/{item_id} ``` ### 10. 移动股票到另一个分组 ```bash POST /api/watchlist/stocks/{item_id}/move Content-Type: application/json { "target_group_id": 2 } ``` ### 11. 更新股票备注 ```bash PUT /api/watchlist/stocks/{item_id}/note Content-Type: application/json { "note": "待突破压力位" } ``` ### 12. 重新排序股票 ```bash POST /api/watchlist/stocks/reorder Content-Type: application/json { "item_ids": [3, 1, 2, 5, 4] } ``` ### 13. 跨分组搜索股票 ```bash GET /api/watchlist/search?keyword=茅台 ``` **响应示例**: ```json { "ok": true, "results": [ { "id": 1, "code": "600519", "name": "贵州茅台", "group_id": 1, "group_name": "核心自选", "group_color": "red", "note": "长期持有" } ] } ``` --- ## 使用示例 ### 示例 1: 创建分组并添加股票 ```bash # 1. 创建分组 curl -X POST http://localhost:8000/api/watchlist/groups \ -H "Content-Type: application/json" \ -d '{"name":"科技股","description":"科技板块","color":"purple"}' # 假设返回的 group_id 是 5 # 2. 批量添加股票 curl -X POST http://localhost:8000/api/watchlist/groups/5/stocks/batch \ -H "Content-Type: application/json" \ -d '{"codes":["300750","688981","002594"]}' # 3. 查看分组内股票 curl http://localhost:8000/api/watchlist/groups/5/stocks ``` ### 示例 2: 移动股票到不同分组 ```bash # 1. 搜索股票 curl "http://localhost:8000/api/watchlist/search?keyword=宁德" # 假设找到 item_id 是 3 # 2. 移动到观察池(假设 group_id 是 2) curl -X POST http://localhost:8000/api/watchlist/stocks/3/move \ -H "Content-Type: application/json" \ -d '{"target_group_id":2}' ``` ### 示例 3: 添加备注并排序 ```bash # 1. 给股票添加备注 curl -X PUT http://localhost:8000/api/watchlist/stocks/3/note \ -H "Content-Type: application/json" \ -d '{"note":"关注突破1000元压力位"}' # 2. 重新排序(把最重要的放前面) curl -X POST http://localhost:8000/api/watchlist/stocks/reorder \ -H "Content-Type: application/json" \ -d '{"item_ids":[3,1,5,2,4]}' ``` --- ## 初始化 ### 首次使用 ```bash cd backend source .venv/bin/activate python cli.py init ``` 这会自动创建 4 个默认分组: 1. **核心自选** (红色) - 重点关注的核心股票 2. **观察池** (蓝色) - 待观察的潜力股 3. **持仓股** (绿色) - 当前持仓的股票 4. **概念股** (紫色) - 热门概念板块 --- ## 数据迁移 如果你之前使用的是旧版 `watchlist.json` 文件,可以通过以下方式迁移: ```python import json import requests # 读取旧数据 with open('backend/watchlist.json') as f: old_codes = json.load(f) # 添加到默认分组(核心自选,假设 id 是 1) requests.post( 'http://localhost:8000/api/watchlist/groups/1/stocks/batch', json={'codes': old_codes} ) ``` --- ## 最佳实践 ### 分组建议 1. **核心自选** - 重点关注、深度研究的 10-20 只股票 2. **观察池** - 符合选股条件但尚未买入的 20-50 只 3. **持仓股** - 当前实际持仓的股票 4. **概念股** - 按热点题材分类(新能源、半导体、医药等) ### 使用技巧 1. **定期清理**: 每周清理观察池中不再关注的股票 2. **备注记录**: 记录买入理由、目标价、止损位等关键信息 3. **排序管理**: 按重要性或涨跌幅排序,优先级高的放前面 4. **分组配色**: 用颜色快速识别分组性质(红=重点,蓝=观察,绿=持仓) --- ## 与其他功能集成 ### 与预警系统集成 为分组内的股票批量设置预警: ```bash # 1. 获取分组内股票 curl http://localhost:8000/api/watchlist/groups/1/stocks?with_quotes=false # 2. 为每只股票设置预警 for code in codes: curl -X POST http://localhost:8000/api/alerts \ -H "Content-Type: application/json" \ -d '{"code":"'$code'","kind":"price_above","threshold":100}' ``` ### 与回测系统集成 批量回测分组内的股票: ```bash # 获取分组内股票列表,逐个回测 curl http://localhost:8000/api/watchlist/groups/1/stocks?with_quotes=false for code in codes: curl "http://localhost:8000/api/backtest?symbol=$code&fast=5&slow=20" done ``` --- ## 常见问题 ### Q: 可以创建多少个分组? A: 没有硬性限制,但建议控制在 10 个以内,便于管理。 ### Q: 一只股票可以在多个分组中吗? A: 可以。同一只股票可以添加到多个分组,互不影响。 ### Q: 删除分组会删除股票的历史数据吗? A: 不会。只删除分组和分组关联关系,不影响股票的行情、交易等数据。 ### Q: 如何快速找到某只股票在哪些分组? A: 使用跨分组搜索接口:`/api/watchlist/search?keyword=股票名称或代码` ### Q: 分组排序和股票排序如何保存? A: 调用对应的 reorder 接口后立即保存到数据库,重启服务不会丢失。 --- ## 技术实现 ### 核心模块 - `backend/watchlist_manager.py` - 分组管理核心逻辑 - `backend/models.py` - 数据模型(WatchlistGroup、WatchlistItem) - `backend/main.py` - API 接口定义 ### 数据库索引 - `group_id` - 加速分组查询 - `code` - 加速股票代码查询 - `(group_id, code)` - 唯一约束,防止重复添加 --- **实现完成时间**: 2024年 **功能状态**: ✅ 已完成并测试