Back to skills
extension
Category: Data & AnalyticsAPI key required

Stock Reporting Interaction

生成专业股票投资分析报告(盘前/盘后/研报/周报),渲染可视化图表,管理投资日志,提供自然语言问答式投资助理交互体验

personAuthor: wurituhubclawhub

报告与交互技能

本技能是投资分析体系的"表达层"——将技术分析、基本面分析、宏观分析、决策引擎的原始数据和结论,转化为人类可读、可操作、有吸引力的报告和交互体验。

设计原则

  1. 数据驱动叙事:不是堆砌数字,而是讲清"发生了什么→意味着什么→下一步怎么做"
  2. 分层表达:同一份数据,能以一句话摘要、段落总结、完整报告三种粒度输出
  3. 可视化优先:关键数据点尽可能以图表呈现
  4. 多渠道适配:同一报告能适配聊天消息、Canvas 展示、文件导出
  5. 交互式追问:支持用户基于报告内容继续追问
  6. 风险透明:所有报告必须包含免责声明和不确定性标注

触发条件

| 用户输入模式 | 激活功能 | |-------------|---------| | "今日盘前简报" / "开盘前看看" | 盘前报告 | | "今天复盘" / "收盘总结" | 盘后报告 | | "给我一份XX的深度研报" | 个股深度研报 | | "本周总结" / "周报" | 周度总结 | | "画个K线图" / "看看走势图" | 可视化图表 | | "记一下:今天买了XX" | 投资日志 | | "我的持仓怎么样" | 持仓回顾 | | "XX能买吗" / "大盘怎么看" | 自然语言问答 | | "提醒我XX跌到100块" | 价格预警 |

核心能力模块


模块一:自动化报告生成系统

1A. 盘前报告(每个交易日 08:30 通过 Cron 触发)

调用:

python3 {baseDir}/tools/report_generator.py --type premarket --date today

报告结构:

📋 盘前简报 | 2026-04-06 周一
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🌍 隔夜全球市场
  · 美股: 道指 +0.3%, 纳指 -0.2%, 标普 +0.1%
  · 欧股: 德DAX +0.5%, 英富时 +0.2%
  · 亚太: 日经 +1.1%, 恒指 -0.5%
  · 大宗: 原油 $78.5(+1.2%), 黄金 $2350(-0.3%)
  · 汇率: 美元指数 104.2, 离岸人民币 7.23

📊 A股盘前信号
  · 富时A50期货: +0.35%(偏多开盘预期)
  · 北向资金预判: 昨日净流入+45亿,连续3日流入
  · 融资余额: 1.62万亿(+0.2%)

🔥 今日关注
  · 重要数据: 3月PMI数据公布
  · 政策动态: 国常会讨论促消费政策
  · 行业事件: 苹果WWDC倒计时,消费电子关注
  · 解禁提示: XX股份 5亿市值解禁

📈 策略建议
  · 大盘预判: 小幅高开震荡,关注3280支撑
  · 板块关注: AI算力(政策催化)、消费(政策预期)
  · 风险提示: PMI数据若低于预期可能引发调整

⚠️ 以上分析仅供参考,不构成投资建议

1B. 盘后报告(每个交易日 15:30 通过 Cron 触发)

python3 {baseDir}/tools/report_generator.py --type postmarket --date today

报告结构:

📋 盘后复盘 | 2026-04-06 周一
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📊 今日行情概览
  · 上证指数: 3285.60 (+0.82%) 成交4520亿
  · 深证成指: 10580.30 (+1.15%) 成交5830亿
  · 创业板指: 2150.80 (+1.45%)
  · 北向资金: 净买入 +62.3亿
  · 涨跌比: 3680:1420, 涨停62家, 跌停5家

🔍 今日复盘要点

  1️⃣ 行情定性
     量价齐升放量上攻,市场赚钱效应良好
     成交量较昨日放大18%,突破5日均量

  2️⃣ 领涨板块 TOP5
     | 板块 | 涨幅 | 资金净流入 | 核心驱动 |
     |------|------|-----------|---------|
     | AI算力 | +4.2% | +38亿 | 政策+业绩 |
     | 消费电子 | +3.1% | +22亿 | 苹果产业链 |
     | ...  | ...  | ... | ... |

  3️⃣ 资金动向
     · 北向大幅流入,偏好消费+科技
     · 主力资金净流入TOP: 中际旭创、立讯精密...
     · 融资买入前三: ...

  4️⃣ 明日展望
     · 技术面: 站稳3280,上方关注3320阻力
     · 情绪面: 赚钱效应扩散,短线情绪偏暖
     · 风险点: 获利盘抛压、外围不确定性

📌 自选股异动提醒
  · 贵州茅台: +2.1% 放量突破20日线 ← 关注
  · 比亚迪: -1.5% 缩量回踩60日线 ← 观察支撑

⚠️ 以上分析仅供参考,不构成投资建议

1C. 个股深度研报

python3 {baseDir}/tools/report_generator.py --type deep-report --symbol 600519

报告结构(仿券商研报格式):

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
贵州茅台 (600519.SH) 深度分析报告
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📄 报告摘要
  评级: 📗 推荐关注 (综合评分 72/100)
  当前价: ¥1,680  |  合理估值区间: ¥1,520 - ¥1,850
  主要观点: 估值合理,基本面稳健,短期技术面偏多

━━ 一、公司概况 ━━
  行业: 白酒 | 市值: 2.1万亿 | 上市: 2001年
  核心产品: 飞天茅台、茅台1935、茅台王子
  竞争优势: 品牌壁垒、产能稀缺、提价能力

━━ 二、财务分析 ━━
  [财务数据表格: 5年营收/利润/现金流/ROE趋势]
  [杜邦分析分解]
  [财务健康度评分: 92/100]

━━ 三、估值分析 ━━
  [PE/PB/PEG/DCF 多维度估值]
  [历史估值分位图表]
  [估值评分: 65/100]

━━ 四、技术分析 ━━
  [K线走势分析]
  [关键指标信号]
  [技术评分: 72/100]

━━ 五、行业对标 ━━
  [vs 五粮液/泸州老窖/山西汾酒 对比表格]
  [竞争力雷达图数据]

━━ 六、风险提示 ━━
  1. 消费降级风险
  2. 行业政策风险
  3. 估值回调风险

━━ 七、投资建议 ━━
  [综合研判 + 操作建议 + 关键价位]

⚠️ 免责声明: ...
报告生成时间: 2026-04-06 16:00
数据截止日: 2026-04-06

1D. 周度总结

python3 {baseDir}/tools/report_generator.py --type weekly --week-end today

模块二:可视化图表系统

本模块利用 OpenClaw 的 Canvas 工具 + Python mplfinance/plotly 生成图表。

2A. 支持的图表类型

| 图表类型 | 工具命令 | 输出方式 | |---------|---------|---------| | K线+均线+成交量 | chart_renderer.py --type kline | Canvas / PNG 文件 | | MACD 指标图 | chart_renderer.py --type macd | Canvas / PNG 文件 | | 综合技术面板 (K线+MACD+KDJ+VOL) | chart_renderer.py --type dashboard | Canvas | | 估值分位数图 | chart_renderer.py --type valuation-band | PNG 文件 | | 行业对比雷达图 | chart_renderer.py --type radar | PNG 文件 | | 财务趋势图 | chart_renderer.py --type financial-trend | PNG 文件 | | 资金流向热力图 | chart_renderer.py --type capital-heatmap | Canvas | | 板块轮动图 | chart_renderer.py --type sector-rotation | Canvas | | 持仓组合饼图 | chart_renderer.py --type portfolio-pie | PNG 文件 | | 回测收益曲线 | chart_renderer.py --type backtest-curve | PNG 文件 |

2B. Canvas 交互式仪表盘

利用 OpenClaw Canvas 能力构建实时交互式看盘页面:

使用 canvas 工具:
  action: present
  target: {baseDir}/canvas/dashboard.html

Canvas 页面内嵌:
  - 实时指数行情面板
  - 自选股涨跌一览
  - 板块热力图
  - 资金流向可视化
  - 用户可点击切换不同指标/周期

2C. 图表渲染器实现

# 完整用法
python3 {baseDir}/tools/chart_renderer.py \
  --symbol 600519 \
  --type dashboard \
  --period daily \
  --count 120 \
  --indicators MA,MACD,KDJ,VOL \
  --output /tmp/chart_600519.png \
  --style dark \
  --annotations "2026-03-15:买入,2026-04-01:加仓"

模块三:自然语言投资问答系统

这是交互层的核心——让用户用自然语言提问,Agent 理解意图后调度合适的分析技能作答。

3A. 意图分类体系

python3 {baseDir}/tools/nlp_intent_parser.py --query "<用户原始输入>"

意图分类树:

用户输入
├── 行情查询类
│   ├── 实时行情 → "XX现在多少钱" "XX涨了吗"
│   ├── 指数行情 → "大盘多少点了" "创业板怎么样"
│   └── 板块行情 → "AI板块今天怎么样"
│
├── 分析请求类
│   ├── 技术分析 → "XX技术面怎么看" "MACD金叉了吗"
│   ├── 基本面分析 → "XX基本面如何" "PE高不高"
│   ├── 估值分析 → "XX贵不贵" "值这个价吗"
│   └── 综合分析 → "XX值得买吗" "帮我分析下XX"
│
├── 决策咨询类
│   ├── 买卖建议 → "能买吗" "该卖了吗" "止损位多少"
│   ├── 选股请求 → "推荐几只" "有什么好股票"
│   ├── 仓位建议 → "买多少合适" "仓位怎么配"
│   └── 策略咨询 → "定投好还是一把买" "该长线还是短线"
│
├── 报告请求类
│   ├── 定期报告 → "盘前简报" "收盘总结" "周报"
│   ├── 专题报告 → "深度研报" "行业对比"
│   └── 图表请求 → "画个K线图" "看看走势"
│
├── 管理操作类
│   ├── 自选股管理 → "加自选" "删自选" "自选列表"
│   ├── 预警设置 → "XX跌到100提醒我" "涨停板提醒"
│   ├── 日志记录 → "记一下买了XX" "今天的操作"
│   └── 回顾复盘 → "上周操作回顾" "这个月收益多少"
│
└── 知识问答类
    ├── 概念解释 → "什么是MACD" "PE和PB有什么区别"
    ├── 市场知识 → "打新怎么操作" "融资融券是什么"
    └── 策略学习 → "什么是价值投资" "趋势交易怎么做"

3B. 多轮对话管理

python3 {baseDir}/tools/dialogue_manager.py --session-id <会话ID> --query "<用户输入>"

多轮对话状态机:

状态1: 初始分析
  用户: "帮我分析一下贵州茅台"
  Agent: [输出综合分析报告]
  → 保存上下文: {symbol: 600519, analysis_type: comprehensive}

状态2: 追问深入
  用户: "估值是不是有点高了"
  Agent: [识别追问,补充详细估值分析]
  → 上下文: {symbol: 600519, focus: valuation}

状态3: 对比扩展
  用户: "和五粮液比呢"
  Agent: [识别对比意图,输出对标分析]
  → 上下文: {symbol: [600519, 000858], mode: compare}

状态4: 决策收敛
  用户: "那现在能买吗"
  Agent: [综合所有已分析维度,给出建议]
  → 上下文: {symbol: 600519, decision_requested: true}

状态5: 操作跟进
  用户: "好,帮我记一下,今天打算在1650附近买入"
  Agent: [写入投资日志]
  → 调用 journal_manager 持久化

对话管理规则 (写入 AGENTS.md):

### 投资问答对话规则

1. **记住上下文**: 同一会话中用户追问时,自动关联之前讨论的股票
2. **分层回答**:
   - 一句话问题 → 一段话回答
   - 分析请求 → 结构化报告
   - "详细说说" → 展开完整分析
3. **主动追问**: 当信息不足以给出建议时,主动问清楚:
   - "您是短线操作还是中长线持有?"
   - "您的风险承受能力如何?"
   - "目前已有仓位吗?"
4. **不确定性表达**:
   - 高置信度: "从XX指标来看,明确显示..."
   - 中置信度: "综合来看,倾向于认为..."
   - 低置信度: "目前信号比较混乱,建议观望..."
5. **永远不要**:
   - 承诺收益或保证不亏
   - 给出具体的买卖指令(只提供分析视角)
   - 忽略风险提示

模块四:数据叙事化引擎

将枯燥的数字和指标转化为人类易理解的故事性表达。

python3 {baseDir}/tools/data_narrator.py --data <分析结果JSON> --style <叙事风格>

4A. 叙事风格

| 风格 | 适用场景 | 示例 | |------|---------|------| | concise | 聊天消息、快问快答 | "茅台今天+2.1%,放量突破20日线,MACD金叉在即,短线偏多。" | | professional | 研报、正式报告 | "贵州茅台(600519)今日收报1680元,涨幅2.1%。成交量较前一交易日放大35%,价格成功突破20日均线阻力位(1655元),MACD指标DIF线上穿DEA线形成金叉形态,短期技术面转为偏多格局。" | | educational | 新手引导、概念解释 | "茅台今天涨了2.1%——这其实挺有意思的。你看它的成交量比昨天多了35%,这说明有更多资金在这个价位愿意买入。而且它突破了20日均线,这在技术分析中通常是一个积极信号..." | | actionable | 决策建议 | "🟢 茅台短线看多。关键信号:放量突破MA20+MACD金叉。操作建议:可在1660-1670区间轻仓试多,止损1640,目标1720。" |

4B. 数据叙事化规则

# 核心转换逻辑
NARRATIVE_RULES = {
    # 涨跌幅描述
    "change": {
        (5, float('inf')):    "大涨 / 强势拉升",
        (3, 5):               "明显上涨",
        (1, 3):               "小幅上涨",
        (-1, 1):              "窄幅震荡",
        (-3, -1):             "小幅下跌",
        (-5, -3):             "明显下跌",
        (float('-inf'), -5):  "大跌 / 急挫",
    },
    # 成交量描述
    "volume_ratio": {
        (3, float('inf')):    "巨量(异常放大)",
        (2, 3):               "显著放量",
        (1.3, 2):             "温和放量",
        (0.8, 1.3):           "量能平稳",
        (0.5, 0.8):           "缩量",
        (0, 0.5):             "极度缩量(地量)",
    },
    # PE 估值描述
    "pe_percentile": {
        (0, 0.1):   "估值极低(历史底部区域)",
        (0.1, 0.3): "估值偏低",
        (0.3, 0.7): "估值合理",
        (0.7, 0.9): "估值偏高",
        (0.9, 1.0): "估值极高(历史顶部区域)",
    },
}

模块五:投资日志系统

利用 OpenClaw 的 Memory 机制memory/YYYY-MM-DD.md + MEMORY.md)构建持久化投资日志。

5A. 日志类型

python3 {baseDir}/tools/journal_manager.py --action <操作> [--params ...]

| 操作 | 命令 | 说明 | |------|------|------| | 记录交易 | --action log-trade --symbol 600519 --direction buy --price 1660 --shares 100 --reason "放量突破MA20" | 记录买卖操作 | | 记录观察 | --action log-observation --content "AI板块回调,关注低吸机会" | 记录市场观察 | | 记录决策 | --action log-decision --content "决定减仓半导体,增持消费" | 记录仓位决策 | | 查看日志 | --action view --date today | 查看当日日志 | | 搜索日志 | --action search --query "茅台 买入" | 搜索历史日志 | | 操作复盘 | --action review --period 30d | 30天操作回顾 | | 盈亏统计 | --action pnl --period 30d | 30天盈亏统计 |

5B. 日志存储格式(memory/YYYY-MM-DD.md 投资区)

## 📈 投资日志

### 交易记录
| 时间 | 操作 | 代码 | 名称 | 价格 | 数量 | 原因 |
|------|------|------|------|------|------|------|
| 09:35 | 买入 | 600519 | 贵州茅台 | 1660 | 100 | 放量突破MA20,MACD金叉 |
| 14:20 | 卖出 | 300750 | 宁德时代 | 185 | 200 | 触及止盈位,缩量滞涨 |

### 市场观察
- AI算力板块持续强势,中际旭创3连板
- 北向资金连续4日流入,偏好消费+科技
- PMI数据超预期,周期股有反弹

### 操作反思
- ✅ 茅台买入时机不错,放量突破确认后入场
- ⚠️ 宁德卖早了一点,但纪律优先,止盈不是错
- 📝 教训:板块轮动加快,不宜恋战,控制持仓周期

5C. 长期记忆(MEMORY.md 投资区)

通过 OpenClaw Memory Dreaming 机制自动提炼:

## 📊 投资偏好与记录

### 风险偏好
- 类型: 稳健型
- 单只最大仓位: 15%
- 止损纪律: -8% 强制止损

### 关注板块
- 长期看好: AI算力、新能源、消费
- 回避: 地产、教育

### 自选股
| 代码 | 名称 | 加入日期 | 加入理由 | 关注价位 |
|------|------|---------|---------|---------|
| 600519 | 贵州茅台 | 2026-03-01 | 价值投资标的 | 支撑1600,阻力1800 |
| 300750 | 宁德时代 | 2026-03-15 | 新能源龙头 | 支撑170,阻力200 |

### 历史操作统计
- 2026年3月: 操作12次,胜率58%,总收益+3.2%
- 最佳操作: 3/10买入茅台 +5.2%
- 最差操作: 3/22追高半导体 -6.1%
- 教训总结: 追高成功率低于30%,优先在支撑位附近入场

模块六:预警与推送系统

利用 OpenClaw Cron Jobs + Channel 分发 实现多渠道推送。

6A. 预警类型

python3 {baseDir}/tools/alert_dispatcher.py --action set --type <类型> --params <参数JSON>

| 预警类型 | 触发条件 | 推送内容 | |---------|---------|---------| | 价格预警 | 股价突破/跌破指定价位 | "⚠️ 茅台已跌破1600,当前1595,触及你设置的预警价" | | 涨跌幅预警 | 日涨跌幅超过阈值 | "🔔 宁德时代今日涨幅已达+7.2%,注意是否止盈" | | 技术信号预警 | MACD金叉/死叉、均线突破等 | "📈 比亚迪MACD日线金叉,可关注" | | 资金异动预警 | 北向资金/主力资金大幅变动 | "🔔 北向资金今日净卖出超100亿,注意风险" | | 财报公告预警 | 关注股票发布财报/重大公告 | "📋 茅台发布2026Q1财报,营收同比+15%" | | 持仓浮亏预警 | 持仓浮亏达到止损线 | "🔴 你持有的XX浮亏已达-8%,建议执行止损" | | 大盘风险预警 | 大盘急跌/情绪指标极端 | "⚠️ 上证指数跌破3200,跌幅-2.5%,市场恐慌" |

6B. Cron Job 配置

# 盘前报告 — 每个交易日 08:30
openclaw cron add \
  --name stock-premarket-report \
  --cron "30 8 * * 1-5" \
  --tz Asia/Shanghai \
  --timeout-seconds 120 \
  --announce \
  --message "执行盘前简报生成。按照 stock_reporting_interaction 技能的盘前报告流程执行。"

# 盘后报告 — 每个交易日 15:30
openclaw cron add \
  --name stock-postmarket-report \
  --cron "30 15 * * 1-5" \
  --tz Asia/Shanghai \
  --timeout-seconds 180 \
  --announce \
  --message "执行盘后复盘报告生成。按照 stock_reporting_interaction 技能的盘后报告流程执行。"

# 预警扫描 — 交易时段每5分钟
openclaw cron add \
  --name stock-alert-scanner \
  --cron "*/5 9-15 * * 1-5" \
  --tz Asia/Shanghai \
  --timeout-seconds 60 \
  --message "扫描所有活跃预警规则,检查是否有触发条件满足。仅报告触发的预警。"

# 周报 — 每周五 16:00
openclaw cron add \
  --name stock-weekly-report \
  --cron "0 16 * * 5" \
  --tz Asia/Shanghai \
  --timeout-seconds 300 \
  --announce \
  --message "生成本周投资周报。汇总本周大盘走势、操作记录、盈亏统计、下周展望。"

6C. 多渠道分发

利用 OpenClaw 的 Channel 系统(Discord/Telegram/WhatsApp/Feishu):

报告分发策略:
├── 即时消息 (Telegram/WhatsApp/Discord)
│   ├── 预警通知 → 即时推送,简短格式
│   ├── 盘前/盘后简报 → 结构化消息,可读性优先
│   └── 问答回复 → 自适应长度
│
├── Canvas (桌面端)
│   ├── 交互式仪表盘 → dashboard.html
│   ├── K线图 → kline-chart.html
│   └── 持仓视图 → portfolio-view.html
│
├── 文件导出
│   ├── Markdown → 日常报告
│   ├── HTML → 带图表的研报
│   └── PNG → 图表单独导出
│
└── Memory 持久化
    ├── 日志 → memory/YYYY-MM-DD.md
    └── 长期记忆 → MEMORY.md (Dreaming 自动提炼)

模块七:回答质量控制系统

7A. 分层表达引擎

同一份分析数据,根据上下文自动选择表达粒度:

Level 1 — 一句话 (适合预警、快速问答)
┌─────────────────────────────────────────────────┐
│ "茅台短线偏多,MACD金叉+放量突破MA20,评分72分" │
└─────────────────────────────────────────────────┘

Level 2 — 摘要段落 (适合聊天回复)
┌─────────────────────────────────────────────────┐
│ 贵州茅台(600519)短线技术面偏多。今日放量上涨     │
│ 2.1%,成功突破20日均线阻力位,MACD日线形成金叉,  │
│ KDJ指标处于中性区间尚有上行空间。上方阻力关注     │
│ 1720元(前高),下方支撑1640元(MA20)。综合技术   │
│ 评分72/100。                                     │
│ ⚠️ 仅供参考,不构成投资建议                       │
└─────────────────────────────────────────────────┘

Level 3 — 完整报告 (适合研报请求)
┌─────────────────────────────────────────────────┐
│ [完整结构化报告,含所有维度分析]                   │
│ [数据表格 + 图表 + 风险提示 + 操作建议]           │
│ [5000-10000字]                                   │
└─────────────────────────────────────────────────┘

选择逻辑:

if 用户问题 < 10字 且 是简单查询 → Level 1
elif 用户明确要求"详细" or "深度" or "研报" → Level 3
elif 多轮对话中的追问 → Level 2
else → Level 2 (默认)

7B. 免责声明系统

DISCLAIMERS = {
    "standard": "⚠️ 以上分析仅供参考,不构成投资建议。股市有风险,投资需谨慎。",

    "decision": "⚠️ 以上分析基于公开数据和量化模型,仅供学习和参考。\n"
                "任何投资决策请独立判断并承担相应风险。\n"
                "历史表现不代表未来收益。",

    "alert": "⚠️ 预警触发不代表必须操作,请结合自身判断。",

    "backtest": "⚠️ 回测结果基于历史数据,存在过拟合风险,不代表未来表现。\n"
                "实盘交易还需考虑滑点、手续费、冲击成本等因素。",
}

# 根据内容类型自动附加
def attach_disclaimer(content: str, content_type: str) -> str:
    disclaimer = DISCLAIMERS.get(content_type, DISCLAIMERS["standard"])
    return f"{content}\n\n---\n{disclaimer}"

7C. 置信度标注体系

每个分析结论都必须标注置信度:

| 置信度 | 标记 | 使用条件 | |-------|------|---------| | 🟢 高 | [置信度: 高] | 多个维度信号一致,数据充分,历史规律明确 | | 🟡 中 | [置信度: 中] | 部分维度一致,存在某些不确定因素 | | 🔴 低 | [置信度: 低] | 信号冲突,数据不足,或处于市场极端情况 |