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。
公共字段(所有类型):
CODEBLOCK0
价格类额外字段:
CODEBLOCK1
新闻类额外字段:
{
"keywords": ["BTC ETF", "BlackRock", "比特币"],
"keyword_mode": "any", // "any" | "all"
"sources": ["coindesk", "cointelegraph", "jin10"],
"poll_interval": 300 // 秒,默认 300
}
价格盯盘工作流
设置价格警报
CODEBLOCK3
参数说明:
- -
--market: crypto(加密)或 astock(A股,代码如 600519) - INLINECODE5 :
>= / <= / > / INLINECODE9 - INLINECODE10 : 用户的当前 session key(稳定标识,用于触发时找到正确 session)
- INLINECODE11 : 飞书通知目标,格式 INLINECODE12
- INLINECODE13 : 推荐填入当前对话的 message_id(触发时用于追溯设盘上下文)。agent 在注册警报时应传入当前消息的 ID,否则触发通知中「消息ID」字段将为空,无法精准跳转到设盘时的对话记录。
新闻盯盘工作流
设置新闻关键词警报
CODEBLOCK4
参数说明:
- -
--keywords: 关键词,逗号分隔(支持中英文) - INLINECODE15 :
any(任一命中)| all(全部命中),默认 INLINECODE18 - INLINECODE19 : 数据源,逗号分隔,可选:
jin10, wallstreetcn, coindesk, cointelegraph, theblock, decrypt(默认全部) - INLINECODE21 : 轮询间隔(秒),默认 300(5分钟)
- INLINECODE22 : 触发一次后自动停止(新闻警报默认持续监控)
守护进程管理
CODEBLOCK5
文件路径:
- - 价格进程 PID: INLINECODE23
- 新闻进程 PID: INLINECODE24
- 价格日志: INLINECODE25
- 新闻日志: INLINECODE26
- 警报数据: INLINECODE27
- 新闻去重: INLINECODE28
查看和取消警报
CODEBLOCK6
收到 [MARKET_ALERT 触发] 时
注入消息格式: INLINECODE30
处理步骤:
- 1. 读取
context_summary(设盘时的上下文核心) - 如需更多细节,读取
transcript_file 指定位置 - 以自己的口吻主动告知用户:条件已触达,当前价格是多少
- 结合当前市场给出简要判断,询问是否执行操作
收到 [NEWS_ALERT 触发] 时
注入消息格式: INLINECODE34
你不是传话筒,你是过滤器+分析师。 关键词匹配只是粗筛,大量命中可能是噪音。你的工作是精筛。
处理步骤:
- 1. 阅读通知里附带的完整新闻正文
- 读取
设盘背景(用户当初为什么要盯这个关键词、他关心的是什么) - 判断相关性:这条新闻是否真的跟用户关心的事情相关?还是关键词碰巧命中了无关内容?
- 决策:
- 确实相关且重要 → 联系用户,附上你的分析和建议
- 相关但不紧急 → 可以记录下来,等积累到足够有价值时再汇报
- 噪音(关键词碰巧命中但内容无关)→
不联系用户,直接忽略
- 拿不准 → 宁可不发,避免噪音打扰
批量命中时(一轮多条):逐条判断,只挑真正有价值的告知用户,不要一股脑全转发。
注意事项
- - 任意加密货币:只要该币在 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 或设置 INLINECODE36
- 价格警报默认一次性触发:触发后标记 triggered,停止监控
市场盯盘技能
两类监控,共享同一套警报数据结构和通知回路:
| 类型 | 数据源 | 状态 |
|---|
| 价格盯盘 | HTTP轮询(Binance/Hyperliquid/OKX/Bitget)+ CoinGecko备用 + pytdx(A股) | ✅ 已实现 |
| 新闻盯盘 |
金十数据、华尔街见闻(HTTP轮询)+ CoinDesk/CoinTelegraph/The Block/Decrypt(RSS) | ✅ 已实现 |
数据源和精度
价格源
| 来源 | 协议 | 资产 | 延迟 |
|---|
| Binance | HTTP行情(5秒轮询) | 任意USDT交易对(动态发现) | ~100ms |
| Hyperliquid |
HTTP allMids(5秒轮询) | 全部HL上线资产(动态发现) | ~100ms |
| OKX | HTTP行情(5秒轮询) | 任意USDT现货(动态发现) | ~100ms |
| Bitget | HTTP行情(5秒轮询) | 任意USDT现货(动态发现) | ~100ms |
| pytdx | TCP轮询(盘中4秒) | A股(沪深) | ~200ms |
| CoinGecko | HTTP轮询(30秒) | 全资产备用(动态发现) | 30秒 |
动态交易对发现: 守护进程启动时自动从各交易所拉取完整交易对列表,每小时刷新一次。任意USDT交易对的加密货币均自动支持,无需手动添加交易对映射。
资产→交易所优先级(按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源 |
| CoinTelegraph | RSS 2.0 | 官方RSS源 |
| The Block | RSS 2.0 | 官方RSS源 |
| Decrypt | RSS / Atom | 官方RSS源 |
警报数据结构
所有警报存入~/.openclaw/agents/{agent}/private/market-alerts.json。
公共字段(所有类型):
json
{
id: eth-1741234567,
type: price, // price | news
status: active, // active | triggered | cancelled
one_shot: true,
context_summary: ETH减仓窗口:减3.5枚,套出换HYPE,
sessionkey: agent:laok:feishu:direct:ouxxx,
agent_id: laok,
reply_channel: feishu,
replyto: user:ouxxx,
transcript_file: /path/to/session.jsonl,
transcriptmsgid: msg-id,
created_at: 2026-03-12T13:00:00
}
价格类额外字段:
json
{
asset: ETH,
market: crypto, // crypto | astock
condition: >=, // >= | <= | > | <
target_price: 2150
}
新闻类额外字段:
json
{
keywords: [BTC ETF, BlackRock, 比特币],
keyword_mode: any, // any | all
sources: [coindesk, cointelegraph, jin10],
poll_interval: 300 // 秒,默认300
}
价格盯盘工作流
设置价格警报
bash
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:用户的当前会话密钥(稳定标识,用于触发时找到正确会话)
- --reply-to:飞书通知目标,格式user:ou_xxx
- --transcript-msg-id:推荐填入当前对话的消息ID(触发时用于追溯设盘上下文)。代理在注册警报时应传入当前消息的ID,否则触发通知中「消息ID」字段将为空,无法精准跳转到设盘时的对话记录。
新闻盯盘工作流
设置新闻关键词警报
bash
基础用法:监控任一关键词命中
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:触发一次后自动停止(新闻警报默认持续监控)
守护进程管理
bash
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
查看和取消警报
bash
python3 $SK