增加选股策略

This commit is contained in:
oficcejo
2025-12-12 19:46:38 +08:00
parent 595278100f
commit ad5865d3b4
25 changed files with 4818 additions and 20 deletions
@@ -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
**状态**:✅ 已完成并可使用