跳到主要内容

清算机制 (Liquidation)

当用户的仓位保证金率低于维持保证金要求时,系统会自动触发清算,强制平仓以保护系统和其他用户免受损失。

清算概述

什么是清算?

清算是去中心化交易所的风险控制机制。当市场价格波动导致用户的保证金不足以维持仓位时,系统会自动平仓该仓位。

清算触发条件

保证金率 = 保证金 / (仓位价值 × 维持保证金率) < 1.0

示例

  • 仓位价值:10,000 USDT
  • 保证金:500 USDT
  • 维持保证金率:5%
  • 所需维持保证金:10,000 × 0.05 = 500 USDT
  • 保证金率 = 500 / 500 = 1.0(临界点)

如果市场价格继续不利变动,保证金率 < 1.0,触发清算。

清算价格计算

多仓清算价格

清算价格 = 开仓价格 × (1 - 1/杠杆 + 维持保证金率)

示例

  • 开仓价格:65,000 USDT
  • 杠杆:10x
  • 维持保证金率:0.5%
  • 清算价格 = 65,000 × (1 - 0.1 + 0.005) = 58,825 USDT

空仓清算价格

清算价格 = 开仓价格 × (1 + 1/杠杆 - 维持保证金率)

示例

  • 开仓价格:65,000 USDT
  • 杠杆:10x
  • 维持保证金率:0.5%
  • 清算价格 = 65,000 × (1 + 0.1 - 0.005) = 71,175 USDT

清算流程

1. 监控阶段

系统实时监控所有仓位的保证金率:

每秒检查:
for position in all_positions:
if position.margin_rate < 1.0:
触发清算流程

2. 清算执行

graph TD
A[检测到保证金不足] --> B[标记仓位为清算中]
B --> C[尝试市场平仓]
C --> D{市场有足够流动性?}
D -->|是| E[市场价格平仓]
D -->|否| F[触发ADL机制]
E --> G[计算清算损失]
F --> G
G --> H{损失 > 0?}
H -->|是| I[保险基金覆盖]
H -->|否| J[剩余保证金退还用户]
I --> K[清算完成]
J --> K

3. 清算结算

清算完成后的资金分配:

  1. 清算收益 = 平仓价格 - 破产价格
  2. 保险基金增加 = min(清算收益, 剩余保证金)
  3. 用户损失 = 初始保证金 - 剩余保证金

API 接口

查询清算历史

获取用户的清算记录。

接口信息

  • Method: GET
  • Path: /api/v1/liquidations/history
  • Authentication: 需要 JWT Token

Query 参数

参数类型必须描述
symbolstring过滤特定交易对
limitnumber返回数量(默认 50)
offsetnumber偏移量(分页)

响应示例

{
"liquidations": [
{
"id": "880e8400-e29b-41d4-a716-446655440000",
"user_address": "0x742d35cc6634c0532925a3b844bc9e7595f0beb",
"position_id": "660e8400-e29b-41d4-a716-446655440000",
"symbol": "BTCUSDT",
"side": "long",
"size": "0.1",
"entry_price": "65000.00",
"liquidation_price": "58825.00",
"mark_price_at_liquidation": "58800.00",
"collateral": "650.00",
"realized_loss": "620.00",
"insurance_fund_payment": "30.00",
"liquidation_fee": "0.00",
"liquidated_at": 1704067200000
}
],
"total": 1
}

响应字段说明

字段类型描述
idstring清算记录 UUID
user_addressstring用户地址
position_idstring仓位 UUID
symbolstring交易对
sidestring仓位方向
sizestring清算数量
entry_pricestring开仓价格
liquidation_pricestring清算价格
mark_price_at_liquidationstring清算时标记价格
collateralstring初始保证金
realized_lossstring实现亏损
insurance_fund_paymentstring保险基金支付
liquidation_feestring清算费用
liquidated_atnumber清算时间(毫秒级时间戳)

查询市场清算历史

查询特定市场的清算事件(公开接口)。

接口信息

  • Method: GET
  • Path: /api/v1/liquidations/:symbol
  • Authentication: 不需要

路径参数

参数类型必须描述
symbolstring交易对(如 BTCUSDT

Query 参数

参数类型必须描述
limitnumber返回数量(默认 50)

响应示例

{
"symbol": "BTCUSDT",
"liquidations": [
{
"id": "880e8400-e29b-41d4-a716-446655440000",
"side": "long",
"size": "0.5",
"liquidation_price": "58825.00",
"timestamp": 1704067200000
}
],
"total": 1
}

查询清算配置

查询特定市场的清算机制配置参数。

接口信息

  • Method: GET
  • Path: /api/v1/liquidations/:symbol/config
  • Authentication: 不需要

响应示例

{
"symbol": "BTCUSDT",
"maintenance_margin_rate": "0.005",
"liquidation_fee_rate": "0.000",
"max_leverage": 50,
"bankruptcy_price_protection": true,
"partial_liquidation_enabled": false
}

配置字段说明

字段类型描述
maintenance_margin_ratestring维持保证金率(如 0.5%)
liquidation_fee_ratestring清算费率
max_leveragenumber最大杠杆倍数
bankruptcy_price_protectionboolean是否启用破产价格保护
partial_liquidation_enabledboolean是否启用部分清算

保险基金

保险基金用于覆盖清算产生的损失,保护系统稳定性。

保险基金来源

  1. 清算收益:清算价格优于破产价格的部分
  2. 平台注资:初始和定期注入
  3. 手续费分成:部分交易手续费

保险基金用途

  1. 覆盖清算损失:当清算价格劣于破产价格时
  2. ADL前的缓冲:保险基金耗尽后才触发ADL

查询保险基金

接口信息

  • Method: GET
  • Path: /api/v1/insurance-fund/:symbol
  • Authentication: 不需要

响应示例

{
"symbol": "BTCUSDT",
"balance": "50000.00",
"total_contributions": "100000.00",
"total_payouts": "50000.00",
"last_updated": 1704067200000,
"history": [
{
"type": "contribution",
"amount": "1000.00",
"source": "liquidation_profit",
"timestamp": 1704063600000
},
{
"type": "payout",
"amount": "500.00",
"reason": "liquidation_loss",
"timestamp": 1704060000000
}
]
}

如何避免清算

1. 合理使用杠杆

风险等级:
1-5x: 低风险,适合新手
5-10x: 中风险,适合进阶
10-20x: 高风险,需要经验
20x+: 极高风险,专业交易者

2. 设置止损

// 开仓后立即设置止损
const position = await getPosition(positionId);

const stopLossPrice = position.side === 'long'
? position.entry_price * 0.95 // 多仓:-5%
: position.entry_price * 1.05; // 空仓:+5%

await setPositionTPSL(position.id, {
stop_loss_price: stopLossPrice.toString()
});

3. 监控保证金率

// 实时监控保证金率
setInterval(async () => {
const positions = await getPositions();

for (const position of positions) {
const liquidation = await getLiquidationStatus(position.id);

if (liquidation.health_factor < 1.3) {
// 健康系数 < 1.3,增加保证金
const additionalCollateral = position.collateral * 0.2;
await addCollateral(position.id, additionalCollateral);

alert(`已为 ${position.symbol} 增加保证金`);
}
}
}, 60000); // 每分钟检查

4. 使用价格警报

// 设置价格警报
function setupPriceAlert(position) {
const warningPrice = position.side === 'long'
? position.liquidation_price * 1.05 // 多仓:清算价上方5%
: position.liquidation_price * 0.95; // 空仓:清算价下方5%

ws.subscribe('ticker', position.symbol);

ws.on('ticker', (data) => {
if (
(position.side === 'long' && data.mark_price <= warningPrice) ||
(position.side === 'short' && data.mark_price >= warningPrice)
) {
alert(`警告:${position.symbol} 接近清算价格!`);
}
});
}

5. 分批降低杠杆

// 盈利时主动降低杠杆
if (position.unrealized_pnl > 0) {
// 增加保证金 = 降低有效杠杆
const targetLeverage = 5; // 目标降到5x
const additionalCollateral =
(position.size_in_usd / targetLeverage) - position.collateral;

if (additionalCollateral > 0) {
await addCollateral(position.id, additionalCollateral);
}
}

清算与ADL的关系

执行顺序

1. 价格达到清算价格

2. 尝试市场平仓

3. 如果流动性不足

4. 保险基金覆盖损失

5. 如果保险基金不足

6. 触发 ADL 机制

区别对比

特性清算ADL
触发条件保证金率 < 1.0保险基金不足
针对对象保证金不足的仓位盈利的反向仓位
是否收费否(已损失保证金)
可否避免可以(加保证金)可以(降杠杆)
执行价格破产价格市场价格

清算统计

实时监控面板

前端可以展示清算统计信息:

async function getLiquidationStats(symbol) {
const stats = await fetch(`/api/v1/liquidations/${symbol}/stats`);
return stats.json();
}

// 显示统计
const stats = await getLiquidationStats('BTCUSDT');
console.log(`
24小时清算次数: ${stats.liquidations_24h}
24小时清算总额: ${stats.volume_24h} USDT
保险基金余额: ${stats.insurance_fund_balance} USDT
平均清算杠杆: ${stats.avg_leverage}x
`);

常见问题

Q: 清算后会负债吗?

A: 不会。ZTDX的清算机制确保用户最多损失初始保证金,不会产生负债。

Q: 清算费用是多少?

A: 当前清算费率为 0%。用户已经损失了部分或全部保证金,不会额外收取清算费。

Q: 可以部分清算吗?

A: 当前版本为全仓清算。未来可能推出部分清算功能。

Q: 清算价格是固定的吗?

A: 不是。清算价格会随着:

  • 增加/减少保证金
  • 仓位盈亏变化
  • 资金费率累积 而动态调整。

Q: 如何查看我的清算价格?

A: 查询仓位详情或清算状态接口:

const position = await getPosition(positionId);
console.log('清算价格:', position.liquidation_price);

// 或
const liquidation = await getLiquidationStatus(positionId);
console.log('清算价格:', liquidation.liquidation_price);

Q: 清算引擎是中心化的吗?

A: 清算监控和执行由中心化系统完成,但:

  • 清算规则透明公开
  • 清算记录链上可查
  • 保险基金余额公开
  • 任何人都可验证清算的合理性

最佳实践

1. 永远留有安全边际

建议保证金率:
- 最低:1.0(清算边缘,危险!)
- 警戒:1.3(需要增加保证金)
- 安全:1.5(正常)
- 理想:2.0+(非常安全)

2. 使用健康系数而非保证金率

// 健康系数更直观
const healthFactor = position.collateral / position.maintenance_margin;

if (healthFactor < 1.3) {
alert('风险警告:建议增加保证金或减少仓位');
}

3. 建立应急预案

// 清算预警系统
class LiquidationWarningSystem {
constructor(positions) {
this.positions = positions;
this.checkInterval = 10000; // 10秒检查一次
}

async start() {
setInterval(async () => {
for (const position of this.positions) {
const liq = await getLiquidationStatus(position.id);

if (liq.health_factor < 1.1) {
this.criticalAlert(position, liq);
} else if (liq.health_factor < 1.3) {
this.warningAlert(position, liq);
}
}
}, this.checkInterval);
}

criticalAlert(position, liq) {
// 紧急通知:短信、邮件、推送
console.error(`🚨 紧急:${position.symbol} 即将清算!`);
console.log(`健康系数: ${liq.health_factor}`);
console.log(`建议:立即增加 ${liq.min_collateral_usd} USDT 保证金`);
}

warningAlert(position, liq) {
// 警告通知
console.warn(`⚠️ 警告:${position.symbol} 保证金偏低`);
}
}

相关文档