🧪 Skills
Market Watch
Market monitoring and alert system for prices and news. Use when the user asks to watch a price, monitor market conditions, get notified when an asset hits a...
v1.2.1
Description
name: "market-watch" version: "1.2.1" description: "Market monitoring and alert system for prices and news. Use when the user asks to watch a price, monitor market conditions, get notified when an asset hits a target, or keep an eye on breaking news. Covers any USDT-paired crypto and A-shares (real-time via TongDaXin)." repository: "https://github.com/hchen13/market-watch"
Market Watch Skill
两类监控,共享同一套 alert 数据结构和通知回路:
| 类型 | 数据源 | 状态 |
|---|---|---|
| 价格盯盘 | HTTP 轮询(Binance/Hyperliquid/OKX/Bitget)+ CoinGecko fallback + pytdx(A股) | ✅ 已实现 |
| 新闻盯盘 | 金十数据、华尔街见闻(HTTP polling)+ CoinDesk/CoinTelegraph/The Block/Decrypt(RSS) | ✅ 已实现 |
数据源和精度
价格源
| 来源 | 协议 | 资产 | 延迟 |
|---|---|---|---|
| Binance | HTTP ticker(5s 轮询) | 任意 USDT 交易对(动态发现) | ~100ms |
| Hyperliquid | HTTP allMids(5s 轮询) | 全部 HL 上线资产(动态发现) | ~100ms |
| OKX | HTTP ticker(5s 轮询) | 任意 USDT SPOT(动态发现) | ~100ms |
| Bitget | HTTP ticker(5s 轮询) | 任意 USDT SPOT(动态发现) | ~100ms |
| pytdx | TCP 轮询(盘中 4s) | A股(沪深) | ~200ms |
| CoinGecko | HTTP 轮询(30s) | 全资产 fallback(动态发现) | 30s |
动态交易对发现: 守护进程启动时自动从各交易所拉取完整交易对列表,每小时刷新一次。任意 USDT 交易对的加密货币均自动支持,无需手动添加 symbol 映射。
Asset → Exchange 优先级(按 EXCHANGE_PRIORITY 顺序,动态计算每个资产的可用交易所):
- 绝大多数主流币: Binance → Hyperliquid → OKX → Bitget → CoinGecko
- HYPE: Hyperliquid → OKX → Bitget → CoinGecko(Binance 无 HYPEUSDT 交易对)
- XAUT: OKX → CoinGecko(地区限制可能影响 OKX)
- 任何新上线或长尾币种:自动检查各交易所,无需改代码
新闻源
| 来源 | 类型 | 说明 |
|---|---|---|
| 金十数据 | HTTP 轮询 | ⚠️ 非官方接口,格式随时可能变更 |
| 华尔街见闻 | HTTP 轮询 | ⚠️ 非官方接口,同上 |
| CoinDesk | RSS 2.0 | 官方 RSS feed |
| CoinTelegraph | RSS 2.0 | 官方 RSS feed |
| The Block | RSS 2.0 | 官方 RSS feed |
| Decrypt | RSS / Atom | 官方 feed |
Alert 数据结构
所有警报存入 ~/.openclaw/agents/{agent}/private/market-alerts.json。
公共字段(所有类型):
{
"id": "eth-1741234567",
"type": "price", // "price" | "news"
"status": "active", // active | triggered | cancelled
"one_shot": true,
"context_summary": "ETH减仓窗口:减3.5枚,套出换HYPE",
"session_key": "agent:laok:feishu:direct:ou_xxx",
"agent_id": "laok",
"reply_channel": "feishu",
"reply_to": "user:ou_xxx",
"transcript_file": "/path/to/session.jsonl",
"transcript_msg_id": "msg-id",
"created_at": "2026-03-12T13:00:00"
}
价格类额外字段:
{
"asset": "ETH",
"market": "crypto", // "crypto" | "astock"
"condition": ">=", // >= | <= | > | <
"target_price": 2150
}
新闻类额外字段:
{
"keywords": ["BTC ETF", "BlackRock", "比特币"],
"keyword_mode": "any", // "any" | "all"
"sources": ["coindesk", "cointelegraph", "jin10"],
"poll_interval": 300 // 秒,默认 300
}
价格盯盘工作流
设置价格警报
SKILL="$HOME/.openclaw/skills/market-watch/scripts"
python3 "$SKILL/register-price-alert.py" \
--agent laok \
--asset ETH \
--market crypto \
--condition ">=" \
--target 2150 \
--context-summary "ETH减仓窗口:减3.5枚ETH(OKX),套出约\$7,500买HYPE" \
--session-key "agent:laok:feishu:direct:ou_xxx" \
--reply-channel feishu \
--reply-to "user:ou_xxx"
参数说明:
--market:crypto(加密)或astock(A股,代码如600519)--condition:>=/<=/>/<--session-key: 用户的当前 session key(稳定标识,用于触发时找到正确 session)--reply-to: 飞书通知目标,格式user:ou_xxx--transcript-msg-id: 推荐填入当前对话的 message_id(触发时用于追溯设盘上下文)。agent 在注册警报时应传入当前消息的 ID,否则触发通知中「消息ID」字段将为空,无法精准跳转到设盘时的对话记录。
新闻盯盘工作流
设置新闻关键词警报
# 基础用法:监控任一关键词命中
python3 "$SKILL/register-news-alert.py" \
--agent laok \
--keywords "BTC ETF,BlackRock,ETF通过" \
--keyword-mode any \
--context-summary "盯 ETF 审批进展,可能触发价格上涨" \
--session-key "agent:laok:feishu:direct:ou_xxx" \
--reply-channel feishu \
--reply-to "user:ou_xxx"
# 一次性警报(发现即停,适合等待明确事件)
python3 "$SKILL/register-news-alert.py" \
--agent laok \
--keywords "停火,ceasefire,Iran deal" \
--one-shot \
--context-summary "等停火消息,判断是否影响风险资产"
# 仅监控特定来源
python3 "$SKILL/register-news-alert.py" \
--agent laok \
--keywords "HYPE,Hyperliquid" \
--sources "coindesk,cointelegraph,theblock,decrypt"
# 全部命中模式(需要所有关键词同时出现在同一条新闻中)
python3 "$SKILL/register-news-alert.py" \
--agent laok \
--keywords "BTC,ETF,SEC" \
--keyword-mode all
参数说明:
--keywords: 关键词,逗号分隔(支持中英文)--keyword-mode:any(任一命中)|all(全部命中),默认any--sources: 数据源,逗号分隔,可选:jin10, wallstreetcn, coindesk, cointelegraph, theblock, decrypt(默认全部)--poll-interval: 轮询间隔(秒),默认 300(5分钟)--one-shot: 触发一次后自动停止(新闻警报默认持续监控)
守护进程管理
DAEMON="$HOME/.openclaw/skills/market-watch/scripts/daemon.sh"
bash "$DAEMON" start # 按需启动(检查活跃警报类型,只启动需要的进程)
bash "$DAEMON" stop # 停止两个进程
bash "$DAEMON" restart # 重启
bash "$DAEMON" status # 状态 + 活跃警报列表
bash "$DAEMON" log # 两个进程的最近 40 行日志
bash "$DAEMON" log --lines 100 # 更多日志
文件路径:
- 价格进程 PID:
/tmp/market-watch-{agent}-price.pid - 新闻进程 PID:
/tmp/market-watch-{agent}-news.pid - 价格日志:
/tmp/market-watch-{agent}.log - 新闻日志:
/tmp/market-watch-{agent}-news.log - 警报数据:
~/.openclaw/agents/{agent}/private/market-alerts.json - 新闻去重:
~/.openclaw/agents/{agent}/private/news-monitor-state.json
查看和取消警报
python3 "$SKILL/cancel-alert.py" --agent laok --list # 列出全部活跃警报
python3 "$SKILL/cancel-alert.py" --agent laok --id eth-1741234 # 按 ID 取消
python3 "$SKILL/cancel-alert.py" --agent laok --asset ETH # 取消资产所有警报
python3 "$SKILL/cancel-alert.py" --agent laok --type price # 取消所有价格警报
python3 "$SKILL/cancel-alert.py" --agent laok --type news # 取消所有新闻警报
python3 "$SKILL/cancel-alert.py" --agent laok --all # 取消全部
收到 [MARKET_ALERT 触发] 时
注入消息格式:[MARKET_ALERT 触发 · 请处理后联系用户]
处理步骤:
- 读取
context_summary(设盘时的上下文核心) - 如需更多细节,读取
transcript_file指定位置 - 以自己的口吻主动告知用户:条件已触达,当前价格是多少
- 结合当前市场给出简要判断,询问是否执行操作
收到 [NEWS_ALERT 触发] 时
注入消息格式:[NEWS_ALERT 触发 · 需要你判断]
你不是传话筒,你是过滤器+分析师。 关键词匹配只是粗筛,大量命中可能是噪音。你的工作是精筛。
处理步骤:
- 阅读通知里附带的完整新闻正文
- 读取
设盘背景(用户当初为什么要盯这个关键词、他关心的是什么) - 判断相关性:这条新闻是否真的跟用户关心的事情相关?还是关键词碰巧命中了无关内容?
- 决策:
- 确实相关且重要 → 联系用户,附上你的分析和建议
- 相关但不紧急 → 可以记录下来,等积累到足够有价值时再汇报
- 噪音(关键词碰巧命中但内容无关)→ 不联系用户,直接忽略
- 拿不准 → 宁可不发,避免噪音打扰
批量命中时(一轮多条):逐条判断,只挑真正有价值的告知用户,不要一股脑全转发。
注意事项
- 任意加密货币:只要该币在 Binance/OKX/Bitget 有 USDT 交易对,或在 Hyperliquid/CoinGecko 上架,即可直接使用,无需改代码或重启 daemon
- 交易对列表刷新:启动时自动拉取,每小时刷新一次;如某个交易所加载失败,保留上次缓存继续运行
- HYPE: 优先用 Hyperliquid HTTP(allMids 含 HYPE 现货 mid price)→ OKX → Bitget → CoinGecko
- XAUT: 仅 OKX 有,可能因地区限制失败,CoinGecko 兜底
- A股: 只在交易时段(9:30-11:30 / 13:00-15:00)轮询,非交易时段自动跳过
- 金十/华尔街见闻: 非官方接口,接口变更时 monitor 会静默跳过,不影响 RSS 源继续工作
- 新闻警报默认持续监控:不会自动停止,需要手动 cancel 或设置
--one-shot - 价格警报默认一次性触发:触发后标记 triggered,停止监控
Reviews (0)
Sign in to write a review.
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!