一、为什么你需要这份 WebSocket 模板
如果你正在用 OKX API 做量化交易、实时展示 K 线或高频监控市场情绪,最头疼的往往是:
- WebSocket 鉴权反复失败
- 订阅参数写错却找不到文档
- 框架臃肿、依赖太多,移植麻烦
这份 PENDAX-SDK 模板一次性解决上述难题,一条命令即可启动 现货、永续合约、期权 全品种数据流,代码精简到不到 80 行,新手也能看懂。
👉 点此立即生成专属 API Key,开启高并发行情订阅之旅
二、三步跑通环境
克隆仓库并安装依赖
git clone https://github.com/traderjoe155/Okx-Websocket-Template-PENDAX.git cd Okx-Websocket-Template-PENDAX npm install填入凭证
打开index.js,在socketConfig中添加三项核心信息:const socketConfig = { apiKey: '你的OKX_API_KEY', secretKey: '你的OKX_SECRET_KEY', passphrase: '你的PASSPHRASE', isPrivate: false // 设为 true 才能读取账户、下单等私有通道 };一键运行
node index.js控制台显示
Attempting subscriptions即为连接成功。
三、核心概念解析:订阅、频道与实例
| 术语 | 作用与示例 |
|---|---|
| Channel | 决定数据类型:tickers 行情、candle 分钟线等 |
| instId | 标的标识:BTC-USDT-SWAP 表示 BTC USDT 永续合约 |
| isPrivate | 公有/私有开关;私有需额外计算签名 |
你可以在代码里同时监听 多频道、多标的,下面演示同时订阅 BTC 与 ETH 的盘口深度:
const subscriptions = {
btcDepth: {
name: 'books',
args: [{ channel: 'books', instId: 'BTC-USDT' }]
},
ethDepth: {
name: 'books',
args: [{ channel: 'books', instId: 'ETH-USDT' }]
}
};
socket.subscribe(subscriptions.btcDepth);
socket.subscribe(subscriptions.ethDepth);四、自定义消息处理:把数据变成漂亮的交易信号
模板采用 switch-case 分发消息,最简易地把行情打印出来:
function handleMessage(msg) {
switch (msg.arg.channel) {
case 'tickers':
console.log(`最新价 ${msg.data[0].last}`, '成交量', msg.data[0].vol24h);
break;
case 'books':
const bids = msg.data[0].bids.slice(0, 5);
console.log('买一价', bids[0][0]);
break;
}
}若想做复杂策略,可以把解析结果直接推入 Redis、写本地 SQLite,甚至通过 Webhook 发到自己服务器。
五、实战案例:用 Tickers 通道捕捉飙升币
下面给出一段极简趋势跟踪范例,当 1 秒内 BTC-USDT-SWAP 涨幅 > 0.8%,自动输出警报:
let lastPrice = 0;
function handleMessage(msg) {
if (msg.arg.channel === 'tickers') {
const currentPrice = Number(msg.data[0].last);
if (lastPrice && (currentPrice - lastPrice) / lastPrice > 0.008) {
console.warn(`🚀 BTC 暴涨 ${((currentPrice - lastPrice) / lastPrice * 100).toFixed(2)}%`);
}
lastPrice = currentPrice;
}
}运行日志示例:
最新价 68321.4 成交量 123456
🚀 BTC 暴涨 0.86% 于 2025-06-25 14:30:01六、常见报错与解决 FAQ
Q1:出现 1006 断开,可能是什么原因?
一般为你订阅了错误的 instId 或网络不稳定。先用 现货 BTC-USDT 做连通性测试,再逐步添加复杂标的。
Q2:为什么设置了 isPrivate: true,账户资产还是收不到?
检查步骤:
- API Key 必须有 读取权限(Read)。
- 别忘填写
passphrase。 - 确认订阅频道为
account,而不是tickers。
Q3:运行时提示 Error: Cannot find module 'pendax-sdk'?
大概率没有 npm install 就执行。确保仓库根目录执行了 npm install --save pendax-sdk@latest。
Q4:能否在 Docker 中跑?
可以。在项目根目录新建 Dockerfile:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
CMD ["node","index.js"]构建后运行 docker run -e APIKEY=xxx ... okx-ws。
Q5:如何扩展到其他交易所?
PENDAX-SDK 统一的 subscribe / handleMessage 接口设计,仅需更换 WS 地址 和 签名算法 即可迁移到类似模板。
Q6:能否把订阅结果推送到前端?
在 handleMessage 里加一行 io.emit('ticker', msg.data),用 Socket.IO 传给浏览器即可实时渲染折线图。
七、写在最后
这份模板已经为你封装好 鉴权、心跳重连 断线续订,你只需关注交易逻辑而非“喂”数据。随着币圈 7×24 小时波动,拥有稳定低延迟的 WebSocket 行情通道,就等于比别人先看到下一根 K 线。
动手尝试,打开终端只需 30 秒,第一个 BTC 盘口就在屏幕上跳动起来。祝你的策略一路长红!