增加选股策略
This commit is contained in:
@@ -0,0 +1,365 @@
|
||||
# 低价擒牛策略监控功能实现总结
|
||||
|
||||
## 实现日期
|
||||
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
|
||||
**状态**:✅ 已完成并可使用
|
||||
Reference in New Issue
Block a user