Skill: patches429/market-monitor (version 0.1.0)

--- name: market-monitor version: "0.1.0" description: Monitor cryptocurrency and financial markets via exchange APIs (Binance, OKX). Track prices, analyze trends, and generate market reports. homepage: https://www.binance.com metadata: { "openclaw": { "emoji": "📊", "requires": { "env": ["BINANCE_API_KEY"] }, "primaryEnv": "BINANCE_API_KEY", }, } --- # Skill: market-monitor（接口定义） > **接口层**：定义触发条件、分析框架、输出规范和错误策略，与具体交易所无关。 > 各交易所的 API 端点和请求格式见 `impl/` 目录： > > - `impl/binance.md` — Binance 实现 > - `impl/okx.md` — OKX 实现 > > 新增交易所时，只需添加对应 `impl/{exchange}.md`，本文件无需修改。 ## 概述 实时监控加密货币市场数据，计算技术指标，生成交易信号。 ## 触发条件 - 用户询问行情或价格 - 定时轮询（可配置间隔） - 价格触及预设警报线 ## 输入参数 | 参数 | 类型 | 必填 | 说明 | | -------- | ------ | ---- | --------------------------------------------------- | | pair | string | 是 | 交易对，格式 BASE/QUOTE（如 BTC/USDT） | | exchange | string | 否 | 目标交易所 id（见 impl/ 目录），默认 `binance` | | interval | string | 否 | K 线周期（1m / 5m / 15m / 1h / 4h / 1d），默认 `1h` | | limit | number | 否 | K 线数量，默认 `100` | ## 执行流程 ``` 1. 根据 exchange 参数加载对应 impl/{exchange}.md 2. 调用实现层获取 24h 行情和 K 线数据 3. 基于 K 线数据计算技术指标 4. 按信号规则生成交易信号 5. 返回标准输出格式 ``` ## 技术指标（与交易所无关） - 移动平均线：MA7、MA25、MA99 - RSI（周期 14） - MACD（12, 26, 9） - 布林带（20, 2） - 成交量分析 ## 信号生成规则 | 信号 | 触发条件 | | ------------- | ----------------------------------------- | | `strong_buy` | RSI < 30 且 MACD 金叉 且 价格触及布林下轨 | | `buy` | RSI < 40 且 MA7 上穿 MA25 | | `neutral` | 30 ≤ RSI ≤ 70 且无明确趋势 | | `sell` | RSI > 60 且 MA7 下穿 MA25 | | `strong_sell` | RSI > 70 且 MACD 死叉 且 价格触及布林上轨 | ## 输出格式 ```json { "pair": "BTC/USDT", "exchange": "binance", "interval": "1h", "timestamp": "ISO8601", "price": 0.0, "change24h": 0.0, "volume24h": 0.0, "indicators": { "rsi14": 0.0, "macd": { "line": 0.0, "signal": 0.0, "histogram": 0.0 }, "ma": { "ma7": 0.0, "ma25": 0.0, "ma99": 0.0 }, "bollinger": { "upper": 0.0, "mid": 0.0, "lower": 0.0 } }, "signal": "strong_buy | buy | neutral | sell | strong_sell", "confidence": 0.0, "keyLevels": { "support": [], "resistance": [] } } ``` ## 错误处理策略 | 错误类型 | 处理方式 | | ----------------- | -------------------------- | | 限流（429） | 等待 60s 后重试，最多 3 次 | | 无效参数（400） | 提示用户修正交易对或参数 | | 服务不可用（5xx） | 告知用户稍后重试 | | 网络超时 | 记录错误，告知用户 | ## 安全约束 - 只读操作，不触发任何下单 - 只访问 impl/ 中定义的白名单域名 - 所有 API 调用由网关记录到审计日志

path: impl/binance.md
content: # market-monitor 实现：Binance

> 本文件是 `SKILL.md` 的实现层，描述如何通过 Binance API 获取行情数据。
> 替换交易所时，参照本文件格式创建新的 `impl/{exchange}.md` 即可。

## 基础信息

| 字段             | 值                                    |
| ---------------- | ------------------------------------- |
| exchange id      | `binance`                             |
| 网络白名单       | `api.binance.com`, `fapi.binance.com` |
| 认证方式         | API Key Header（只读接口无需签名）    |
| API Key 环境变量 | `BINANCE_API_KEY`                     |

## 数据获取

### 24h 行情

```
GET https://api.binance.com/api/v3/ticker/24hr
参数: symbol={pair}（去掉 /，如 BTC/USDT → BTCUSDT）

响应字段映射:
  lastPrice   → price
  priceChangePercent → change24h
  volume      → volume24h（基础资产成交量）
  quoteVolume → volume24h_usd
```

### K 线数据

```
GET https://api.binance.com/api/v3/klines
参数:
  symbol   = {pair}（格式同上）
  interval = {interval}（1m/5m/15m/1h/4h/1d，与接口层一致）
  limit    = {limit}

响应为数组，每项结构:
  [0] openTime, [1] open, [2] high, [3] low, [4] close,
  [5] volume, [6] closeTime, ...
```

## 间隔参数映射

| 接口层 interval | Binance 参数 |
| --------------- | ------------ |
| 1m              | 1m           |
| 5m              | 5m           |
| 15m             | 15m          |
| 1h              | 1h           |
| 4h              | 4h           |
| 1d              | 1d           |

## 错误码对照

| HTTP 状态 | Binance 错误码 | 处理方式                              |
| --------- | -------------- | ------------------------------------- |
| 429       | —              | 检查 `Retry-After` 响应头，等待后重试 |
| 400       | -1121          | 交易对无效，提示用户检查 pair 格式    |
| 400       | -1100          | 参数非法，提示用户检查 interval       |
| 403       | —              | IP 被封，通知用户                     |
| 5xx       | —              | 服务故障，建议切换到 impl/okx.md      |


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)