← Maqolalarga qaytish
March 5, 2026
5 daqiqa o'qish

Birjalar Aro Funding Rate Arbitraji: Stavkalar Farqidan Qanday Foyda Olish Mumkin

Birjalar Aro Funding Rate Arbitraji: Stavkalar Farqidan Qanday Foyda Olish Mumkin
#algo trading
#funding rates
#arbitrage
#crypto
#Binance
#Bybit
#market making

ETHUSDT bo'yicha funding rate Binance'da 0,01%, Bybit'da esa 0,035%. Bir xil tanga, bir xil vaqt, ammo stavkalar 3,5 barobar farq qiladi. Kimdir ko'proq to'laydi, kimdir kamroq. Va kimdir ushbu farqdan foyda ko'radi.

Funding rate arbitraji — bozor yo'nalishiga bog'liq bo'lmagan kriptodagi bir necha strategiyalardan biri. Siz narxni bashorat qilmaysiz. Siz platformalar orasidagi stavkalarning tarkibiy tafovutidan foyda olasiz.

Birjalarda Funding Rate Nima Uchun Farq Qiladi

Funding rate — bu perpetual fyucherslar shartnomasi narxini spot narxga bog'lab turuvchi mexanizm. Har bir birja uni o'z ma'lumotlari asosida mustaqil hisoblaydi:

  • Treyderlar tarkibi. Binance'da odatda long pozitsiya ochishga moyil bo'lgan chakana treyderlar ustunlik qiladi. Bybit va OKX'da professional ishtirokchilar ko'proq. Long/short balansining farqi turlicha funding'ga olib keladi.
  • Hisoblash formulasi. Har bir birja o'zining formulasidan foydalanadi. Binance premium indeksi va foiz stavkasini hisobga oladi. Bybit va OKX ham xuddi shunday qiladi, ammo boshqa vaznlar va o'rtacha hisoblash davrlari bilan.
  • Likvidlik. Likvidligi past birjalarda premium (fyucherslar va spot o'rtasidagi farq) ko'proq beqaror bo'ladi, bu esa funding'ning kengroq tebranishiga olib keladi.
  • To'lov chastotasi. Ko'pchilik birjalar funding'ni har 8 soatda to'laydi (00:00, 08:00, 16:00 UTC). Ammo ba'zilari (ba'zi juftliklar uchun Bybit, dYdX) har soatda to'laydi, bu qo'shimcha imkoniyatlar yaratadi.

Odatiy Tafovutlar

Funding rate spreads across exchanges

Sokin bozorda yirik birjalardagi funding rate'lar bir-biriga yaqin bo'ladi — farq 0,001-0,005% ni tashkil qiladi. Ammo yuqori beqarorlik davrlarida tafovutlar kattalashadi:

Bozor Bosqichi Binance Bybit OKX dYdX Spred
Sokin 0,01% 0,012% 0,009% 0,01% ~0,003%
O'sish trendi 0,03% 0,05% 0,025% 0,04% ~0,025%
Ekstremal o'sish 0,1% 0,2% 0,08% 0,15% ~0,12%
Pasayish trendi -0,02% -0,01% -0,025% -0,015% ~0,015%

8 soatda 0,025% spred kuniga 0,075% ni tashkil qiladi. 100Kpozitsiyahajmidabukuniga100K pozitsiya hajmida bu kuniga 75 yoki oyiga ~$2,250 — yo'nalish tavakkalisiz.

Arbitrajning Asosiy Mexanikasi

Cross-exchange funding rate arbitrage: opposite positions on two exchanges

G'oya oddiy: ikkita birjada qarama-qarshi pozitsiyalarni ochish, shunda bittasida funding olasiz, ikkinchisida esa kamroq to'laysiz.

Misol

Binance: funding rate = +0,01% (long'lar short'larga to'laydi) Bybit: funding rate = +0,04% (long'lar short'larga to'laydi)

Harakatlar:

  1. Bybit'da short ochish — har 8 soatda 0,04% olish
  2. Binance'da long ochish — har 8 soatda 0,01% to'lash
  3. Pozitsiyalar oynadagi kabi — narx tavakkalchiligi neytral
  4. Sof foyda: 0,04% - 0,01% = 8 soatga 0,03%

Kuniga (3 to'lov): 0,09%. Oyiga: ~2,7%. Yo'nalish tavakkalisiz.

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)

Tavakkalchiliklar va Tuzoqlar

Risks of cross-exchange arbitrage: liquidation, price divergence, fee erosion

Strategiya "bepul pul" kabi ko'rinadi. Ammo bu unday emas. Bir necha jiddiy tavakkalchiliklar mavjud.

1. Birjalar Orasidagi Narx Tafovuti

Turli birjalardagi pozitsiyalar bir xil narxda bo'lmaydi. Binance va Bybit orasidagi spred odatda 0,01-0,05% ni tashkil qiladi, ammo yuqori beqarorlik paytlarida 0,5-1% ga yetishi mumkin. Agar pozitsiyalar bir vaqtda ochilmasa, tafovut funding foydasidan oshib ketishi mumkin.

Yechim: minimal kechikish bilan API orqali bir vaqtda ochish. Eng yaxshisi — ikkala birjaga yaqin joylashgan kollokatsiyalangan serverlar.

2. Funding Rate O'zgarishlari

Siz 0,03% spredda pozitsiyalarni ochdingiz. Bir soatdan keyin spred 0,005% gacha torayadi yoki teskari yo'nalishga o'tadi. Endi siz ikkala birjada ham to'lamoqdasiz.

Yechim: real vaqtda spred monitoringi va spred chegaradan pastga tushganda avtomatik yopish.

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. Savdo Komissiyalari

Ikki birjada pozitsiyalarni ochish va yopish 4 ta buyurtmani anglatadi. 0,02% meyker komissiyasi va 0,05% teyker komissiyasi bilan:

  • Optimistik stsenariy (hammasi meyker): 4×0,02%=0,08%4 \times 0,02\% = 0,08\%
  • Pessimistik stsenariy (hammasi teyker): 4×0,05%=0,20%4 \times 0,05\% = 0,20\%

Komissiyalar o'zini oqlashi uchun pozitsiyani yetarlicha uzoq vaqt ushlab turish kerak:

O’zini oqlash vaqti=Umumiy komissiyalarSpred×Kunlik to’lovlar\text{O'zini oqlash vaqti} = \frac{\text{Umumiy komissiyalar}}{\text{Spred} \times \text{Kunlik to'lovlar}}

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. Marja Talablari

Ikkala birjadagi pozitsiyalar garov talab qiladi. $100K pozitsiyada har bir birjada 5x leverage bilan:

  • Binance: $20K garov
  • Bybit: $20K garov
  • Jami bloklangan: 100Kpozitsiyauchun100K pozitsiya uchun **40K**

Kapitaldan daromad: ROC=$2700$40000×100%=6,75% oyiga\text{ROC} = \frac{\$2700}{\$40000} \times 100\% = 6,75\% \text{ oyiga}

10x leverage'da garov $20K gacha kamayadi, ROC 13,5% gacha oshadi. Ammo narx tafovutidan likvidatsiya tavakkalchiligi ham ortadi.

5. Likvidatsiya Tavakkalchiligi

Agar aktiv narxi keskin o'zgarsa, pozitsiyalardan birida amalga oshirilmagan zarar paydo bo'ladi. Zararli pozitsiyaga ega bo'lgan birjada marjani ushlab turish kerak. Agar marja yetarli bo'lmasa — likvidatsiya. Shu bilan birga, boshqa birjadagi foyda yordam bermaydi — u boshqa hisobda joylashgan.

Yechim:

  • Marja zaxirasini ushlab turish (kamida minimumning 2 barobari)
  • Marja darajasi haqida ogohlantirishlarni sozlash
  • Avtomatik qayta muvozanatlash: nomutanosiblik yuzaga kelganda — birjalar orasida mablag'larni o'tkazish

Funding Rate Monitoring Tizimi

Real-time funding rate monitoring dashboard across multiple exchanges

Arbitrajga qadam tashlashning birinchi bosqichi ma'lumot to'plashdir. Barcha qiziqtirgan birjalardagi funding rate'larni real vaqtda kuzatib borish kerak.

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'])

Namunaviy Natija

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%

Bajarish: Pozitsiyalarni Bir Vaqtda Ochish

Simultaneous arbitrage execution across exchanges

Yo'nalish tavakkalchiligiga duch kelmaslik uchun long va short'ni imkon qadar bir vaqtda ochish juda muhim.

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

Pozitsiyani Boshqarish

Ochilgandan keyin uzluksiz monitoring talab qilinadi:

  1. Funding rate spredi. Agar spred chegaradan pastga tushsa — yopish.
  2. Marja balansi. Agar biror birjada marja xavfsiz darajadan pastga tushsa — qayta muvozanatlash yoki yopish.
  3. Narx tafovuti. Agar bir tomonning amalga oshirilmagan P&L limitdan oshsa — yopish.
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)

Ilg'or Variantlar

Spot-Perp Arbitraji

Spot-perpetual futures carry trade: spot holdings and short perp position on one exchange

Ikkita birjadagi fyucherslar o'rniga, bitta birjada spot + fyucherslardan foydalanish mumkin:

  • Spot sotib olish (funding'siz)
  • Perpetual fyucherslarni short qilish (stavka musbat bo'lganda funding olish)

Afzalligi: hammasi bitta birjada, marjani boshqarish osonroq. Kamchiligi: faqat musbat funding bilan ishlaydi (long'lar short'larga to'laydi), bu bull bozori davomida vaqtning ~70% da kuzatiladi.

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)

Ko'p Birjali Arbitraj

Multi-exchange network graph showing funding rate differentials between five exchanges

5+ birjani bir vaqtda kuzatib borganda, ko'proq qulay imkoniyatlarni topish mumkin. Algoritm:

  1. Barcha birjalardan funding rate'larni to'plash
  2. Maksimal spredga ega juftlikni topish
  3. Ikkala birjada ham likvidlik va order kitobi chuqurligini tekshirish
  4. Agar spred > chegara — pozitsiyalarni ochish
  5. Uzluksiz qayta skanerlash: agar eng yaxshi juftlik o'zgarsa — rotatsiya qilish
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

Funding Rate'ni Bashorat Qilish

Funding rate prediction using premium index data with confidence cone

Funding rate premium indeksini o'z ichiga olgan formula orqali hisoblanadi — bu fyucherslar narxi va spot narx o'rtasidagi farq. Premium funding'ga qaraganda ko'proq tez-tez yangilanadi (har daqiqada, funding esa har 8 soatda). Bu shuni anglatadiki, siz keyingi funding rate'ni to'lovdan bir necha daqiqa yoki soat oldin bashorat qilishingiz mumkin.

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

Bashorat qilingan funding rate'ni bilgan holda, siz to'lovdan oldin pozitsiyalarni ochishingiz mumkin, spred hali boshqa arbitrajchilarning e'tiborini tortmagan paytda.

Infratuzilma Talablari

Low-latency trading infrastructure for cross-exchange arbitrage

Jiddiy funding rate arbitraji uchun infratuzilma kerak:

Komponent Minimal Optimal
Server Bulutli VPS Birjalarga yaqin kollokatsiyalangan
Kechikish < 500ms < 50ms
API kalitlari 2 birja 5+ birja
Birja bo'yicha kapital $10K har biri $50K+ har biri
Monitoring Loglar + ogohlantirishlar Dashboard + avto-qayta muvozanatlash
Ma'lumotlar REST API polling WebSocket streaming

Turli Miqyoslardagi Iqtisodiyot

Kapital Pozitsiya (5x) Spred 0,03% Oylik PnL 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 miqyosga bog'liq emas (yetarli likvidlik mavjud bo'lganda). Ammo $10K kapitalda mutlaq foyda infratuzilma xarajatlari va vaqtni oqlamasligi mumkin.

Xulosa

Funding rate arbitraji — tarkibiy, delta-neytral strategiya. U narxni bashorat qilishni talab qilmaydi, lekin quyidagilarni talab qiladi:

  1. Infratuzilma — ko'plab birjalarda stavkalarni real vaqtda monitoring qilish
  2. Bajarish tezligi — turli platformalarda pozitsiyalarni bir vaqtda ochish
  3. Tavakkalchilikni boshqarish — marjani, narx tafovutini va spred o'zgarishlarini nazorat qilish
  4. Kapital — foyda pozitsiya hajmiga proportsional

Funding rate spredlari doimiy emas. Ular beqarorlik davrlarida kengayadi va sokin davrlarda torayadi. Vazifa — tafovutlar mavjud bo'lgan paytda ularni avtomatik ravishda topish va ulardan foydalanishdir.

Funding rate'lar leverage strategiyalariga qanday ta'sir qilishi haqida ko'proq bilish uchun — Funding Rates Kill Your Leverage: Why PnL×50x Is a Fiction maqolasini ko'ring.


Foydali Havolalar

  1. Binance — Funding Rate History
  2. Binance — Introduction to Funding Rates
  3. Bybit — Understanding Funding Rates
  4. dYdX — Perpetual Funding Rate Mechanism
  5. Coinglass — Funding Rate Monitor

Iqtibos

@article{soloviov2026fundingarbitrage,
  author = {Soloviov, Eugen},
  title = {Funding Rate Arbitrage Across Exchanges: How to Profit from Rate Differences},
  year = {2026},
  url = {https://marketmaker.cc/ru/blog/post/funding-rate-arbitrage-cross-exchange},
  description = {How funding rate arbitrage works across crypto exchanges, why rates differ on Binance, Bybit, OKX and dYdX, and how to build a monitoring and execution system.}
}
blog.disclaimer

Authors

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

Bozordan bir qadam oldinda bo'ling

Sun'iy intellekt savdo tahlillari, bozor tahlili va platforma yangiliklari uchun bizning xabarnomaga obuna bo'ling.

Biz sizning maxfiyligingizni hurmat qilamiz. Istalgan vaqtda obunadan chiqishingiz mumkin.