[原创] 用清算数据做量化交易:一套基于爆仓信号的 AI 自动化策略

前言

做合约的朋友大概率都经历过爆仓。轻则亏一部分,重则本金归零。但你有没有想过——你爆仓的那一刻,这笔数据其实被记录下来了。

交易所会实时推送每一笔被强平的仓位信息:什么币、什么方向、多少金额、什么时间。这就是清算数据

2026-03-10 13:10:19 爆仓数据:{"s":"DEXEUSDT","S":"BUY","o":"LIMIT","f":"IOC","q":"30.99","p":"5.427000","ap":"5.347646","X":"FILLED","l":"17.21","z":"30.99","T":1773119419184}
2026-03-10 13:10:18 爆仓数据:{"s":"BEATUSDT","S":"SELL","o":"LIMIT","f":"IOC","q":"21","p":"0.3503000","ap":"0.3573000","X":"FILLED","l":"4","z":"21","T":1773119418458}
2026-03-10 13:10:18 爆仓数据:{"s":"COAIUSDT","S":"SELL","o":"LIMIT","f":"IOC","q":"35","p":"0.2968000","ap":"0.3115000","X":"FILLED","l":"35","z":"35","T":1773119418118}
2026-03-10 13:10:18 爆仓数据:{"s":"AIAUSDT","S":"BUY","o":"LIMIT","f":"IOC","q":"537","p":"0.0844900","ap":"0.0823800","X":"FILLED","l":"10","z":"537","T":1773119418118}
2026-03-10 13:10:09 爆仓数据:{"s":"BABYUSDT","S":"SELL","o":"LIMIT","f":"IOC","q":"1965","p":"0.0161200","ap":"0.0162300","X":"FILLED","l":"1376","z":"1965","T":1773119409616}
2026-03-10 13:10:08 爆仓数据:{"s":"MBOXUSDT","S":"SELL","o":"LIMIT","f":"IOC","q":"372","p":"0.0173800","ap":"0.0178100","X":"FILLED","l":"372","z":"372","T":1773119408667}
2026-03-10 13:10:07 爆仓数据:{"s":"GALAUSDT","S":"SELL","o":"LIMIT","f":"IOC","q":"23717","p":"0.00337","ap":"0.00341","X":"FILLED","l":"23717","z":"23717","T":1773119407235}
2026-03-10 13:10:04 爆仓数据:{"s":"RIVERUSDT","S":"SELL","o":"LIMIT","f":"IOC","q":"17.7","p":"10.945000","ap":"11.109943","X":"FILLED","l":"3.3","z":"17.7","T":1773119404767}
2026-03-10 13:10:04 爆仓数据:{"s":"ROBOUSDT","S":"SELL","o":"LIMIT","f":"IOC","q":"3000","p":"0.0445100","ap":"0.0451800","X":"FILLED","l":"3000","z":"3000","T":1773119404308}
2026-03-10 13:09:47 爆仓数据:{"s":"RIVERUSDT","S":"BUY","o":"LIMIT","f":"IOC","q":"48.1","p":"11.287000","ap":"11.122577","X":"FILLED","l":"17.7","z":"48.1","T":1773119387280}
2026-03-10 13:09:45 爆仓数据:{"s":"DENTUSDT","S":"SELL","o":"LIMIT","f":"IOC","q":"827079","p":"0.000253","ap":"0.000257","X":"FILLED","l":"827079","z":"827079","T":1773119385320}
2026-03-10 13:09:44 爆仓数据:{"s":"BULLAUSDT","S":"SELL","o":"LIMIT","f":"IOC","q":"526","p":"0.0203300","ap":"0.0213800","X":"FILLED","l":"526","z":"526","T":1773119384220}
2026-03-10 13:09:40 爆仓数据:{"s":"DENTUSDT","S":"SELL","o":"LIMIT","f":"IOC","q":"554440","p":"0.000253","ap":"0.000257","X":"FILLED","l":"289977","z":"554440","T":1773119380709}

单看一笔,意义不大。但如果你把所有人的爆仓数据汇总起来,就能看到一件很有意思的事——市场上的资金在哪里承压,哪个方向的人已经撑不住了。清算数据被认为是订单分析里非常重要的一部分,它是带血的**,是资本最真实的反应,骗不了人。

这篇文章要做的事情很简单:把清算数据作为核心信号,叠加 K 线验证和新闻判断,用 AI 做综合决策,最后通过工作流自动化跑起来——24 小时不间断,不需要人工盯盘。

一、策略逻辑

1.1 清算数据能说明什么

每时每刻都有仓位在爆。正常的爆仓不是信号,我们要找的是统计意义上的异常——某个币在短时间内爆仓量远超历史基准,说明这个方向的弱势仓位正在被集中清出。

清算之后,趋势往往会延续。这是这套策略的核心假设。

1.2 为什么选顺势,不选逆势

面对大量爆仓,通常有两种操作思路:

  • 逆势:认为打得差不多了,进去接反弹
  • 顺势:认为弱势仓位还没清完,跟着方向继续走

逆势的风险在于,你不知道这波爆仓有没有结束。如果多头还在源源不断地被清算,你进去接,相当于在瀑布下面伸手,接到的不是底,是更多的下跌。

所以这套策略选择顺势——多头爆仓做空,空头爆仓做多。

1.3 单一信号的局限

光靠爆仓数据一个维度来做决策,信号太粗糙,容易被噪音干扰。所以在爆仓数据上,我们又叠加了两层:

  • K 线验证:价格走势是否配合爆仓方向
  • 新闻判断:是否有实质**件驱动

最后由 AI 综合三个维度做出最终决策。


二、整体架构

工作流采用单线结构,每隔固定间隔触发一次,完整流程如下:

  • 触发器启动后,首先判断是否完成过初始化
  • 如果是第一次运行,进入初始化收集节点,建立历史基准数据
  • 初始化完成后,每次触发依次执行:采集新数据、扫描异常信号、判断是否触发开仓条件
  • 如果发现异常,继续往下走,进入数据补充、AI 判断、交易执行节点
  • 如果没有异常,直接结束,等待下一个触发间隔

整个流程条件不满足就中止,满足就继续,不需要人工干预。


三、重点节点详解

3.1 初始化收集

第一次启动时,需要先建立历史基准数据。通过 WebSocket 连接币安合约的强平推送频道,持续采集一段时间的爆仓数据,存入全局变量。

每条数据包含四个字段:时间戳、币种、爆仓方向、爆仓金额。采集过程中会过滤掉两类数据:未完全成交的强平单,以及金额过小的噪音数据。采集完成后写入持久化存储,并标记初始化完成,后续每次触发直接跳过这个节点。

//此段代码节选自源码
var ws = Dial('wss://fstream.binance.com/ws/!forceOrder@arr')

while (Date.now() < endTs) {
    var msg = ws.read(1000)

    try {
        var obj    = JSON.parse(msg)
        var orders = Array.isArray(obj) ? obj : [obj]
        for (var i = 0; i < orders.length; i++) {
            var item = orders[i]
            if (!item || !item.o) continue
            var o = item.o
            if (o.X !== 'FILLED')           continue
            if (EXCLUDE[o.s])               continue
            if (!/USDT$/i.test(o.s))        continue  //  只处理USDT结尾

            var price = parseFloat(o.ap || o.p)
            var qty   = parseFloat(o.z)
            var value = price * qty
            if (value < MIN_VALUE) continue

            liquidationData.push({
                t: item.E || Date.now(),
                s: o.s,
                d: o.S,
                v: value
            })
            totalNew++
        }
    } catch(e) {}
}

_G('liquidationData', liquidationData)  // 持久化存储
_G('liqInitialized', true)              // 标记初始化完成

3.2 策略执行:采集 + Z-Score 扫描

每次触发时,先用 WebSocket 采集新的爆仓数据,追加到历史窗口,再对每个币种做 Z-Score 异常检测。

Z-Score 的核心思路:

把基准时间段内的爆仓数据按等长时间段切开,每段记录这个监测时间段内的爆仓总金额。然后取最新监测时间段的爆仓量,和基准时间段内所有历史段的平均值做对比,计算偏离程度。偏离超过阈值,才算异常。

//此段代码节选自源码
var mean = hist.reduce(function(s, v) { return s + v }, 0) / hist.length
var std  = Math.sqrt(
    hist.reduce(function(s, v) { return s + Math.pow(v - mean, 2) }, 0) / hist.length
)
var z = std > 0 ? (rec - mean) / std : 0
if (z < ZSCORE_THRESH || rec <= 0) continue

这样做的好处是自适应:活跃的币有活跃的基准,冷门的币有冷门的基准,不会因为某个币本来就交易量大而频繁误报。

光有量还不够,还要看方向是否纯粹

//此段代码节选自源码
var longRatio = total > 0 ? st.longV / total : 0.5

var direction = null
if (longRatio > DIR_THRESH)          direction = 'SHORT'  // 多头主爆 → 顺势做空
else if (longRatio < 1 - DIR_THRESH) direction = 'LONG'   // 空头主爆 → 顺势做多
if (!direction) continue                                    // 多空混爆 → 方向不明,跳过

两个条件同时满足才算触发信号:Z-Score 超过阈值,且多头或空头单边爆仓占比超过 75%。多空混着爆的情况方向不明,直接跳过不做。


3.3 数据补充:K 线 + 新闻

触发信号之后,不会马上开仓,而是进入数据补充节点,为后续 AI 判断准备更完整的上下文。

K 线部分: 拉取该币种最近若干根 1 分钟 K 线,计算涨跌幅和波动率,判断当前 K 线趋势方向,并与爆仓信号方向做对比,判断是否一致。信号建议做空,但 K 线还在往上涨,可信度就要打折。

新闻部分: 通过 Brave 搜索接口,拉取该币种当天的最新资讯。有具体事件驱动的爆仓,趋势延续概率高得多;没有新闻只是纯技术性清算,AI 会更保守。

两类数据拿齐之后,一起送给 AI。


3.4 AI 综合判断

AI 拿到爆仓数据、K 线、新闻之后,按照固定的决策框架来判断,三个维度缺一不可:

决策矩阵如下:

AI 输出包含方向、决策、置信度和理由的结构化结果。后续只有置信度达到阈值的入场信号,才会真正去下单开仓。

Prompt 的核心部分如下:

## 判断步骤

Step 1:爆仓强度
- Z-Score 超过高阈值且方向纯度极高 → 强信号
- Z-Score 达到基础阈值且方向纯度满足要求 → 中等信号
- 否则不入场

Step 2:K线趋势
- 与爆仓方向一致 → 趋势延续概率高,加分
- 与爆仓方向相反 → 可能只是短暂清算而非趋势,减分

Step 3:新闻验证
- 有实质利空/利多且与方向一致 → 加分
- 无新闻 → 纯技术清算,降低置信度
- 新闻与方向相反 → 不入场

## 输出格式
严格返回JSON,无任何markdown包裹:
{
  "symbol": "币种",
  "direction": "LONG或SHORT",
  "action": "入场/观望/不入场",
  "confidence": "高/中/低",
  "liq_note": "爆仓信号一句话评估",
  "trend_note": "K线趋势一句话评估",
  "news_note": "新闻一句话评估",
  "action_reason": "综合决策理由一句话"
}

3.5 交易执行与止损管理

AI 决定入场之后,交易节点自动执行开仓,同时接管止损管理和可视化面板的更新。

开仓流程:

开仓前先按置信度排序,优先执行高置信度信号。如果该币种已有持仓,且新信号置信度更高,则先平掉旧仓再开新仓;如果置信度未超过旧仓,跳过不做。持仓数量达到上限时,后续信号全部跳过。

开仓金额、杠杆倍数、最大持仓数均通过外部变量配置,张数根据当前市场深度的实时价格动态计算。

//此段代码节选自源码
// 计算开仓张数
var rawQty = OPEN_MONEY * CONFIG.LEVERAGE / refPrice / mkt.ctVal
var qty    = floorToStep(rawQty, mkt.amtSize, mkt.amtPrec)

// 市价开仓
var side = direction === 'LONG' ? 'buy' : 'sell'
var oid  = exchange.CreateOrder(swapSym, side, -1, qty)

止损机制:

止损采用双层机制,两道防线同时生效:

  • 移动止损:追踪价格极值,从最高盈利点回撤超过设定比例就平仓,让利润尽量跑,但不把已经赚到的全吐回去
  • 兜底止损:最后一道防线,价格从入场价反向走超过设定比例,强制平仓
//此段代码节选自源码
if (pos.direction === 'LONG') {
    var trailStop = pos.peak * (1 - TRAILING_PCT)   // 移动止损价
    var fallStop  = pos.entryPrice * (1 - FALLBACK_PCT)  // 兜底止损价
    effectiveStop = Math.min(trailStop, fallStop)
    if (cur <= effectiveStop) triggered = true
}

可视化面板:

每次执行后实时更新三张表格:

  • 账户概览:余额、持仓数、累计盈亏、止损参数
  • 持仓监控:每个持仓的入场价、当前价、盈亏百分比、最大盈利、当前回撤、止损价
  • 最新 AI 信号:每个扫描到的币种的爆仓信号、K 线评估、新闻评估和综合决策

随时可以看到策略在做什么,不需要盯盘。


四、整体流程回顾

这就是这套策略的完整逻辑:

  1. 初始化:首次运行时采集历史爆仓数据,建立基准
  2. 采集:每次触发时采集新的爆仓数据,更新历史窗口
  3. 扫描:用 Z-Score 找出爆仓量统计异常的币种,过滤方向不纯的信号
  4. 补充:为异常币种拉取 K 线和新闻数据
  5. 判断:由 AI 综合三个维度做出入场决策
  6. 执行:按置信度排序后自动开仓,全程附带双层止损和可视化面板

这是一次基于传统清算数据的 AI 增强探索。清算数据本身是市场最真实的反应,叠加 K 线和新闻之后,信号的可信度得到了有效提升,AI 的引入则让**度决策变得可以自动化。

如果你对这类基于链上或市场微观结构数据的策略感兴趣,欢迎留言反馈,后续可以针对更多类型的信号做进一步的策略开发。

免责声明:信息仅供参考,不构成投资及交易建议。投资者据此操作,风险自担。
如果觉得文章对你有用,请随意赞赏收藏
相关推荐
相关下载
登录后评论
Copyright © 2019 宽客在线