# 虚拟货币现货大单买入监控最小落地方案（Node.js实现）

URL: https://caijiao.org/posts/38
Source: docs/posts/38.md
Description: 使用Node.js和Binance WebSocket，实现实时监控虚拟货币现货大单买入，最小可落地方案，包括示例代码和运行说明。

本文提供一个**最小可落地方案**，实现实时监控 Binance 交易所现货大单买入，使用 Node.js 和 WebSocket 技术。

## 1️⃣ 安装依赖

```bash
npm init -y
npm install ws
````

## 2️⃣ Node.js 代码示例

```js
// largeBuyMonitor.js
const WebSocket = require('ws');

const SYMBOL = "btcusdt";           // 监控交易对
const THRESHOLD_USD = 100000;       // 单笔大买阈值（美元）

// Binance WebSocket URL
const WS_URL = `wss://stream.binance.com:9443/ws/${SYMBOL}@aggTrade`;

// 建立 WebSocket 连接
const ws = new WebSocket(WS_URL);

ws.on('open', () => {
    console.log(`Connected to Binance aggTrade stream for ${SYMBOL}`);
});

ws.on('message', (msg) => {
    try {
        const data = JSON.parse(msg);
        const price = parseFloat(data.p);          // 成交价格
        const baseVol = parseFloat(data.q);        // 成交量（币数量）
        const takerBuyQuote = parseFloat(data.Q);  // taker 买入成交额（USD 计）
        const isBuyerMaker = data.m;               // true = 卖方为 maker, false = 买方为 taker

        const isTakerBuy = !isBuyerMaker;          // taker 买入 = 主动吃盘

        // 以 taker 买入的成交额作为判断
        const quoteVolume = takerBuyQuote > 0 ? takerBuyQuote : price * baseVol;

        if (isTakerBuy && quoteVolume >= THRESHOLD_USD) {
            console.log(`[${new Date().toISOString()}] LARGE BUY detected!`);
            console.log(`Price: ${price}, Base Volume: ${baseVol}, Quote Volume: ${quoteVolume}`);
        }
    } catch (err) {
        console.error('Parse error', err);
    }
});

ws.on('close', () => {
    console.log('WebSocket closed, retrying in 3s...');
    setTimeout(() => {
        require('child_process').fork(__filename);
    }, 3000);
});

ws.on('error', (err) => {
    console.error('WebSocket error', err);
});
```

## 3️⃣ 运行方式

```bash
node largeBuyMonitor.js
```

运行后，当发现单笔大买单（超过阈值）时，控制台会输出：

```txt
[2025-10-29T12:00:05.123Z] LARGE BUY detected!
Price: 30123.45, Base Volume: 3.5, Quote Volume: 105432
```

## 4️⃣ 可扩展的最小改进

1. **多交易对**：将 `SYMBOL` 改为数组，forEach 启动多个 WebSocket。
2. **报警通知**：将 `console.log` 替换为 Telegram Bot / Webhook / Email 通知。
3. **重连策略优化**：当前简单重启进程，可改为指数退避策略。
4. **短期聚合**：可维护最近 10 秒的成交量，用于检测成交量突增。

---

> 此方案适合快速落地验证大单买入信号，如需生产环境使用，建议增加日志、异常处理、多交易所数据和报警系统。
