Arbitraj Kadar Pendanaan Merentas Bursa: Cara Meraih Keuntungan daripada Perbezaan Kadar
Kadar pendanaan ETHUSDT ialah 0.01% di Binance dan 0.035% di Bybit. Syiling yang sama, detik masa yang sama, tetapi kadar berbeza sebanyak 3.5 kali ganda. Seseorang membayar lebih, seseorang membayar kurang. Dan ada pihak yang meraih keuntungan daripada perbezaan ini.
Arbitraj kadar pendanaan merupakan salah satu strategi dalam kripto yang tidak bergantung kepada arah pasaran. Anda tidak perlu meramalkan harga. Anda mengekstrak keuntungan daripada divergens struktural kadar antara venue.
Mengapa Kadar Pendanaan Berbeza Antara Bursa
Kadar pendanaan ialah mekanisme yang menjangkar harga kontrak niaga hadapan kekal kepada harga spot. Setiap bursa mengiranya secara bebas berdasarkan data sendiri:
- Komposisi pedagang. Binance dikuasai oleh pedagang runcit yang cenderung membuka posisi panjang. Bybit dan OKX mempunyai lebih ramai peserta profesional. Keseimbangan panjang/pendek yang berbeza membawa kepada pendanaan yang berbeza.
- Formula pengiraan. Setiap bursa menggunakan formula tersendiri. Binance mengambil kira indeks premium dan kadar faedah. Bybit dan OKX melakukan perkara yang sama tetapi dengan pemberat dan tempoh purata yang berbeza.
- Kecairan. Pada bursa yang kurang cair, premium (perbezaan antara niaga hadapan dan spot) lebih turun naik, menyebabkan pendanaan turun naik dengan lebih ketara.
- Kekerapan pembayaran. Kebanyakan bursa membayar pendanaan setiap 8 jam (00:00, 08:00, 16:00 UTC). Tetapi sesetengahnya (Bybit untuk pasangan tertentu, dYdX) membayar setiap jam, mewujudkan peluang tambahan.
Divergens Tipikal

Dalam pasaran yang tenang, kadar pendanaan di bursa utama adalah hampir — perbezaannya 0.001-0.005%. Tetapi semasa tempoh turun naik yang tinggi, divergens semakin besar:
| Fasa Pasaran | Binance | Bybit | OKX | dYdX | Sebaran |
|---|---|---|---|---|---|
| Tenang | 0.01% | 0.012% | 0.009% | 0.01% | ~0.003% |
| Tren bullish | 0.03% | 0.05% | 0.025% | 0.04% | ~0.025% |
| Bullish melampau | 0.1% | 0.2% | 0.08% | 0.15% | ~0.12% |
| Tren bearish | -0.02% | -0.01% | -0.025% | -0.015% | ~0.015% |
Sebaran 0.025% setiap 8 jam bersamaan 0.075% sehari. Dengan saiz posisi 75/hari atau ~$2,250/bulan — tanpa risiko arah.
Mekanik Asas Arbitraj

Ideanya mudah: buka posisi bertentangan di dua bursa supaya anda menerima pendanaan di satu pihak dan membayar lebih sedikit di pihak yang lain.
Contoh
Binance: kadar pendanaan = +0.01% (posisi panjang membayar kepada posisi pendek) Bybit: kadar pendanaan = +0.04% (posisi panjang membayar kepada posisi pendek)
Tindakan:
- Buka posisi pendek di Bybit — terima 0.04% setiap 8 jam
- Buka posisi panjang di Binance — bayar 0.01% setiap 8 jam
- Posisi adalah bercermin — risiko harga adalah neutral
- Keuntungan bersih: 0.04% - 0.01% = 0.03% setiap 8 jam
Sehari (3 pembayaran): 0.09%. Sebulan: ~2.7%. Tanpa risiko arah.
def funding_arbitrage_pnl(
rate_short_exchange: float, # rate on the exchange where we short
rate_long_exchange: float, # rate on the exchange where we long
position_size: float, # position size in USD
payments_per_day: int = 3,
days: int = 30,
) -> float:
"""
PnL from funding rate arbitrage over a period.
With positive funding: short receives, long pays.
With negative funding: short pays, long receives.
"""
spread = rate_short_exchange - rate_long_exchange
daily_pnl = spread * payments_per_day * position_size
return daily_pnl * days
pnl = funding_arbitrage_pnl(0.0004, 0.0001, 100_000, days=30)
Risiko dan Perangkap

Strategi ini kelihatan seperti "wang percuma." Ia bukan begitu. Terdapat beberapa risiko serius.
1. Divergens Harga Antara Bursa
Posisi di bursa yang berbeza tidak berada pada harga yang sama. Sebaran antara Binance dan Bybit biasanya 0.01-0.05%, tetapi semasa momen turun naik tinggi boleh mencapai 0.5-1%. Jika anda tidak membuka posisi serentak, divergens boleh melebihi keuntungan pendanaan.
Penyelesaian: pembukaan serentak melalui API dengan kependaman minimum. Idealnya — pelayan collocated berdekatan kedua-dua bursa.
2. Perubahan Kadar Pendanaan
Anda membuka posisi pada sebaran 0.03%. Sejam kemudian sebaran menyempit kepada 0.005% atau berbalik arah. Kini anda membayar di kedua-dua bursa.
Penyelesaian: pemantauan sebaran masa nyata dan penutupan automatik apabila sebaran jatuh di bawah ambang.
def should_close(
current_spread: float,
entry_spread: float,
min_spread: float = 0.0001, # 0.01%
trading_costs: float = 0.0005, # 0.05% for opening + closing
) -> bool:
"""
Close the position if the spread has fallen below the threshold
or if the current spread does not cover trading costs.
"""
return current_spread < min_spread or current_spread < trading_costs
3. Komisen Perdagangan
Membuka dan menutup posisi di dua bursa bermakna 4 pesanan. Pada yuran maker 0.02% dan yuran taker 0.05%:
- Senario optimistik (semua maker):
- Senario pesimistik (semua taker):
Agar komisen mencapai pulang modal, posisi mesti dipegang cukup lama:
def breakeven_days(
total_commissions_pct: float, # total commissions in %
spread: float, # funding rate spread
payments_per_day: int = 3,
) -> float:
daily_income = spread * payments_per_day
return total_commissions_pct / daily_income if daily_income > 0 else float('inf')
4. Keperluan Margin
Posisi di kedua-dua bursa memerlukan cagaran. Pada leveraj 5x di setiap bursa dengan posisi $100K:
- Binance: cagaran $20K
- Bybit: cagaran $20K
- Jumlah terkunci: **100K
Pulangan atas modal:
Pada leveraj 10x, cagaran turun kepada $20K, ROC naik kepada 13.5%. Tetapi risiko likuidasi akibat divergens harga turut meningkat.
5. Risiko Likuidasi
Jika harga aset bergerak dengan tajam, salah satu posisi akan menjana kerugian tidak terealisasi. Di bursa dengan posisi yang rugi, margin mesti dikekalkan. Jika margin tidak mencukupi — likuidasi berlaku. Sementara itu, keuntungan di bursa lain tidak membantu — ia berada dalam akaun yang berbeza.
Penyelesaian:
- Simpan rizab margin (sekurang-kurangnya 2x minimum)
- Sediakan amaran tahap margin
- Pengimbangan semula automatik: apabila ketidakseimbangan berlaku — pindahkan dana antara bursa
Sistem Pemantauan Kadar Pendanaan

Langkah pertama menuju arbitraj ialah pengumpulan data. Anda perlu menjejaki kadar pendanaan merentas semua bursa yang diminati dalam masa nyata.
import asyncio
import ccxt.pro as ccxt
from dataclasses import dataclass
from datetime import datetime
@dataclass
class FundingSnapshot:
exchange: str
symbol: str
rate: float
next_funding_time: datetime
timestamp: datetime
class FundingMonitor:
"""
Monitor funding rates across multiple exchanges.
"""
def __init__(self, symbols: list[str], exchanges: list[str]):
self.symbols = symbols
self.exchanges = {
name: getattr(ccxt, name)() for name in exchanges
}
self.latest: dict[str, dict[str, FundingSnapshot]] = {}
async def fetch_funding(self, exchange_name: str, exchange, symbol: str):
"""Fetch current funding rate from an exchange."""
try:
funding = await exchange.fetch_funding_rate(symbol)
return FundingSnapshot(
exchange=exchange_name,
symbol=symbol,
rate=funding['fundingRate'],
next_funding_time=datetime.fromtimestamp(
funding['fundingTimestamp'] / 1000
),
timestamp=datetime.utcnow(),
)
except Exception as e:
print(f"Error fetching {exchange_name} {symbol}: {e}")
return None
async def scan(self) -> list[dict]:
"""
Scan all exchanges and find arbitrage opportunities.
"""
tasks = []
for ex_name, ex in self.exchanges.items():
for symbol in self.symbols:
tasks.append(self.fetch_funding(ex_name, ex, symbol))
snapshots = await asyncio.gather(*tasks)
snapshots = [s for s in snapshots if s is not None]
by_symbol: dict[str, list[FundingSnapshot]] = {}
for s in snapshots:
by_symbol.setdefault(s.symbol, []).append(s)
opportunities = []
for symbol, rates in by_symbol.items():
rates.sort(key=lambda x: x.rate)
lowest = rates[0] # long here (pay less)
highest = rates[-1] # short here (receive more)
spread = highest.rate - lowest.rate
opportunities.append({
'symbol': symbol,
'long_exchange': lowest.exchange,
'long_rate': lowest.rate,
'short_exchange': highest.exchange,
'short_rate': highest.rate,
'spread': spread,
'annualized': spread * 3 * 365 * 100, # in % annualized
})
return sorted(opportunities, key=lambda x: -x['spread'])
Contoh Output
Symbol | Long @ | Rate | Short @ | Rate | Spread | APR
-----------+-------------+---------+-------------+---------+---------+--------
ETHUSDT | Binance | 0.010% | Bybit | 0.040% | 0.030% | 32.9%
BTCUSDT | OKX | 0.008% | Binance | 0.020% | 0.012% | 13.1%
SOLUSDT | Binance | 0.015% | dYdX | 0.055% | 0.040% | 43.8%
ARBUSDT | Bybit | 0.005% | OKX | 0.030% | 0.025% | 27.4%
Pelaksanaan: Pembukaan Posisi Serentak

Adalah amat penting untuk membuka posisi panjang dan pendek serentak mungkin bagi mengelakkan pendedahan risiko arah.
import asyncio
async def execute_arbitrage(
long_exchange,
short_exchange,
symbol: str,
size: float,
max_slippage_pct: float = 0.05,
):
"""
Simultaneously open a long and short on two exchanges.
"""
long_ticker = await long_exchange.fetch_ticker(symbol)
short_ticker = await short_exchange.fetch_ticker(symbol)
price_spread = abs(
long_ticker['ask'] - short_ticker['bid']
) / long_ticker['ask'] * 100
if price_spread > max_slippage_pct:
raise ValueError(
f"Price spread {price_spread:.3f}% exceeds max slippage"
)
long_order, short_order = await asyncio.gather(
long_exchange.create_market_buy_order(symbol, size),
short_exchange.create_market_sell_order(symbol, size),
)
return long_order, short_order
Pengurusan Posisi
Selepas pembukaan, pemantauan berterusan diperlukan:
- Sebaran kadar pendanaan. Jika sebaran mengecut di bawah ambang — tutup.
- Baki margin. Jika margin di satu bursa jatuh di bawah tahap selamat — imbang semula atau tutup.
- Divergens harga. Jika P&L tidak terealisasi di satu pihak melebihi had — tutup.
async def monitor_and_manage(
long_exchange,
short_exchange,
symbol: str,
size: float,
min_spread: float = 0.0001,
max_unrealized_loss_pct: float = 2.0,
check_interval: int = 60,
):
"""
Monitor an open arbitrage position.
"""
while True:
long_funding = await long_exchange.fetch_funding_rate(symbol)
short_funding = await short_exchange.fetch_funding_rate(symbol)
current_spread = (
short_funding['fundingRate'] - long_funding['fundingRate']
)
long_balance = await long_exchange.fetch_balance()
short_balance = await short_exchange.fetch_balance()
long_positions = await long_exchange.fetch_positions([symbol])
short_positions = await short_exchange.fetch_positions([symbol])
long_upnl = long_positions[0]['unrealizedPnl'] if long_positions else 0
short_upnl = short_positions[0]['unrealizedPnl'] if short_positions else 0
total_upnl_pct = (long_upnl + short_upnl) / size * 100
if current_spread < min_spread:
print(f"Spread collapsed: {current_spread:.4%}")
await close_both(long_exchange, short_exchange, symbol, size)
break
if abs(total_upnl_pct) > max_unrealized_loss_pct:
print(f"Unrealized loss exceeded: {total_upnl_pct:.2f}%")
await close_both(long_exchange, short_exchange, symbol, size)
break
await asyncio.sleep(check_interval)
Varian Lanjutan
Arbitraj Spot-Perp

Berbanding niaga hadapan di dua bursa, anda boleh menggunakan spot + niaga hadapan di satu bursa sahaja:
- Beli spot (tiada pendanaan)
- Short niaga hadapan kekal (terima pendanaan apabila kadar positif)
Kelebihan: semuanya di satu bursa, pengurusan margin lebih mudah. Kelemahan: hanya berfungsi dengan pendanaan positif (posisi panjang membayar posisi pendek), yang diperhatikan ~70% masa semasa pasaran bull.
def spot_perp_carry(
funding_rate: float, # current funding rate
spot_fee: float = 0.001, # spot commission (0.1%)
perp_fee: float = 0.0005, # futures commission (0.05%)
leverage: int = 1,
) -> dict:
"""
Calculate the yield of a spot-perp carry trade.
"""
total_fees = (spot_fee + perp_fee) * 2 # opening + closing
daily_income = funding_rate * 3
breakeven_days = total_fees / daily_income if daily_income > 0 else float('inf')
return {
'daily_income_pct': daily_income * 100,
'monthly_income_pct': daily_income * 30 * 100,
'annualized_pct': daily_income * 365 * 100,
'total_fees_pct': total_fees * 100,
'breakeven_days': breakeven_days,
}
result = spot_perp_carry(0.0003)
Arbitraj Multi-Bursa

Apabila memantau 5+ bursa serentak, anda boleh menemukan peluang yang lebih menguntungkan. Algoritma:
- Kumpulkan kadar pendanaan dari semua bursa
- Cari pasangan dengan sebaran maksimum
- Semak kecairan dan kedalaman buku pesanan di kedua-dua bursa
- Jika sebaran > ambang — buka posisi
- Imbas semula secara berterusan: jika pasangan terbaik berubah — putar
def find_best_pair(
rates: dict[str, float], # {"binance": 0.01, "bybit": 0.04, "okx": 0.02}
min_spread: float = 0.0002,
) -> tuple[str, str, float] | None:
"""
Find the exchange pair with the maximum funding rate spread.
Returns: (long_exchange, short_exchange, spread) or None.
"""
exchanges = list(rates.keys())
best = None
for i, ex_long in enumerate(exchanges):
for ex_short in exchanges[i+1:]:
if rates[ex_long] < rates[ex_short]:
spread = rates[ex_short] - rates[ex_long]
long_ex, short_ex = ex_long, ex_short
else:
spread = rates[ex_long] - rates[ex_short]
long_ex, short_ex = ex_short, ex_long
if spread >= min_spread:
if best is None or spread > best[2]:
best = (long_ex, short_ex, spread)
return best
Meramal Kadar Pendanaan

Kadar pendanaan dikira menggunakan formula yang merangkumi indeks premium — perbezaan antara harga niaga hadapan dan harga spot. Premium dikemas kini lebih kerap berbanding pendanaan (setiap minit berbanding setiap 8 jam). Ini bermakna anda boleh meramal kadar pendanaan seterusnya beberapa minit atau jam sebelum pembayaran.
def predict_next_funding(
premium_index: float,
interest_rate: float = 0.0001, # 0.01% per 8h (standard)
clamp_range: float = 0.0005, # ±0.05%
) -> float:
"""
Predict the next funding rate based on the current premium index.
Binance formula: FR = clamp(Premium - Interest, -0.05%, 0.05%) + Interest
"""
diff = premium_index - interest_rate
clamped = max(-clamp_range, min(clamp_range, diff))
return clamped + interest_rate
Mengetahui kadar pendanaan yang diramalkan, anda boleh membuka posisi sebelum pembayaran, apabila sebaran belum menarik perhatian arbitrageur lain.
Keperluan Infrastruktur

Untuk arbitraj kadar pendanaan yang serius, anda memerlukan infrastruktur:
| Komponen | Minimum | Optimum |
|---|---|---|
| Pelayan | Cloud VPS | Collocated berdekatan bursa |
| Kependaman | < 500ms | < 50ms |
| Kunci API | 2 bursa | 5+ bursa |
| Modal per bursa | $10K setiap satu | $50K+ setiap satu |
| Pemantauan | Log + amaran | Papan pemuka + pengimbangan semula auto |
| Data | Polling REST API | Penstriman WebSocket |
Ekonomi pada Pelbagai Skala
| Modal | Posisi (5x) | Sebaran 0.03% | PnL Bulanan | ROC |
|---|---|---|---|---|
| $10K | $25K | 0.03% | ~$675 | ~6.75% |
| $50K | $125K | 0.03% | ~$3,375 | ~6.75% |
| $200K | $500K | 0.03% | ~$13,500 | ~6.75% |
ROC tidak bergantung pada skala (dengan kecairan yang mencukupi). Tetapi keuntungan mutlak pada modal $10K mungkin tidak wajar menanggung kos infrastruktur dan masa.
Kesimpulan
Arbitraj kadar pendanaan ialah strategi struktural dan delta-neutral. Ia tidak memerlukan ramalan harga, tetapi memerlukan:
- Infrastruktur — pemantauan kadar masa nyata merentas pelbagai bursa
- Kelajuan pelaksanaan — pembukaan posisi serentak merentas venue yang berbeza
- Pengurusan risiko — kawalan margin, divergens harga, dan perubahan sebaran
- Modal — keuntungan adalah berkadar dengan saiz posisi
Sebaran kadar pendanaan tidak kekal. Ia melebar semasa tempoh turun naik dan menyempit semasa tempoh tenang. Tugasnya ialah mencari dan mengeksploitasi divergens secara automatik selagi ia wujud.
Untuk maklumat lanjut tentang cara kadar pendanaan mempengaruhi strategi berleveraj — lihat artikel Kadar Pendanaan Membunuh Leveraj Anda: Mengapa PnL×50x Adalah Rekaan.
Pautan Berguna
- Binance — Sejarah Kadar Pendanaan
- Binance — Pengenalan kepada Kadar Pendanaan
- Bybit — Memahami Kadar Pendanaan
- dYdX — Mekanisme Kadar Pendanaan Kekal
- Coinglass — Monitor Kadar Pendanaan
Petikan
@article{soloviov2026fundingarbitrage,
author = {Soloviov, Eugen},
title = {Funding Rate Arbitrage Across Exchanges: How to Profit from Rate Differences},
year = {2026},
url = {https://marketmaker.cc/ms/blog/post/funding-rate-arbitrage-cross-exchange},
description = {Cara arbitraj kadar pendanaan berfungsi merentas bursa kripto, mengapa kadar berbeza di Binance, Bybit, OKX dan dYdX, dan cara membina sistem pemantauan dan pelaksanaan.}
}
Pengarang
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.