← Kembali ke artikel
March 5, 2026
Bacaan 5 minit

Arbitraj Kadar Pendanaan Merentas Bursa: Cara Meraih Keuntungan daripada Perbezaan Kadar

Arbitraj Kadar Pendanaan Merentas Bursa: Cara Meraih Keuntungan daripada Perbezaan Kadar
#algo trading
#kadar pendanaan
#arbitraj
#kripto
#Binance
#Bybit
#market making

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

Sebaran kadar pendanaan merentas bursa

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 100K,ituialah100K, itu ialah 75/hari atau ~$2,250/bulan — tanpa risiko arah.

Mekanik Asas Arbitraj

Arbitraj kadar pendanaan merentas bursa: posisi bertentangan di dua bursa

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:

  1. Buka posisi pendek di Bybit — terima 0.04% setiap 8 jam
  2. Buka posisi panjang di Binance — bayar 0.01% setiap 8 jam
  3. Posisi adalah bercermin — risiko harga adalah neutral
  4. 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

Risiko arbitraj merentas bursa: likuidasi, divergens harga, hakisan yuran

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): 4×0.02%=0.08%4 \times 0.02\% = 0.08\%
  • Senario pesimistik (semua taker): 4×0.05%=0.20%4 \times 0.05\% = 0.20\%

Agar komisen mencapai pulang modal, posisi mesti dipegang cukup lama:

Masa pulang modal=Jumlah komisenSebaran×Pembayaran sehari\text{Masa pulang modal} = \frac{\text{Jumlah komisen}}{\text{Sebaran} \times \text{Pembayaran sehari}}

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: **40Kuntukposisi40K** untuk posisi 100K

Pulangan atas modal: ROC=$2700$40000×100%=6.75% sebulan\text{ROC} = \frac{\$2700}{\$40000} \times 100\% = 6.75\% \text{ sebulan}

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

Papan pemuka pemantauan kadar pendanaan masa nyata merentas pelbagai bursa

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

Pelaksanaan arbitraj serentak merentas bursa

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:

  1. Sebaran kadar pendanaan. Jika sebaran mengecut di bawah ambang — tutup.
  2. Baki margin. Jika margin di satu bursa jatuh di bawah tahap selamat — imbang semula atau tutup.
  3. 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

Carry trade spot-niaga hadapan kekal: pegangan spot dan posisi pendek perp di satu bursa

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

Graf rangkaian multi-bursa menunjukkan pembezaan kadar pendanaan antara lima bursa

Apabila memantau 5+ bursa serentak, anda boleh menemukan peluang yang lebih menguntungkan. Algoritma:

  1. Kumpulkan kadar pendanaan dari semua bursa
  2. Cari pasangan dengan sebaran maksimum
  3. Semak kecairan dan kedalaman buku pesanan di kedua-dua bursa
  4. Jika sebaran > ambang — buka posisi
  5. 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

Ramalan kadar pendanaan menggunakan data indeks premium dengan kon keyakinan

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

Infrastruktur perdagangan kependaman rendah untuk arbitraj merentas bursa

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:

  1. Infrastruktur — pemantauan kadar masa nyata merentas pelbagai bursa
  2. Kelajuan pelaksanaan — pembukaan posisi serentak merentas venue yang berbeza
  3. Pengurusan risiko — kawalan margin, divergens harga, dan perubahan sebaran
  4. 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

  1. Binance — Sejarah Kadar Pendanaan
  2. Binance — Pengenalan kepada Kadar Pendanaan
  3. Bybit — Memahami Kadar Pendanaan
  4. dYdX — Mekanisme Kadar Pendanaan Kekal
  5. 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.}
}
Penafian: Maklumat yang disediakan dalam artikel ini adalah untuk tujuan pendidikan dan maklumat sahaja dan bukan merupakan nasihat kewangan, pelaburan, atau dagangan. Dagangan mata wang kripto melibatkan risiko kerugian yang ketara.

Pengarang

Eugen Soloviov
Eugen Soloviov

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.

Newsletter

Kekal Mendahului Pasaran

Langgan surat berita kami untuk pandangan dagangan AI eksklusif, analisis pasaran, dan kemas kini platform.

Kami menghormati privasi anda. Berhenti melanggan pada bila-bila masa.