第四章:借贷协议量化逻辑
借贷协议,说白了就是 DeFi 世界的「银行」。但跟传统银行不一样,这里的利率不是央行定的,而是由市场供需实时决定的。我最早接触 Compound 时,第一反应是:这玩意儿利率怎么算的?后来自己写策略时踩了不少坑,今天咱们就把这块彻底讲透。
4.1 利率模型:Compound 与 Aave 的核心差异
先说说 Compound 的利率模型。它用的是分段线性函数,说白了就是资金利用率越高,利率涨得越快。公式长这样:
// Compound 利率模型核心逻辑
uint256 utilizationRate = totalBorrows / totalLiquidity;
if (utilizationRate < kink) {
borrowRate = baseRate + utilizationRate * multiplier;
} else {
borrowRate = baseRate + kink * multiplier + (utilizationRate - kink) * jumpMultiplier;
}
这里有个关键点:kink 是个拐点,通常设在 80% 左右。一旦资金利用率超过这个值,利率会「跳涨」—— 我见过不少项目方在这上面栽跟头,以为利率会线性增长,结果清算来得猝不及防。
Aave 的模型就温和多了。它用的是非线性函数,利率曲线更平滑。我个人习惯把 Aave 的利率模型想象成「S 型曲线」:
// Aave 利率模型简化版
uint256 optimalUtilizationRate = 0.8;
uint256 slope1 = 0.04; // 低利用率斜率
uint256 slope2 = 0.75; // 高利用率斜率
if (utilizationRate < optimalUtilizationRate) {
borrowRate = baseRate + (utilizationRate / optimalUtilizationRate) * slope1;
} else {
borrowRate = baseRate + slope1 + ((utilizationRate - optimalUtilizationRate) / (1 - optimalUtilizationRate)) * slope2;
}
嗯,这里要注意:Aave 的 slope2 通常设得比 Compound 的 jumpMultiplier 小很多。为什么?因为 Aave 更注重稳定性,不希望利率剧烈波动吓跑用户。
核心差异总结:
- Compound:分段线性,拐点后利率跳涨,适合激进型策略
- Aave:非线性平滑,利率变化更温和,适合稳健型策略
4.2 存款与借款 APY 计算
APY 的计算,说白了就是复利。但 DeFi 里的复利是按区块算的,不是按天。我刚开始做量化时,直接用年化利率除以 365 算日利率,结果对不上账 —— 后来才发现,人家是按秒复利的。
公式其实不复杂:
// 存款 APY 计算
uint256 supplyRatePerBlock = 0.0001; // 每个区块的存款利率
uint256 blocksPerYear = 2102400; // 以太坊每年约 210 万个区块
// 年化 APY
double apy = pow(1 + supplyRatePerBlock, blocksPerYear) - 1;
// 借款 APY 类似,但用的是 borrowRatePerBlock
double borrowApy = pow(1 + borrowRatePerBlock, blocksPerYear) - 1;
你想想看,如果每个区块利率是 0.01%,一年下来复利效果有多恐怖?我算过一笔账:
| 每个区块利率 | 年化 APY | 实际年化(单利) |
|---|---|---|
| 0.001% | 8.3% | 2.1% |
| 0.005% | 52.6% | 10.5% |
| 0.01% | 189.5% | 21.0% |
看到了吗?复利效应在 DeFi 里被放大了无数倍。这也是为什么很多量化策略喜欢做「循环贷」—— 借出资产再存入,赚取利差。
实战技巧:计算 APY 时,别直接用合约里的 supplyRatePerBlock 乘区块数。我习惯用 Ray 精度(27 位小数)计算,否则精度损失会让你亏掉几个点的收益。
4.3 清算机制与风险参数
清算,是借贷协议里最刺激的部分。说白了就是:你的抵押品价值跌到一定程度,别人可以「打折」买走你的资产。我见过有人因为清算机制没搞懂,一夜之间亏掉 50% 的仓位。
先看清算的核心参数:
// Compound 清算参数
uint256 collateralFactor = 0.75; // 抵押因子,75%
uint256 liquidationThreshold = 0.80; // 清算阈值,80%
uint256 liquidationBonus = 0.05; // 清算奖励,5%
// 举个例子
// 你存了 100 ETH,借了 70 ETH 等值的 USDC
// 抵押因子 = 0.75,意味着最多借 75 ETH 等值
// 清算阈值 = 0.80,意味着当借出价值超过 80 ETH 时触发清算
为什么会这样?因为协议要保证清算时有人愿意接盘。清算奖励就是给清算人的「跑腿费」。我见过最夸张的一次清算奖励是 15% —— 那是在市场暴跌时,协议为了快速去杠杆设置的。
Aave 的清算机制略有不同:
- 健康因子(Health Factor):低于 1 时触发清算
- 清算阈值(Liquidation Threshold):不同资产不同,比如 ETH 是 80%,UNI 可能只有 60%
- 清算奖励(Liquidation Bonus):通常 5%-10%,由治理投票决定
避坑指南:我曾经在 Aave 上做策略时,忽略了「闪电清算」的风险。有些机器人会监控 mempool,在你交易还没确认时就抢先清算。解决方案?要么用 Flashbots 保护交易,要么把健康因子保持在 1.5 以上。
4.4 量化策略中的利率套利
讲完了基础,咱们聊聊怎么用这些知识赚钱。最常见的策略是「利率套利」:
- 跨协议套利:在 Compound 借出,存入 Aave 赚利差
- 循环贷套利:存入资产 → 借出稳定币 → 再存入 → 再借出,放大收益
- 清算套利:监控健康因子,在清算时抢跑
我个人的经验是:循环贷虽然收益高,但风险也大。2022 年那次 LUNA 崩盘,很多做循环贷的基金直接归零。你想想看,如果抵押品价格暴跌,你的仓位会被连环清算,连反应的时间都没有。
下面这张图展示了借贷协议的核心逻辑:
最后说一句:借贷协议的量化,核心就三个字 —— 算得准。利率算不准,你会亏利息;清算算不准,你会亏本金。我建议你在写策略前,先把 Compound 和 Aave 的合约源码读一遍,尤其是利率模型那部分。嗯,相信我,读完之后你对 DeFi 的理解会上一个台阶。
本章核心要点:
- Compound 用分段线性利率,Aave 用非线性平滑利率
- APY 计算要考虑区块复利,精度用 Ray(27 位小数)
- 清算机制的核心是健康因子和抵押因子
- 量化策略要同时考虑利率套利和清算风险