SkillHub

market-watch

v1.2.1

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

Sourced from ClawHub, Authored by Ethan Chen

Installation

Please help me install the skill `market-watch` from SkillHub official store. npx skills add 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 触发 · 请处理后联系用户]

处理步骤: 1. 读取 context_summary(设盘时的上下文核心) 2. 如需更多细节,读取 transcript_file 指定位置 3. 以自己的口吻主动告知用户:条件已触达,当前价格是多少 4. 结合当前市场给出简要判断,询问是否执行操作


收到 [NEWS_ALERT 触发]

注入消息格式:[NEWS_ALERT 触发 · 需要你判断]

你不是传话筒,你是过滤器+分析师。 关键词匹配只是粗筛,大量命中可能是噪音。你的工作是精筛。

处理步骤: 1. 阅读通知里附带的完整新闻正文 2. 读取 设盘背景(用户当初为什么要盯这个关键词、他关心的是什么) 3. 判断相关性:这条新闻是否真的跟用户关心的事情相关?还是关键词碰巧命中了无关内容? 4. 决策: - 确实相关且重要 → 联系用户,附上你的分析和建议 - 相关但不紧急 → 可以记录下来,等积累到足够有价值时再汇报 - 噪音(关键词碰巧命中但内容无关)→ 不联系用户,直接忽略 - 拿不准 → 宁可不发,避免噪音打扰

批量命中时(一轮多条):逐条判断,只挑真正有价值的告知用户,不要一股脑全转发。


注意事项

  • 任意加密货币:只要该币在 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,停止监控