9.0 KiB
9.0 KiB
自选股分组管理使用说明
功能概述
自选股分组管理功能允许用户将股票分类到不同的分组中,实现更精细的股票管理。
核心特性
✅ 多分组支持 - 预设 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. 获取所有分组
GET /api/watchlist/groups
响应示例:
{
"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. 创建新分组
POST /api/watchlist/groups
Content-Type: application/json
{
"name": "科技股",
"description": "科技板块相关",
"color": "purple"
}
可选颜色: red, blue, green, purple, orange, yellow
3. 更新分组信息
PUT /api/watchlist/groups/{group_id}
Content-Type: application/json
{
"name": "新名称",
"description": "新描述",
"color": "green"
}
4. 删除分组
DELETE /api/watchlist/groups/{group_id}
注意: 默认分组不能删除,删除分组会同时删除分组内的所有股票。
5. 重新排序分组
POST /api/watchlist/groups/reorder
Content-Type: application/json
{
"group_ids": [2, 1, 3, 4]
}
6. 获取分组内的股票
GET /api/watchlist/groups/{group_id}/stocks?with_quotes=true
参数:
with_quotes(bool): 是否包含实时行情,默认 true
响应示例:
{
"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. 添加股票到分组
POST /api/watchlist/groups/{group_id}/stocks
Content-Type: application/json
{
"code": "600519",
"note": "优质白马股"
}
8. 批量添加股票
POST /api/watchlist/groups/{group_id}/stocks/batch
Content-Type: application/json
{
"codes": ["600519", "300750", "002594"]
}
响应示例:
{
"ok": true,
"added": 3,
"skipped": 0
}
9. 从分组中移除股票
DELETE /api/watchlist/stocks/{item_id}
10. 移动股票到另一个分组
POST /api/watchlist/stocks/{item_id}/move
Content-Type: application/json
{
"target_group_id": 2
}
11. 更新股票备注
PUT /api/watchlist/stocks/{item_id}/note
Content-Type: application/json
{
"note": "待突破压力位"
}
12. 重新排序股票
POST /api/watchlist/stocks/reorder
Content-Type: application/json
{
"item_ids": [3, 1, 2, 5, 4]
}
13. 跨分组搜索股票
GET /api/watchlist/search?keyword=茅台
响应示例:
{
"ok": true,
"results": [
{
"id": 1,
"code": "600519",
"name": "贵州茅台",
"group_id": 1,
"group_name": "核心自选",
"group_color": "red",
"note": "长期持有"
}
]
}
使用示例
示例 1: 创建分组并添加股票
# 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: 移动股票到不同分组
# 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: 添加备注并排序
# 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]}'
初始化
首次使用
cd backend
source .venv/bin/activate
python cli.py init
这会自动创建 4 个默认分组:
- 核心自选 (红色) - 重点关注的核心股票
- 观察池 (蓝色) - 待观察的潜力股
- 持仓股 (绿色) - 当前持仓的股票
- 概念股 (紫色) - 热门概念板块
数据迁移
如果你之前使用的是旧版 watchlist.json 文件,可以通过以下方式迁移:
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}
)
最佳实践
分组建议
- 核心自选 - 重点关注、深度研究的 10-20 只股票
- 观察池 - 符合选股条件但尚未买入的 20-50 只
- 持仓股 - 当前实际持仓的股票
- 概念股 - 按热点题材分类(新能源、半导体、医药等)
使用技巧
- 定期清理: 每周清理观察池中不再关注的股票
- 备注记录: 记录买入理由、目标价、止损位等关键信息
- 排序管理: 按重要性或涨跌幅排序,优先级高的放前面
- 分组配色: 用颜色快速识别分组性质(红=重点,蓝=观察,绿=持仓)
与其他功能集成
与预警系统集成
为分组内的股票批量设置预警:
# 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}'
与回测系统集成
批量回测分组内的股票:
# 获取分组内股票列表,逐个回测
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年
功能状态: ✅ 已完成并测试