信号服务
API key
Basic 最多 1 把
配额用量 Basic
REST
# 序列(五段式 ID,可一次要多条;from/to 毫秒)。网页端看全部;用 API key 访问时历史窗口 / 点数 / 毫秒主题按档位限制
curl -H "Authorization: Bearer $BRRR_KEY" \
"https://api.brrr.capital/api/v1/series?id=drv.bzcl.BRENT-WTI.spread.1m&id=drv.bzcl.TD25.usd.1d&from=1792000000000"
# 返回
{ "tier": "pro",
"series": { "drv.bzcl.BRENT-WTI.spread.1m": {
"gran": "1m", "unit": "$", "src": { "name": "derived bzcl", "url": "…" },
"points": [ { "t": 1792448160000, "rt": 1792448160412, "v": 7.69, "q": 0 }, … ],
"truncated": { "allowedFrom": 1784672000000, "tier": "pro" } } } }
# 事件、目录
curl … "https://api.brrr.capital/api/v1/events?monitor=commodities/oil/spread/basic&from=…"
curl … "https://api.brrr.capital/api/v1/catalog"WebSocket
// wss://api.brrr.capital/v1/stream JSON 行协议,15 s 心跳(hb),数据帧带 seq,断线按 seq 续传
const ws = new WebSocket("wss://api.brrr.capital/v1/stream?key=" + KEY);
ws.onopen = () => ws.send(JSON.stringify({ op: "sub", ids: ["drv.bzcl.BRENT-WTI.spread.1h", "md.hl.xyz:BRENTOIL.oracle.1s"], since: { "drv.bzcl.BRENT-WTI.spread.1h": lastSeq } }));
ws.onmessage = (m) => {
const f = JSON.parse(m.data); // { type:"data", id, t, rt, v, q, seq } / { type:"sub", ids, rejected } / { type:"hb" }
if (f.type !== "data") return;
lastSeq = f.seq; // 存下来,重连时带上就不会漏
};
// 取消:{ op:"unsub", ids:[…] };心跳:{ op:"ping" } → { type:"pong" }。秒级 / 逐笔主题只对 Max 开放。在本地用 OpenWhale 接 Brrr 信号源
装 OpenWhale:开源策略运行器,支持 Hyperliquid / Binance 等场所,本地执行。
生成一把只读 key(上面),放进
.env,不要写进仓库。声明信号源:把要订阅的序列 / 事件主题写进
sources.yaml;Pro 起走 WS,Basic 走 REST 轮询。写策略:对事件或序列做出反应;我们开放的示例策略可以直接
openwhale add brrr/bzcl-meanrev。回放再实盘:先用 90 天历史回测,再
openwhale run。# 1. 装 OpenWhale(本地跑,私钥不出本机)
npx openwhale init my-strat && cd my-strat
# 2. 把 Brrr 当信号源:config/sources.yaml
sources:
brrr:
kind: brrr
base: https://api.brrr.capital/api/v1
key: ${BRRR_KEY} # 只读 key,从本页生成
topics:
- drv.bzcl.BRENT-WTI.z.1m
- evt.bzcl.BRENT-WTI.z.cross
# 3. 策略里订阅(strategies/bzcl-meanrev.ts)
export default strategy({
on: { "evt.bzcl.BRENT-WTI.z.cross": (e, ctx) => {
if (e.payload.level === 2 && e.payload.direction === "up") ctx.enter("short", { bz: 1, cl: -1 });
if (e.payload.level === -2 && e.payload.direction === "down") ctx.enter("long", { bz: 1, cl: -1 });
} },
});
# 4. 回放 90 天验证,再实盘
openwhale backtest --source brrr --from 90d
openwhale run