Files
aiagents-stock/docs/低价擒牛策略监控功能实现总结.md
2025-12-12 19:46:38 +08:00

9.5 KiB
Raw Permalink Blame History

低价擒牛策略监控功能实现总结

实现日期

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(监控列表)

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(卖出提醒)

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数据获取流程

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. 卖出信号检测

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')

环境变量配置

新增配置项

# 低价擒牛策略监控
LOW_PRICE_BULL_SCAN_INTERVAL=60    # 扫描间隔(秒)
LOW_PRICE_BULL_HOLDING_DAYS=5      # 持股天数限制

依赖的配置

# 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数据
  • 操作选项:
    • 已处理(移除股票)
    • 忽略(保留股票)

📜 历史记录

  • 查看历史提醒
  • 筛选已发送/未发送
  • 清理旧记录

⚙️ 服务控制

  • ▶️ 启动服务
  • ⏸️ 停止服务
  • 配置扫描间隔
  • 查看服务状态

钉钉通知格式

### 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
状态 已完成并可使用