Install
openclaw skills install stock-analysis-and-review-wechat股票分析与自我复盘工具(适配微信插件),用于A股/港股/美股的收盘复盘、持仓盘点、建仓评估和消息面梳理。支持实时数据获取(腾讯财经/新浪财经接口)、持仓盈亏计算、技术分析、定时任务集成和微信推送。适用于个人投资者进行每日盘后分析和投资决策辅助。
openclaw skills install stock-analysis-and-review-wechat专业的股市复盘分析框架,帮助投资者系统性地进行每日盘后总结和投资决策。
Step 1: 大盘概览 → 获取指数数据、成交额、涨跌分布
Step 2: 持仓盘点 → 计算各标的盈亏、收益率、预警状态
Step 3: 建仓评估 → 评估备选标的建仓条件
Step 4: 消息面 → 梳理国内外财经新闻影响
Step 5: 策略建议 → 给出明日操作计划和风险提示
推荐接口(稳定、无需认证、实时):
# 腾讯财经实时行情接口
curl -s "https://qt.gtimg.cn/q=sh600919,sz159819,sh510310"
返回格式解析:
v_sh600919="1~江苏银行~600919~10.78~...";
# 字段顺序: 0=未知,1=名称,2=代码,3=当前价,4=昨收,5=今开...
ETF代码前缀规则:
sh (上海) / sz (深圳)hk (如 hk00700 腾讯)关键字段索引(腾讯财经):
| 索引 | 含义 | 示例 |
|---|---|---|
| 1 | 股票名称 | 江苏银行 |
| 2 | 股票代码 | 600919 |
| 3 | 当前价格 | 10.78 |
| 4 | 昨日收盘 | 10.70 |
| 5 | 今日开盘 | 10.72 |
| 33 | 今日最高 | 10.85 |
| 34 | 今日最低 | 10.65 |
| 38 | 市盈率 | 5.23 |
解析示例(Python):
import requests
def get_stock_data(codes):
"""获取股票实时数据"""
url = f"https://qt.gtimg.cn/q={','.join(codes)}"
resp = requests.get(url, timeout=10)
data = {}
for line in resp.text.strip().split(';'):
if not line.strip():
continue
parts = line.split('="')
if len(parts) == 2:
code = parts[0].replace('v_', '')
fields = parts[1].rstrip('"').split('~')
data[code] = {
'name': fields[1],
'price': float(fields[3]),
'prev_close': float(fields[4]),
'change_pct': round((float(fields[3]) - float(fields[4])) / float(fields[4]) * 100, 2)
}
return data
持仓盈亏公式:
持仓盈亏 = (当前价 - 成本价) × 持仓数量
收益率 = (当前价 - 成本价) / 成本价 × 100%
市值计算(ETF注意单位):
# ETF份额 vs 股票股数
total_value = sum(position['quantity'] * position['current_price'] for position in portfolio)
OpenClaw定时任务格式:
openclaw cron add \
--name stock-daily-review \
--cron "5 15 * * 1-5" \
--agent main \
--message "执行股市收盘复盘:1) 获取大盘数据 2) 盘点持仓 3) 评估建仓标的 4) 更新MEMORY.md" \
--description "工作日收盘后自动复盘"
推荐监控时间点:
问题: 新浪财经接口偶尔返回空数据或格式变化
解决:
qt.gtimg.cn)问题: ETF代码有时需要sh/sz前缀,有时不需要
解决:
sh510310 / sz159819hk: hk00700AAPL问题: API返回格式变化导致解析失败
解决:
# 健壮的解析代码
try:
fields = line.split('="')[1].rstrip('"').split('~')
price = float(fields[3]) if fields[3] else 0.0
except (IndexError, ValueError) as e:
print(f"解析失败: {line}, 错误: {e}")
continue
问题: 使用复杂delivery payload导致消息发送失败
解决:
问题: 定时任务创建时 --accountId 和 --to 参数被错误地拼接到 --message 中,导致消息无法发送
错误示例:
# ❌ 错误 - accountId和to被当作message内容
openclaw cron add \
--message "执行任务...,accountId:xxx,to:xxx" # 这会导致 delivery 缺失!
正确做法:
# ✅ 正确 - 使用 announce + last 模式,自动推送到最后活跃通道
openclaw cron add \
--name stock-monitor-am \
--cron "0 10,11 * * 1-5" \
--agent main \
--message "执行股票监控任务" \
--description "早盘监控"
# delivery 默认: {mode: "announce", channel: "last"}
排查方法:
openclaw cron list (状态为 error 表示有问题)grep "Action send requires a target" /tmp/openclaw/openclaw-*.log修复步骤:
# 1. 删除旧任务
openclaw cron remove stock-monitor-am
openclaw cron remove stock-monitor-pm
# 2. 重新创建(使用正确格式)
openclaw cron add --name stock-monitor-am --cron "0 10,11 * * 1-5" \
--agent main --message "执行早盘监控" --description "早盘监控 10:00/11:00"
经验: 不要手动指定 delivery 的 accountId 和 to,使用 announce + last 模式让系统自动推送到当前对话
问题: 记录时混淆"份数"和"金额"
解决:
数量|成本价|当前价问题: Markdown表格在微信手机端显示混乱,需要频繁左右滑动
解决: 转换为树形文本格式
对比示例:
# ❌ 表格格式(手机端体验差)
| 标的 | 数量 | 成本 | 现价 | 盈亏 | 收益率 | 状态 |
|------|------|------|------|------|--------|------|
| 电池ETF | 15200 | 0.946 | 1.055 | +1656 | +11.5% | 盈利 |
# ✅ 树形格式(手机端友好)
**💼 持仓概览**
🔋 **电池ETF** | 15,200份 | **+11.5%** (+¥1,656)
├─ 成本: ¥0.946 → 现价: ¥1.055
└─ 今日: +2.54% 📈
格式转换原则:
├─ └─ 增强层次感问题: 任务状态变为 error 后无法及时发现,导致多天收不到监控消息
解决: 建立定期检查机制
检查清单(每周执行一次):
# 1. 检查任务状态
openclaw cron list
# 2. 确认状态为 idle(不是 error/running)
# 3. 检查错误日志
grep "Action send requires a target" /tmp/openclaw/openclaw-*.log
建议: 将检查命令写入 HEARTBEAT.md,利用 OpenClaw 的 heartbeat 机制定期提醒检查
问题: 非交易日仍触发监控任务
解决:
import datetime
def is_trading_day():
"""判断是否为交易日"""
today = datetime.datetime.now()
# 周末休市
if today.weekday() >= 5:
return False
# 可扩展:调用交易日历API
return True
# 1. 先列出当前任务,确认没有重复
openclaw cron list
# 2. 删除旧任务(如果有)
openclaw cron remove stock-monitor-am
# 3. 创建新任务(简洁格式)
openclaw cron add \
--name stock-monitor-am \
--cron "0 10,11 * * 1-5" \
--agent main \
--message "执行早盘股票监控:检查持仓实时行情和建仓条件" \
--description "早盘监控 10:00/11:00"
创建后必须验证:
# 检查任务列表
openclaw cron list
# 确认以下字段:
# - Status: idle (不是 error)
# - Next: 显示正确的下次执行时间
# - Schedule: 与预期一致
任务状态为 error:
# 查看日志定位问题
grep "cron\|error\|Action send requires" /tmp/openclaw/openclaw-$(date +%Y-%m-%d).log
# 常见错误:
# - "Action send requires a target" → delivery 配置错误
# - "timeout" → 任务执行超时
消息未收到但任务状态正常:
openclaw gateway statusopenclaw cron trigger stock-monitor-am| 任务 | 时间 | 说明 |
|---|---|---|
| stock-monitor-am | 10:00, 11:00 | 早盘监控 |
| stock-monitor-pm | 13:00, 14:00, 15:00 | 午盘监控 |
| stock-daily-review | 15:10 | 收盘深度复盘 |
注意: 避免设置 9:30,因为 Gateway 启动可能未完成
**A股大盘表现**
- 上证指数: {sh_index}点 ({change_pct}%)
- 深证成指: {sz_index}点 ({change_pct}%)
- 创业板指: {cy_index}点 ({change_pct}%)
- 两市成交额: {volume}亿元
- 涨跌分布: 上涨{up_count}家 / 下跌{down_count}家
Markdown表格格式(适合PC/文档查看):
| 标的 | 持仓数量 | 成本价 | 最新价 | 持仓盈亏 | 收益率 | 状态 |
|------|---------|--------|--------|---------|--------|------|
| {name} | {qty} | ¥{cost} | ¥{price} | {pnl} | {return}% | {status} |
微信适配格式(推荐手机查看):
**💼 持仓概览**
🎯 **电池ETF** | 15,200份 | **+11.1%** (+¥1,594)
├─ 成本: ¥0.946 → 现价: ¥1.051
└─ 今日: +2.54% 📈
📈 **沪深300ETF** | 4,400份 | **+3.6%** (+¥704)
├─ 成本: ¥4.40 → 现价: ¥4.56
└─ 今日: +1.22% ✅
🏦 **江苏银行** | 700股 | **+20.2%** (+¥1,278)
├─ 成本: ¥8.99 → 现价: ¥10.82
└─ 距止盈¥11.50还差6.3%
**📊 汇总**: 市值¥64,213 | 总盈亏+¥4,685 (+7.87%)
微信格式优化要点:
状态标记:
| 标的 | 当前价 | 建仓线 | 触发条件 | 建议 |
|---|---|---|---|---|
| {name} | ¥{price} | ¥{line} | 跌3%以上 | 首次建仓500元 |
每次复盘后更新以下章节:
复盘报告可通过微信推送给用户。使用微信推送时请注意:
openclaw-weixin 插件版本 >= 1.0.xpnpm update -g openclawDelivery推送(推荐用于定时任务):
delivery:
mode: announce
channel: openclaw-weixin
to: "{user_id}@im.wechat" # 必填
accountId: "{account_id}" # 必填
Message工具推送(用于临时推送):
{
"action": "send",
"channel": "openclaw-weixin",
"to": "user_id@im.wechat",
"message": "复盘报告内容..."
}
详细指南参见 wechat_push.md
提醒:本工具仅供学习交流,不构成投资建议。投资有风险,入市需谨慎。