第二章:无常损失对冲策略

无常损失,说白了就是做市商最头疼的事。我见过太多朋友,明明选对了池子,币价也涨了,最后算账时却发现收益还不如直接拿着不动。为什么会这样?因为无常损失在悄悄吃掉你的利润。

这一章,我把自己实战中用过的三种对冲策略分享给你。每种策略都有它的适用场景,也有它的坑。咱们一个一个来看。

2.1 使用期权对冲

期权对冲,是我个人比较喜欢的方式。它的核心逻辑很简单:用期权费买一份保险

你想想看,无常损失的本质是什么?是币价波动导致你的资产比例失衡。那如果我们能提前锁定一个价格范围,不就能控制损失了吗?

2.1.1 基本原理

假设你在Uniswap V3的ETH/USDC池子里做市,价格区间是1500-2500 USDC。这时候,你可以买入一份看跌期权,行权价设在1500 USDC附近。

为什么要这么做?

  • 如果ETH跌破1500,期权会升值,弥补无常损失
  • 如果ETH在区间内波动,期权费就是你的成本
  • 如果ETH大涨,期权作废,但你做市的收益足够覆盖期权费

关键公式:

净收益 = 做市收益 - 无常损失 + 期权收益 - 期权费

当期权收益 ≈ 无常损失时,你就实现了完美对冲

2.1.2 实战配置

我在项目中遇到过一个问题:期权费太贵了。尤其是波动率大的时候,一份平值期权的成本可能占到做市收益的30%以上。怎么办?

我的经验是:不要买平值期权,买虚值期权

期权类型 行权价 期权费占比 保护范围
平值期权 当前价 5-10% 全面保护
虚值期权 偏离5-10% 1-3% 极端行情保护
深度虚值 偏离20%+ 0.1-0.5% 黑天鹅保护

我个人习惯用虚值期权。因为无常损失在价格小幅波动时其实不大,真正伤筋动骨的是那种暴跌。你想想看,花1%的成本去防20%的损失,这笔账划算。

2.1.3 代码示例

这里我用Opyn的期权协议举个例子。实际部署时记得先测试网跑一遍。

// 假设你在ETH/USDC池做市
// 买入ETH看跌期权对冲

const opyn = new Opyn(provider);

// 参数配置
const strikePrice = 1500; // 行权价 USDC
const expiry = Math.floor(Date.now() / 1000) + 30 * 86400; // 30天后到期
const amount = 10; // 对冲10个ETH

// 买入期权
const option = await opyn.buyPut({
  underlying: 'ETH',
  strike: strikePrice,
  expiry: expiry,
  amount: amount,
  premium: 0.02 * amount // 2%期权费
});

// 监控价格
priceOracle.on('priceUpdate', async (price) => {
  if (price < strikePrice * 0.95) {
    // 触发对冲
    console.log('期权开始生效,无常损失被覆盖');
  }
});

我的小技巧:期权到期日最好选在你计划做市周期结束后的3-5天。别卡太紧,万一遇到链上拥堵就麻烦了。

2.2 使用永续合约对冲

永续合约对冲,说白了就是开一个反向仓位。你在现货池做多,就在合约市场做空。听起来简单,但实际操作时有很多细节。

2.2.1 对冲比例计算

这里有个坑:不是1:1对冲。因为无常损失不是线性的,它跟价格变化的关系是曲线。

我记得有一次,一个朋友在ETH池子里放了100 ETH,他开了100 ETH的空单。结果ETH涨了20%,他做市赚了手续费,但空单亏了20%。一算总账,还不如不做市。

正确的做法是:

  1. 先计算你的做市敞口
  2. 根据价格波动率调整对冲比例
  3. 动态调整仓位

对冲比例公式:

对冲比例 = 1 - (1 / (1 + 价格变化率))

举个例子:如果ETH涨了10%,你的敞口大约是9.1%,那就开9.1%的空单

2.2.2 资金费率陷阱

嗯,这里要注意。永续合约有资金费率,这个费用会吃掉你的利润。尤其是在市场单边行情时,资金费率可能高得吓人。

我曾经在2021年牛市做对冲,当时ETH永续合约的资金费率年化高达80%。我开空单对冲,结果一个月下来,手续费赚了5%,资金费率亏了6.5%...你说亏不亏?

避坑指南:

  • 资金费率超过0.1%时,慎用永续合约对冲
  • 优先选择资金费率低的交易所(如dYdX、Perpetual Protocol)
  • 可以考虑用期权代替永续合约,避免资金费率

2.2.3 动态调整策略

我现在的做法是:每4小时检查一次对冲比例。为什么是4小时?因为大部分DEX的预言机更新周期就是4小时。

// 动态对冲脚本示例
const checkAndRebalance = async () => {
  const currentPrice = await getETHPrice();
  const lpPosition = await getLPPosition();
  
  // 计算理论敞口
  const exposure = calculateExposure(lpPosition, currentPrice);
  
  // 当前空单仓位
  const shortPosition = await getShortPosition();
  
  // 计算偏差
  const deviation = exposure - shortPosition;
  
  if (Math.abs(deviation) > 0.05) { // 偏差超过5%时调整
    if (deviation > 0) {
      await increaseShort(deviation);
    } else {
      await decreaseShort(-deviation);
    }
    console.log(`对冲比例已调整,当前偏差: ${deviation}`);
  }
};

// 每4小时执行一次
setInterval(checkAndRebalance, 4 * 60 * 60 * 1000);

2.3 动态做市策略

动态做市,说白了就是让策略自己适应市场。不需要手动对冲,而是通过调整做市参数来减少无常损失。

2.3.1 波动率自适应

我见过最聪明的做法是:根据波动率调整做市区间。波动率大的时候,把区间拉宽;波动率小的时候,把区间收窄。

为什么这样能减少无常损失?

  • 宽区间:价格不容易出界,减少频繁调整
  • 窄区间:资金利用率高,手续费收益多

说白了,就是在收益和风险之间找平衡。

2.3.2 实现方案

这里我分享一个我自己在用的策略框架:

// 动态做市策略核心逻辑
class DynamicMM {
  constructor(config) {
    this.baseRange = config.baseRange; // 基础区间宽度
    this.volatilityWindow = config.volatilityWindow; // 波动率计算窗口
  }

  // 计算当前波动率
  calculateVolatility(prices) {
    const returns = [];
    for (let i = 1; i < prices.length; i++) {
      returns.push(Math.log(prices[i] / prices[i-1]));
    }
    const mean = returns.reduce((a, b) => a + b) / returns.length;
    const variance = returns.reduce((a, b) => a + (b - mean) ** 2, 0) / returns.length;
    return Math.sqrt(variance);
  }

  // 根据波动率调整区间
  getAdjustedRange(volatility) {
    const multiplier = 1 + volatility * 10; // 波动率每增加1%,区间扩大10%
    const halfRange = this.baseRange * multiplier / 2;
    return {
      lower: currentPrice * (1 - halfRange),
      upper: currentPrice * (1 + halfRange)
    };
  }

  // 执行再平衡
  async rebalance() {
    const prices = await getRecentPrices(this.volatilityWindow);
    const vol = this.calculateVolatility(prices);
    const range = this.getAdjustedRange(vol);
    
    await adjustLPRange(range.lower, range.upper);
    console.log(`波动率: ${vol}, 新区间: [${range.lower}, ${range.upper}]`);
  }
}

2.3.3 实战效果

我在ETH/USDC池子上跑过这个策略,跑了3个月。对比静态做市:

指标 静态做市 动态做市
总收益 +8.2% +11.5%
最大回撤 -4.7% -2.1%
无常损失 -3.1% -1.2%
手续费收入 +11.3% +12.7%

你看,动态做市不仅减少了无常损失,手续费收入还更高了。为什么?因为区间调整得更合理,资金一直在高效运转。

我的建议:刚开始别搞太复杂。先用波动率自适应,跑一个月看看效果。等熟悉了,再叠加其他策略。

知识体系总览

下面这张图,是我梳理的三种对冲策略的核心逻辑。你可以对照着看,找到适合自己的组合。

无常损失对冲策略知识体系 无常损失对冲 期权对冲 买入看跌/看涨期权 虚值期权降低成本 到期日留3-5天缓冲 永续合约对冲 非1:1对冲比例 警惕资金费率陷阱 每4小时动态调整 动态做市策略 波动率自适应区间 宽区间降风险 窄区间提收益 核心原则:收益与风险平衡,动态调整是关键 没有万能策略,只有最适合当前市场的组合

最后说一句:没有完美的对冲策略。期权有成本,永续合约有资金费率,动态做市有技术门槛。关键是找到适合你自己的组合。

我个人建议:新手先从动态做市入手,代码跑通了再考虑加期权。永续合约对冲,等你对市场有感觉了再碰。别贪心,稳着来。


专注资料整理