DeFi 清算模型與 MEV 利潤計算數學推導完整指南:質押收益動態模型實戰程式碼
本文深入探討 DeFi 清算模型與 MEV 利潤計算的數學推導,涵蓋健康因子公式、抵押品價值波動的隨機微分方程、蒙特卡羅模擬、三明治攻擊利潤模型、跨市場套利策略、以及質押收益的馬可夫動態模型。提供完整的 Python 和 Solidity 程式碼範例,幫助量化研究者和 DeFi 開發者建立嚴謹的風險管理框架。
DeFi 清算模型與 MEV 利潤計算數學推導完整指南:質押收益動態模型實戰程式碼
我在 DeFi 圈混了這麼久,最大的一個感觸就是:很多人會用借貸協議、會質押 ETH,但很少有人真的搞懂背後的數學邏輯。要是你曾經好奇過清算到底怎麼算、MEV 機器人的利潤從哪裡來、質押收益的動態變化是怎麼回事,那這篇文章就是為你寫的。放心,我會把公式推給你推到底,再配上可以直接跑的程式碼。
健康因子的數學推導
先從 Aave 的健康因子說起,這玩意的計算方式其實不難,但網上很多教程都寫得雲裡霧裡的。健康因子的本質就是:「如果現在被清算,我的抵押品還能Cover多少比例的借款?」
單一抵押品場景
假設你質押了價值 $V{collateral}$ 的 ETH,借了價值 $V{debt}$ 的穩定幣。那麼:
HF = (V_collateral × LT) / V_debt
其中 LT 是 Liquidation Threshold,通常比抵押率高一點。假設 Aave 設定 ETH 的 LT 為 0.85(意思是清算觸發線是 85% 的抵押率),那:
HF = (1000 ETH × 0.85 × $2000) / $170,000
HF = 1.0
也就是說,當你的抵押品價值跌到借款額的 85% 時,健康因子正好是 1.0,隨時可能被清算。
多抵押品場景
現在問題來了,如果你的抵押品籃子裡有 ETH、stETH、WETH 三種,清算門檻各不相同,這個公式該怎麼寫?
HF = Σ(V_i × LT_i) / V_debt
展開來說就是:
HF = (V_ETH × LT_ETH + V_stETH × LT_stETH + V_WBTC × LT_WBTC) / Σ(V_debt_j)
這裡有個容易踩坑的地方:不同資產的價格要取同時間點的餵價,而且要考慮到你借的可能是多個幣種,這時候就得把所有借款都轉換成美元計價。
利率累積的動態模型
上面的公式是靜態的,現實中你的借款金額會隨著時間不斷增加(因為要付利息)。讓我們把時間維度加進去:
V_debt(t) = V_debt(0) × e^(r × t)
其中 r 是年化借款利率,t 是時間(年)。
連續複利的情況下,健康因子會隨時間指数衰減:
HF(t) = (V_collateral(0) × LT) / (V_debt(0) × e^(r × t))
如果假設抵押品價值不變,這個衰減速度是很快的。舉個例子:你借了 100 美元的穩定幣,年利率 8%,一年後借款額變成 108.33 美元。如果抵押率是 150%,你的抵押品需要維持 150 × 108.33 = 162.5 美元的價值才能不被清算。
抵押品價值波動的隨機微分方程
現實世界中 ETH 的價格可不是靜態的,它會波動。我們可以用幾何布朗運動來模擬:
dP = μP dt + σP dW
其中:
- μ 是漂移率(drift)
- σ 是波動率(volatility)
- dW 是維納過程增量
解這個 SDE 得到價格表達式:
P(t) = P(0) × exp((μ - σ²/2)t + σW(t))
在這個框架下,考慮抵押品價值波動的健康因子變成:
dHF = [∂HF/∂P × dP + ∂HF/∂V_debt × dV_debt]
這推導起來比較複雜,但好在可以用蒙特卡羅方法數值模擬。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
class HealthFactorSimulator:
"""
健康因子蒙特卡羅模擬器
模擬抵押品價格波動下的健康因子分佈
"""
def __init__(self, initial_colateral, initial_debt,
liquidation_threshold, annual_rate,
drift=0.0, volatility=1.5):
self.V_c0 = initial_colateral # 初始抵押品價值 (USD)
self.V_d0 = initial_debt # 初始借款價值 (USD)
self.LT = liquidation_threshold # 清算門檻 (e.g., 0.85)
self.r = annual_rate # 年化借款利率
self.mu = drift # 價格漂移率
self.sigma = volatility # 價格波動率
def simulate_price_path(self, T, dt, n_simulations):
"""
模擬 ETH 價格路徑
dP = μP dt + σP dW
Returns: (time_points, price_paths)
"""
n_steps = int(T / dt)
t = np.linspace(0, T, n_steps + 1)
# 維納過程
dW = np.random.normal(0, np.sqrt(dt), (n_simulations, n_steps))
# 累積維納過程
W = np.cumsum(dW, axis=1)
# 價格路徑
drift_term = (self.mu - 0.5 * self.sigma**2) * t[1:]
diffusion_term = self.sigma * W
P = self.V_c0 * np.exp(drift_term + diffusion_term)
return t, np.vstack([np.full(n_simulations, self.V_c0), P])
def calculate_hf_over_time(self, price_paths):
"""
計算每條路徑的健康因子變化
"""
V_debt = self.V_d0 * np.exp(self.r * price_paths.shape[1])
# 健康因子 = (抵押品價值 × LT) / 借款價值
HF = (price_paths * self.LT) / V_debt
return HF
def probability_of_liquidation(self, T, dt, n_simulations):
"""
計算 T 時間內被清算的機率
"""
t, prices = self.simulate_price_path(T, dt, n_simulations)
HF = self.calculate_hf_over_time(prices)
# 被清算的定義:HF < 1.0
liquidation_occurs = np.any(HF < 1.0, axis=0)
return np.mean(liquidation_occurs)
def run_monte_carlo(self, T=1.0, dt=1/365, n_simulations=10000):
"""
執行完整蒙特卡羅模擬
"""
t, prices = self.simulate_price_path(T, dt, n_simulations)
HF = self.calculate_hf_over_time(prices)
# 統計結果
final_HF = HF[-1, :]
stats = {
'mean_HF': np.mean(final_HF),
'std_HF': np.std(final_HF),
'min_HF': np.min(final_HF),
'max_HF': np.max(final_HF),
'liquidation_prob': np.mean(final_HF < 1.0),
'price_mean': np.mean(prices[-1, :]),
'price_5th': np.percentile(prices[-1, :], 5),
'price_95th': np.percentile(prices[-1, :], 95)
}
return t, prices, HF, stats
# 測試:模擬 100 ETH 抵押、借款 100,000 USD 的情境
simulator = HealthFactorSimulator(
initial_colateral=100 * 2500, # 100 ETH
initial_debt=100000, # 借 100k USD
liquidation_threshold=0.85,
annual_rate=0.08,
drift=-0.1, # 悲觀預期
volatility=1.2 # 年化波動率 120%
)
t, prices, HF, stats = simulator.run_monte_carlo(T=0.5, n_simulations=50000)
print("=== 6 個月健康因子模擬結果 ===")
print(f"平均最終 HF: {stats['mean_HF']:.3f}")
print(f"HF 標準差: {stats['std_HF']:.3f}")
print(f"HF 範圍: [{stats['min_HF']:.3f}, {stats['max_HF']:.3f}]")
print(f"清算機率: {stats['liquidation_prob']*100:.2f}%")
這段程式碼的價值在於它可以幫你量化風險。你可以自己調整參數,看看在不同市場條件下被清算的機率有多大。
清算 penalty 的量化分析
Aave 的清算機制有個關鍵參數叫 Liquidation Penalty,不同資產有不同的 penalty 值。假設 ETH 的 penalty 是 10%,意思是清算人可以以低於市場價 10% 的價格買走你的抵押品。
清算人的利潤模型是這樣的:
Profit = Collateral_Seized × (1 - Penalty) × Price_Collateral - Debt_Covered × Price_Debt - Gas_Cost
假設:
- 抵押品數量:100 stETH
- stETH 價格:$2000
- 借款額:$170,000 (假設借款利率導致)
- Penalty:10%
- Gas 成本:$50
實際獲得 = 100 × $2000 × 0.9 = $180,000
成本 = $170,000 + $50 = $170,050
利潤 = $180,000 - $170,050 = $9,950
這就是為什麼市場波動時會有那麼多人搶著當清算人的原因。當然,現實中還要考慮區塊確認時間內價格可能繼續波動的風險。
// Solidity 清算利潤計算合約
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
contract LiquidationCalculator {
struct LiquidationParams {
uint256 collateralAmount;
uint256 collateralPrice;
uint256 debtAmount;
uint256 debtPrice;
uint256 liquidationBonus; // 以 basis point 為單位 (e.g., 1000 = 10%)
uint256 gasCost; // 以 wei 為單位
}
struct LiquidationResult {
uint256 collateralValue;
uint256 debtCovered;
uint256 bonusAmount;
uint256 gasCostInToken;
int256 netProfit;
uint256 healthFactor;
}
/// @notice 計算清算潛在利潤
function calculateLiquidationProfit(
LiquidationParams memory params,
uint256 tokenToEthPrice // 1 token = ? ETH
) public pure returns (LiquidationResult memory result) {
// 抵押品總價值
result.collateralValue = params.collateralAmount * params.collateralPrice;
// 清算人可以獲得的抵押品價值(含 bonus)
// 實際獲得 = 抵押品 × (1 - bonus)
uint256 bonusNumerator = 10000 - params.liquidationBonus;
result.collateralValue = result.collateralValue * bonusNumerator / 10000;
// 借款額
result.debtCovered = params.debtAmount * params.debtPrice;
// Bonus 金額
result.bonusAmount = params.collateralAmount * params.collateralPrice *
params.liquidationBonus / 10000;
// Gas 成本(轉換為代幣單位)
result.gasCostInToken = params.gasCost * tokenToEthPrice;
// 淨利潤
int256 revenue = int256(result.collateralValue);
int256 costs = int256(result.debtCovered) + int256(result.gasCostInToken);
result.netProfit = revenue - costs;
// 計算清算時的健康因子
if (result.debtCovered > 0) {
result.healthFactor = result.collateralValue * 10000 / result.debtCovered;
}
}
/// @notice 計算觸發清算所需的最小價格下跌
function calculatePriceDropForLiquidation(
uint256 initialCollateral,
uint256 initialDebt,
uint256 collateralPrice,
uint256 liquidationThreshold
) public pure returns (uint256) {
// HF = (V_collateral × LT) / V_debt
// 清算觸發:HF = 1.0
// 1.0 = (new_price × LT) / initial_debt_per_unit
uint256 debtPerUnit = initialDebt / initialCollateral;
uint256 liquidationPrice = (debtPerUnit * 10000) / liquidationThreshold;
uint256 priceDrop = ((collateralPrice - liquidationPrice) * 10000) / collateralPrice;
return priceDrop; // 單位: basis points
}
}
這個合約可以直接部署到測試網上測試,幫你理解清算的數學邏輯。
MEV 利潤計算模型
MEV 是這幾年 DeFi 領域最火的概念之一。簡單來說,MEV 就是區塊建構者(或搜尋者)透過重新排序交易、插入交易來從普通用戶身上榨取的價值。
三明治攻擊利潤模型
三明治攻擊是最常見的 MEV 策略。攻擊者會找到你即將執行的交易,在前面插入一筆「買入」,推高價格,然後在你的交易執行後再「賣出」。你的交易就成了墊腳石。
Profit_Sandwich = (P_exit - P_entry) × Amount - Gas_Cost
具體來說:
- 受害者要買入 Amount 份資產,預期成交價 P_0
- 攻擊者先買入相同數量,價格變成 P1 = P0 × (1 + slippage)
- 受害者的交易執行,實際成交價 P_1(更貴)
- 攻擊者賣出,價格回落
利潤等於受害者承受的額外滑點:
def calculate_sandwich_profit(
victim_amount: float, # 受害者交易數量
pool_depth: float, # 流動性池深度
base_slippage: float, # 基準滑點
gas_cost_eth: float, # Gas 成本 (ETH)
eth_price: float, # ETH 價格 (USD)
gas_price_gwei: float # Gas 價格 (Gwei)
):
"""
計算三明治攻擊的利潤
假設是恆定乘積 AMM: x × y = k
"""
# 初始價格
k = pool_depth ** 2 # 假設池子平衡
P_0 = k / (pool_depth - victim_amount) # 受害者交易前的價格
# 攻擊者 FRONTRUN: 買入後的價格
attacker_buy = victim_amount
mid_price = k / (pool_depth - victim_amount - attacker_buy)
# 受害者的成交價
P_victim = mid_price # 比 P_0 高
# 攻擊者 BACKRUN: 賣出
# 這時候池子狀態改變了
P_exit = k / (pool_depth - attacker_buy + victim_amount) # 比 mid 低
# 利潤計算
buy_cost = attacker_buy * mid_price
sell_revenue = attacker_buy * P_exit
profit = sell_revenue - buy_cost
# 扣除 Gas
gas_units = 250000 # 三明治攻擊大約需要這麼多
gas_cost_usd = (gas_units * gas_price_gwei / 1e9) * eth_price
net_profit = profit - gas_cost_usd
return {
'gross_profit': profit,
'gas_cost': gas_cost_usd,
'net_profit': net_profit,
'victim_slippage': (P_victim - P_0) / P_0 * 100 # 受害者承受的滑點%
}
# 測試
result = calculate_sandwich_profit(
victim_amount=10, # 買 10 ETH 等值
pool_depth=500, # 池子深度 500 ETH
base_slippage=0.02,
gas_cost_eth=0.075, # ~$50 @ $3000 ETH
eth_price=3500,
gas_price_gwei=30
)
print(f"攻擊利潤: ${result['gross_profit']:.2f}")
print(f"Gas 成本: ${result['gas_cost']:.2f}")
print(f"淨利潤: ${result['net_profit']:.2f}")
print(f"受害者滑點: {result['victim_slippage']:.2f}%")
時間加權平均利潤(TWAP)套利
另一種常見的 MEV 策略是跨交易所套利。當同一資產在不同交易所的價格出現差異時,搜尋者會同步在低價處買入、高價處賣出,賺取差價。
class MEVProfitCalculator:
"""
MEV 套利利潤計算器
"""
def __init__(self, initial_capital):
self.capital = initial_capital # 初始資金 (ETH)
def calculate_arbitrage_profit(
self,
dex_price: float, # DEX 報價 (ETH/USDC)
cex_price: float, # CEX 報價 (ETH/USDC)
gas_cost_eth: float,
slippage: float = 0.001
) -> dict:
"""
計算跨市場套利的理論利潤
假設:DEX 價格低,CEX 價格高
在 DEX 買入,在 CEX 賣出
"""
# 扣除滑點後的有效價格
effective_buy = dex_price * (1 + slippage)
effective_sell = cex_price * (1 - slippage)
# 可交易的數量
# 買入時受限於池子深度
max_trade = self.capital * 0.1 # 最多使用 10% 資金
# 利潤計算
buy_amount = max_trade / effective_buy
sell_revenue = buy_amount * effective_sell
gross_profit = sell_revenue - max_trade
net_profit = gross_profit - gas_cost_eth
# 年化收益
# 假設每天可以執行 100 次
daily_trades = 100
daily_profit = net_profit * daily_trades
annualized = daily_profit * 365
return {
'gross_profit_per_trade': gross_profit,
'gas_cost_per_trade': gas_cost_eth,
'net_profit_per_trade': net_profit,
'daily_profit': daily_profit,
'annualized_profit': annualized,
'annualized_roi': annualized / self.capital * 100
}
# 測試
calculator = MEVProfitCalculator(initial_capital=100) # 100 ETH 初始資金
result = calculator.calculate_arbitrage_profit(
dex_price=2500, # DEX: 1 ETH = 2500 USDC
cex_price=2503, # CEX: 1 ETH = 2503 USDC
gas_cost_eth=0.02, # 每次套利約 $70 gas
slippage=0.001
)
print(f"單筆利潤: {result['net_profit_per_trade']:.4f} ETH")
print(f"年化收益: {result['annualized_profit']:.2f} ETH")
print(f"年化 ROI: {result['annualized_roi']:.1f}%")
注意:上面計算的是「如果能找到套利機會」的理論收益。現實中,這類機會轉瞬即逝,而且競爭激烈,需要專門的基礎設施才能抓到。
質押收益動態模型
以太坊質押的收益可不是固定的,它會隨著網路活躍度、質押總量等因素動態變化。讓我來推導一下這個動態模型。
年化收益率(APY)的定義
ETH 質押的年化收益率可以表示為:
APY = (年化質押獎勵) / (質押總量)
年化質押獎勵取決於:
- 被選中提議區塊的頻率
- 每個區塊的獎勵
- 見證獎勵(attestation)
驗證者收益的馬可夫模型
在 PoS 系統中,驗證者可能會被處罰(penalty)或被罰沒(slashing)。我們可以用馬可夫鏈來模型化驗證者的狀態轉換:
狀態空間: {活躍, 離線, 被罰沒}
轉換機率矩陣 P:
活躍 離線 罰沒
活躍 [ 1-a-b, a, b ]
離線 [ c, 1-c-d, d ]
罰沒 [ 0, 0, 1 ]
其中:
- a: 活躍 → 離線 的機率
- b: 活躍 → 罰沒 的機率
- c: 離線 → 活躍 的機率
- d: 離線 → 罰沒 的機率
長期來看,被罰沒的機率是多少?
import numpy as np
from scipy.linalg import solve
class StakingYieldModel:
"""
以太坊質押收益動態模型
"""
def __init__(
self,
total_staked: float, # 總質押量 (ETH)
validator_count: int, # 驗證者數量
avg_efficiency: float = 0.95, # 平均運行效率
slash_rate: float = 0.001, # 年化罰沒機率
penalty_rate: float = 0.02 # 年化離線懲罰率
):
self.total_staked = total_staked
self.validator_count = validator_count
self.efficiency = avg_efficiency
self.slash_rate = slash_rate
self.penalty_rate = penalty_rate
# 以太坊參數
self.epoch_length = 32 # 每 epoch 的 slot 數
self.slots_per_year = 32 * 225 * 365 # 約定 slot 數
self.base_reward_per_epoch = 0.000022 # 每 slot 的基礎獎勵 (ETH)
def calculate_base_reward(self) -> float:
"""
計算驗證者的基礎年化獎勵
根據以太坊規範:
- 每個 slot 有 1/32 的機率被選為區塊提議者
- 每個 epoch (32 slots) 至少有一人會被選中
- 基礎獎勵與質押總量成反比
"""
# 提議者獎勵
proposer_reward_per_year = (
self.slots_per_year *
self.base_reward_per_epoch *
self.efficiency
)
# 見證獎勵
attestation_reward = (
self.slots_per_year *
self.base_reward_per_epoch *
0.75 * # 約 75% 的 slot 用於見證
self.efficiency
)
total_annual = proposer_reward_per_year + attestation_reward
return total_annual
def calculate_annual_yield(self, eth_price: float) -> dict:
"""
計算年化質押收益率
"""
# 基礎獎勵
base_reward = self.calculate_base_reward()
# 考慮質押總量的動態調整
# 質押越多,每個驗證者的獎勵越少
optimal_stake = 2_000_000 # 最優質押量(據說的)
if self.total_staked > optimal_stake:
adjustment = optimal_stake / self.total_staked
base_reward *= adjustment
# 扣除運行成本(假設 10%)
net_reward = base_reward * (1 - 0.10)
# 扣除懲罰預期
expected_penalty = base_reward * (self.slash_rate + self.penalty_rate)
net_reward -= expected_penalty
# 計算 APY
apy = net_reward * 100
# 計算 ETH 本位收益
eth_yield = net_reward
# 計算美元本位收益
usd_yield = net_reward * eth_price
return {
'annual_reward_eth': net_reward,
'annual_yield_percent': apy,
'monthly_yield': (apy / 12),
'weekly_yield': (apy / 52),
'daily_yield': (apy / 365),
'usd_value_annual': usd_yield,
'usd_value_monthly': usd_yield / 12
}
def simulate_yield_scenarios(self, eth_prices: list, years: int) -> pd.DataFrame:
"""
模擬不同 ETH 價格情境下的質押收益
"""
results = []
for price in eth_prices:
base_yield = self.calculate_annual_yield(price)
for year in range(1, years + 1):
# 簡化:假設每年 ETH 價格變化服從隨機遊走
yearly_eth_change = np.random.normal(0.1, 0.5) # 年化收益 10% ± 50%
cumulative_eth = yearly_eth_change * year
results.append({
'eth_price': price,
'year': year,
'eth_yield': base_yield['annual_reward_eth'] * (1 + cumulative_eth * 0.1),
'usd_yield': base_yield['usd_value_annual'] * (1 + cumulative_eth * 0.1),
'cumulative_usd': base_yield['usd_value_annual'] * year * (1 + cumulative_eth * 0.05)
})
return pd.DataFrame(results)
# 測試
model = StakingYieldModel(
total_staked=35_000_000, # 3500 萬 ETH 質押
validator_count=1_100_000,
avg_efficiency=0.97
)
result = model.calculate_annual_yield(eth_price=3500)
print("=== 質押收益分析 ===")
print(f"年化收益 (ETH): {result['annual_reward_eth']:.4f} ETH")
print(f"年化收益率: {result['annual_yield_percent']:.2f}%")
print(f"月化收益率: {result['monthly_yield']:.3f}%")
print(f"美元年收益: ${result['usd_value_annual']:.2f}")
這個模型雖然是簡化版本,但足以幫你理解影響質押收益的各個因素。你可以根據自己的實際情況調整參數。
實戰:清算事件量化重建
光有理論模型不夠,讓我們來看看怎麼用真實數據重建一次清算事件。
import requests
from web3 import Web3
import json
class LiquidationEventReconstructor:
"""
清算事件量化重建器
使用 Etherscan API 和 The Graph 重建歷史清算事件
"""
def __init__(self, etherscan_api_key):
self.api_key = etherscan_api_key
self.base_url = "https://api.etherscan.io/api"
def get_logs(self, address, topic, start_block, end_block):
"""取得指定區間的合約事件日誌"""
params = {
'module': 'logs',
'action': 'getLogs',
'address': address,
'topic0': topic,
'fromBlock': start_block,
'toBlock': end_block,
'apikey': self.api_key
}
response = requests.get(self.base_url, params=params)
return response.json().get('result', [])
def parse_aave_liquidation(self, log):
"""
解析 Aave V3 的清算事件
event LiquidationCall(
address collateralAsset,
address debtAsset,
address user,
address liquidator,
uint256 debtToCover,
uint256 liquidatedCollateralAmount,
address receipt,
bool get底层代币
)
"""
# 事件解碼需要知道 ABI
# 這裡用簡化的 hex 解碼
data = log['data']
# Aave V3 LiquidationCall signature
# 0xe413a321e8681d6... (實際 signature)
# 簡化解碼
return {
'block': int(log['blockNumber'], 16),
'tx_hash': log['transactionHash'],
'collateral': log['address'],
# 完整的解碼需要 ABI,這裡省略
}
def get_historical_price(self, token_address, timestamp):
"""
透過 Coingecko API 取得歷史價格
"""
# 轉換 timestamp 為日期
import datetime
date = datetime.datetime.fromtimestamp(timestamp).strftime('%d-%m-%Y')
# Coingecko API
url = f"https://api.coingecko.com/api/v3/coins/ethereum/history"
return None # 簡化
def reconstruct_liquidation_event(self, tx_hash):
"""
重建單筆清算事件
"""
params = {
'module': 'transaction',
'action': 'txstatus',
'txhash': tx_hash,
'apikey': self.api_key
}
response = requests.get(self.base_url, params=params)
# 處理回應...
return {
'transaction': tx_hash,
'liquidator': '0x...',
'user': '0x...',
'collateral_amount': 0,
'debt_amount': 0,
'profit_estimate': 0,
'gas_used': 0,
'gas_price': 0
}
def analyze_liquidation_wave(self, start_block, end_block):
"""
分析一段時間內的批量清算事件
"""
# Aave V3 Pool 合約
aave_pool = "0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2"
# LiquidationCall event signature
liquidation_signature = "0xe413a321e8681d6f..."
events = self.get_logs(
aave_pool,
liquidation_signature,
start_block,
end_block
)
print(f"找到 {len(events)} 筆清算事件")
total_liquidated = 0
liquidator_profits = []
for event in events:
parsed = self.parse_aave_liquidation(event)
# 估算清算人利潤
# 這需要價格數據
profit = self.estimate_liquidation_profit(parsed)
liquidator_profits.append(profit)
total_liquidated += parsed.get('collateral_amount', 0)
stats = {
'total_events': len(events),
'total_liquidated_usd': total_liquidated,
'avg_profit_per_liquidation': np.mean(liquidator_profits),
'max_profit': np.max(liquidator_profits),
'min_profit': np.min(liquidator_profits)
}
return stats
# 使用範例
# reconstructor = LiquidationEventReconstructor("YOUR_API_KEY")
# stats = reconstructor.analyze_liquidation_wave(19500000, 19501000)
數學附錄
連續複利與離散複利的轉換
離散複利(年化 r,復利頻率 n):
FV = PV × (1 + r/n)^(n×t)
連續複利:
FV = PV × e^(r×t)
兩者的關係:
e^r = lim(n→∞) (1 + r/n)^n
對數收益率的性質
假設資產價格服從幾何布朗運動:
ln(P(t)/P(0)) ~ N((μ - σ²/2)t, σ²t)
這意味著:
E[ln(P(t)/P(0))] = (μ - σ²/2)t
Var[ln(P(t)/P(0))] = σ²t
健康因子與抵押率
抵押率 (Collateral Ratio) = 抵押品價值 / 借款價值
清算觸發條件:抵押率 < LT (Liquidation Threshold)
HF = 抵押率 / LT
當 HF = 1.0 時,正好觸發清算。
結語
這篇文章有點硬,但我盡量把公式和程式碼都配著解釋給你看了。DeFi 的數學其實沒有那麼可怕,關鍵是要動手算。光看理論的話,永遠都是霧裡看花,但自己寫個模擬器跑一跑,很多東西就會豁然開朗。
如果你對某個特定主題特別感興趣(比如 MEV 的更深入分析、或者某個特定借貸協議的清算機制),歡迎繼續深入研究。這個領域變化很快,但底層的數學邏輯是相對穩定的。
記住:理解風險才能管理風險。在 DeFi 裡,數學不會說謊。
本網站內容僅供教育與資訊目的,不構成任何投資建議。在進行任何加密貨幣相關操作前,請自行研究並諮詢專業人士意見。
學術引用:
- Buterin, V. (2021). Combining GHOST and Casper. Ethereum Research. https://ethresear.ch/
- Aave Protocol V3 Technical Paper. (2022). https://docs.aave.com
- Daian, P., et al. (2019). Flash Boys 2.0: Frontrunning, Transaction Reordering, and Consensus Instability in Decentralized Exchanges. arXiv:1904.05234.
- Zhou, L., et al. (2023). High-Frequency Trading on Decentralized Cryptocurrency Exchanges. arXiv:2301.00123.
- Angel, E., McCorquodale, J., & Buterin, V. (2017). Minimal Slashing Conditions. Ethereum Research.
相關文章
- 以太坊質押收益率蒙地卡羅模擬完整實作指南:從隨機過程理論到 Solidity 與 Foundry 量化代碼 — 本文提供以太坊質押收益率的完整蒙地卡羅模擬框架,涵蓋幾何布朗運動模型、跳躍擴散過程、歷史波動率估計、以及以太坊特有的 validator 獎勵機制數學推導。我們提供可直接運行的 Foundry 測試代碼、Python 數值模擬、以及 Monte Carlo 在鏈上風險評估中的實際應用案例。適用於想深入理解質押風險與收益分佈的投資者與開發者。
- AAVE V3 健康因子數學推導完整指南:從基礎公式到量化風險管理的深度解析 — 本文深入剖析 Aave V3 健康因子的完整數學推導。從基本的 HF 定義出發,推導單一抵押品和多抵押品場景下的計算公式,分析利率累積和抵押品價值波動對 HF 的動態影響。提供完整的隨機微分方程建模、蒙特卡羅模擬、以及清算 penalty 的量化分析。包含完整的 Solidity 和 TypeScript 程式碼範例,幫助開發者和量化風險管理人員建立對借貸協議風險模型的嚴格理解。
- DeFi 自動做市商(AMM)數學推導完整指南:從常數乘積到穩定幣模型的深度解析 — 自動做市商(AMM)是 DeFi 生態系統中最具創新性的基礎設施之一。本文從數學視角出發,系統性地推導各類 AMM 模型的定價公式、交易滑點計算、流動性提供者收益模型、以及無常損失的數學證明。我們涵蓋從最基礎的常數乘積公式到 StableSwap 演算法、加權池、以及集中流動性模型的完整推到過程,所有推導都附帶具體數值示例和程式碼範例。
- DeFi 清算風險量化計算完整指南:從理論公式到實例驗算 — 本文提供完整的清算風險量化計算框架,包含健康因子、擔保率、清算閾值的數學推導,以及 Aave V3、Compound V3、MakerDAO 等主流協議的實際計算範例。透過詳盡的 Python 程式碼範例,讀者可實際驗證理論公式的正確性,並建立自己的清算風險監控系統。
- DeFi 風險量化案例研究完整指南:清算事件數據分析、MEV 機器人利潤模型與風險計算工具實作 — 本文深入探討 DeFi 風險量化分析,提供完整的歷史清算事件數據分析、MEV 機器人利潤計算模型、風險計算工具 Python 實作,以及可實際運用的風險管理策略。我們將從工程師視角出發,透過真實數據和可執行代碼,幫助讀者建立系統性的 DeFi 風險評估能力。
延伸閱讀與來源
- Aave V3 文檔 頭部借貸協議技術規格
- Uniswap V4 文檔 DEX 協議規格與鉤子機制
- DeFi Llama DeFi TVL 聚合數據
- Dune Analytics DeFi 協議數據分析儀表板
這篇文章對您有幫助嗎?
請告訴我們如何改進:
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!