366 lines
9.5 KiB
Markdown
366 lines
9.5 KiB
Markdown
# 低价擒牛策略监控功能实现总结
|
||
|
||
## 实现日期
|
||
2024-12-12
|
||
|
||
## 功能概述
|
||
为"低价擒牛"选股板块添加策略监控功能,实现自动监控持仓股票并在满足卖出条件时发送提醒。
|
||
|
||
## 核心功能
|
||
|
||
### 1. 策略监控
|
||
- ✅ 加入监控:在选出的股票列表中点击"加入策略监控"按钮
|
||
- ✅ 自动扫描:每分钟扫描1次(可配置)
|
||
- ✅ 持股天数监控:持股满5天第6天开盘提醒卖出
|
||
- ✅ 均线监控:MA5下穿MA20提醒卖出
|
||
- ✅ 自动移除:提醒卖出后自动移出监控列表
|
||
|
||
### 2. 数据源集成
|
||
- ✅ TDX数据源:读取股票K线数据
|
||
- ✅ 均线计算:自动计算MA5和MA20
|
||
- ✅ 实时价格:获取最新股票价格
|
||
|
||
### 3. 通知系统
|
||
- ✅ 钉钉通知:自动发送卖出提醒到钉钉群
|
||
- ✅ 面板提醒:在监控面板显示待处理提醒
|
||
- ✅ 历史记录:保存所有提醒记录
|
||
|
||
## 新增文件
|
||
|
||
### 核心模块(3个Python文件)
|
||
|
||
1. **low_price_bull_monitor.py** (363行)
|
||
- 监控数据库管理
|
||
- 股票添加/移除
|
||
- 提醒生成和管理
|
||
- 持有天数更新
|
||
|
||
2. **low_price_bull_service.py** (310行)
|
||
- 后台监控服务
|
||
- 定时扫描循环
|
||
- TDX数据获取
|
||
- MA均线检测
|
||
- 钉钉通知发送
|
||
|
||
3. **low_price_bull_monitor_ui.py** (273行)
|
||
- 监控面板UI
|
||
- 服务控制(启动/停止)
|
||
- 监控列表展示
|
||
- 卖出提醒展示
|
||
- 历史记录查询
|
||
|
||
### 文档(2个Markdown文件)
|
||
|
||
1. **低价擒牛策略监控配置说明.md**
|
||
- 环境变量配置
|
||
- TDX数据源配置
|
||
- 使用流程说明
|
||
- 常见问题解答
|
||
|
||
2. **低价擒牛策略监控功能实现总结.md**
|
||
- 功能概述
|
||
- 技术实现
|
||
- 使用说明
|
||
|
||
## 修改文件
|
||
|
||
### low_price_bull_ui.py
|
||
- ✅ 添加导入语句
|
||
- ✅ 添加"策略监控"按钮(右上角)
|
||
- ✅ 在股票详情中添加"加入策略监控"按钮
|
||
- ✅ 集成监控面板切换
|
||
- ✅ 更新策略说明
|
||
|
||
## 数据库设计
|
||
|
||
### 表1: monitored_stocks(监控列表)
|
||
```sql
|
||
CREATE TABLE monitored_stocks (
|
||
id INTEGER PRIMARY KEY,
|
||
stock_code TEXT NOT NULL, -- 股票代码
|
||
stock_name TEXT NOT NULL, -- 股票名称
|
||
buy_price REAL NOT NULL, -- 买入价格
|
||
buy_date TEXT NOT NULL, -- 买入日期
|
||
holding_days INTEGER DEFAULT 0, -- 持有天数
|
||
status TEXT DEFAULT 'holding', -- 状态(holding/removed)
|
||
add_time TEXT NOT NULL, -- 加入时间
|
||
remove_time TEXT, -- 移除时间
|
||
remove_reason TEXT, -- 移除原因
|
||
UNIQUE(stock_code, status)
|
||
)
|
||
```
|
||
|
||
### 表2: sell_alerts(卖出提醒)
|
||
```sql
|
||
CREATE TABLE sell_alerts (
|
||
id INTEGER PRIMARY KEY,
|
||
stock_code TEXT NOT NULL, -- 股票代码
|
||
stock_name TEXT NOT NULL, -- 股票名称
|
||
alert_type TEXT NOT NULL, -- 提醒类型(holding_days/ma_cross)
|
||
alert_reason TEXT NOT NULL, -- 提醒原因
|
||
current_price REAL, -- 当前价格
|
||
ma5 REAL, -- MA5值
|
||
ma20 REAL, -- MA20值
|
||
holding_days INTEGER, -- 持有天数
|
||
alert_time TEXT NOT NULL, -- 提醒时间
|
||
is_sent INTEGER DEFAULT 0 -- 是否已发送
|
||
)
|
||
```
|
||
|
||
## 技术实现
|
||
|
||
### 1. 监控服务架构
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ LowPriceBullService │
|
||
│ (后台监控服务) │
|
||
└──────────────┬──────────────────────┘
|
||
│
|
||
┌──────▼──────┐
|
||
│ 监控循环 │
|
||
│ (每60秒) │
|
||
└──────┬──────┘
|
||
│
|
||
┌──────────▼─────────────┐
|
||
│ 扫描监控列表 │
|
||
│ - 更新持有天数 │
|
||
│ - 检查卖出条件 │
|
||
└──────────┬──────────────┘
|
||
│
|
||
┌──────────▼────────────────┐
|
||
│ 检测卖出信号 │
|
||
│ 1. 持股天数≥5 │
|
||
│ 2. MA5 < MA20 │
|
||
└──────────┬─────────────────┘
|
||
│
|
||
┌──────────▼──────────────┐
|
||
│ 生成卖出提醒 │
|
||
│ - 保存到数据库 │
|
||
│ - 发送钉钉通知 │
|
||
│ - 自动移除股票 │
|
||
└───────────────────────────┘
|
||
```
|
||
|
||
### 2. TDX数据获取流程
|
||
```python
|
||
def _get_stock_data(stock_code):
|
||
# 1. 获取K线数据(30天)
|
||
df = get_stock_kline_data(stock_code, period='daily', count=30)
|
||
|
||
# 2. 计算均线
|
||
df['MA5'] = df['close'].rolling(window=5).mean()
|
||
df['MA20'] = df['close'].rolling(window=20).mean()
|
||
|
||
# 3. 返回最新数据
|
||
latest = df.iloc[-1]
|
||
return latest['close'], latest['MA5'], latest['MA20']
|
||
```
|
||
|
||
### 3. 卖出信号检测
|
||
```python
|
||
def _check_stock(stock):
|
||
# 检查1: 持股天数
|
||
if holding_days >= 5:
|
||
add_sell_alert(type='holding_days')
|
||
return
|
||
|
||
# 检查2: MA5下穿MA20
|
||
current_price, ma5, ma20 = _get_stock_data(stock_code)
|
||
if ma5 < ma20:
|
||
add_sell_alert(type='ma_cross')
|
||
```
|
||
|
||
## 环境变量配置
|
||
|
||
### 新增配置项
|
||
```bash
|
||
# 低价擒牛策略监控
|
||
LOW_PRICE_BULL_SCAN_INTERVAL=60 # 扫描间隔(秒)
|
||
LOW_PRICE_BULL_HOLDING_DAYS=5 # 持股天数限制
|
||
```
|
||
|
||
### 依赖的配置
|
||
```bash
|
||
# Webhook通知(建议配置)
|
||
WEBHOOK_ENABLED=true
|
||
WEBHOOK_URL=https://oapi.dingtalk.com/robot/send?access_token=xxxxx
|
||
WEBHOOK_TYPE=dingtalk
|
||
WEBHOOK_KEYWORD=aiagents通知
|
||
```
|
||
|
||
## 使用流程
|
||
|
||
### 1. 启动流程
|
||
```
|
||
1. 低价擒牛选股
|
||
↓
|
||
2. 查看股票列表
|
||
↓
|
||
3. 点击"➕ 加入策略监控"
|
||
↓
|
||
4. 点击右上角"📊 策略监控"
|
||
↓
|
||
5. 点击"▶️ 启动监控服务"
|
||
↓
|
||
6. 监控服务开始运行
|
||
```
|
||
|
||
### 2. 监控流程
|
||
```
|
||
监控服务 → 每60秒扫描 → 检测条件 → 生成提醒 → 发送通知 → 自动移除
|
||
```
|
||
|
||
### 3. 提醒流程
|
||
```
|
||
满足卖出条件
|
||
↓
|
||
生成卖出提醒
|
||
↓
|
||
┌─────────┴─────────┐
|
||
│ │
|
||
发送钉钉通知 显示在面板
|
||
│ │
|
||
└─────────┬─────────┘
|
||
↓
|
||
自动移出监控列表
|
||
↓
|
||
记录到历史
|
||
```
|
||
|
||
## 功能特点
|
||
|
||
### 1. 自动化监控
|
||
- ✅ 无需人工盯盘
|
||
- ✅ 定时自动扫描
|
||
- ✅ 智能卖出提醒
|
||
|
||
### 2. 双重条件
|
||
- ✅ 时间条件:持股5天
|
||
- ✅ 技术条件:MA5下穿MA20
|
||
- ✅ 满足任一即提醒
|
||
|
||
### 3. 灵活配置
|
||
- ✅ 可调整扫描间隔
|
||
- ✅ 可调整持股天数
|
||
- ✅ 可启动/停止服务
|
||
|
||
### 4. 完整记录
|
||
- ✅ 监控历史
|
||
- ✅ 提醒记录
|
||
- ✅ 操作日志
|
||
|
||
## 监控面板功能
|
||
|
||
### 📋 监控列表
|
||
- 显示所有监控中的股票
|
||
- 实时更新持有天数
|
||
- 支持批量移除
|
||
- 显示买入价格和日期
|
||
|
||
### 🔔 卖出提醒
|
||
- 显示待处理提醒
|
||
- 查看MA5/MA20数据
|
||
- 操作选项:
|
||
- ✅ 已处理(移除股票)
|
||
- ❌ 忽略(保留股票)
|
||
|
||
### 📜 历史记录
|
||
- 查看历史提醒
|
||
- 筛选已发送/未发送
|
||
- 清理旧记录
|
||
|
||
### ⚙️ 服务控制
|
||
- ▶️ 启动服务
|
||
- ⏸️ 停止服务
|
||
- 配置扫描间隔
|
||
- 查看服务状态
|
||
|
||
## 钉钉通知格式
|
||
|
||
```markdown
|
||
### aiagents通知 - 低价擒牛卖出提醒
|
||
|
||
**股票代码**: 002259
|
||
|
||
**股票名称**: 升达林业
|
||
|
||
**提醒类型**: MA均线死叉
|
||
|
||
**提醒原因**: MA5下穿MA20,技术信号卖出
|
||
|
||
**当前价格**: 8.52元
|
||
|
||
**MA5**: 8.45
|
||
|
||
**MA20**: 8.67
|
||
|
||
**持有天数**: 3天
|
||
|
||
**提醒时间**: 2024-12-12 14:30:00
|
||
|
||
---
|
||
|
||
**建议**: 开盘时卖出该股票
|
||
|
||
_此消息由AI股票分析系统自动发送_
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
### 1. 服务运行
|
||
- ⚠️ 监控服务需要手动启动
|
||
- ⚠️ 关闭浏览器后服务停止
|
||
- ⚠️ 建议在服务器上运行
|
||
|
||
### 2. 数据源
|
||
- ⚠️ 需要配置TDX数据源
|
||
- ⚠️ 建议使用pytdx(无需配置)
|
||
- ⚠️ K线数据可能有延迟
|
||
|
||
### 3. 扫描频率
|
||
- ⚠️ 默认60秒扫描1次
|
||
- ⚠️ 不建议低于30秒
|
||
- ⚠️ 避免API限流
|
||
|
||
### 4. 持股天数
|
||
- ⚠️ 按自然日计算
|
||
- ⚠️ 不区分交易日
|
||
- ⚠️ 建议预留余地
|
||
|
||
## 后续优化方向
|
||
|
||
### 短期
|
||
- [ ] 支持后台常驻服务
|
||
- [ ] 增加更多技术指标
|
||
- [ ] 支持自定义卖出条件
|
||
|
||
### 中期
|
||
- [ ] 集成MiniQMT自动交易
|
||
- [ ] 支持止损止盈设置
|
||
- [ ] 增加回测功能
|
||
|
||
### 长期
|
||
- [ ] AI智能卖出建议
|
||
- [ ] 多策略组合监控
|
||
- [ ] 移动端APP推送
|
||
|
||
## 总结
|
||
|
||
本次实现为"低价擒牛"选股板块添加了完整的策略监控功能,包括:
|
||
|
||
- ✅ **3个核心模块**:监控管理、后台服务、UI界面
|
||
- ✅ **完整的数据库设计**:监控列表、提醒记录
|
||
- ✅ **自动化监控**:定时扫描、智能提醒、自动移除
|
||
- ✅ **双重卖出条件**:持股天数 + MA均线
|
||
- ✅ **钉钉通知集成**:实时接收卖出提醒
|
||
- ✅ **灵活的配置**:可调整扫描间隔和持股天数
|
||
- ✅ **完善的文档**:配置说明、使用指南
|
||
|
||
整个功能已集成到系统中,用户可以立即使用!
|
||
|
||
---
|
||
|
||
**实现完成时间**:2024-12-12
|
||
**版本**:v1.0
|
||
**状态**:✅ 已完成并可使用
|