← Мақалаларға оралу
March 5, 2026
5 мин оқу

Биржалар арасындағы фандинг ставкасы арбитражы: ставка айырмашылығынан қалай пайда табуға болады

Биржалар арасындағы фандинг ставкасы арбитражы: ставка айырмашылығынан қалай пайда табуға болады
#algo trading
#funding rates
#arbitrage
#crypto
#Binance
#Bybit
#market making

ETHUSDT бойынша фандинг ставкасы Binance-те 0,01%, ал Bybit-те 0,035%. Сол бір монета, сол бір сәт, бірақ ставкалар 3,5 есе өзгеше. Біреу көбірек төлейді, біреу азырақ. Ал біреу осы айырмашылықтан пайда табады.

Фандинг ставкасы арбитражы — нарық бағытына тәуелді емес криптодағы бірнеше стратегиялардың бірі. Сіз бағаны болжамайсыз. Сіз алаңдар арасындағы ставкалардың құрылымдық алшақтығынан пайда аласыз.

Биржаларда фандинг ставкалары неге әр түрлі болады

Фандинг ставкасы — perpetual фьючерс келісімшартының бағасын спот бағасына бекітетін механизм. Әрбір биржа оны өз деректері негізінде дербес есептейді:

  • Трейдерлер құрамы. Binance-та көбіне лонг ашуға бейім бөлшек трейдерлер басым. Bybit пен OKX-та кәсіби қатысушылар көбірек. Лонг/шорт балансының өзгешелігі фандингтің әр түрлі болуына әкеледі.
  • Есептеу формуласы. Әрбір биржа өз формуласын пайдаланады. Binance премиум индексі мен пайыздық ставканы ескереді. Bybit пен OKX та солай істейді, бірақ басқа салмақтар мен орташалау кезеңдерімен.
  • Ликвидтілік. Ликвидтілігі төмен биржаларда премиум (фьючерс пен спот арасындағы айырмашылық) құбылмалырақ, бұл фандингтің кеңірек тербелуіне әкеледі.
  • Төлем жиілігі. Көптеген биржалар фандингті әрбір 8 сағат сайын төлейді (00:00, 08:00, 16:00 UTC). Бірақ кейбіреулері (белгілі бір жұптар үшін Bybit, dYdX) сағат сайын төлейді, бұл қосымша мүмкіндіктер туғызады.

Әдеттегі алшақтықтар

Funding rate spreads across exchanges

Тыныш нарықта ірі биржалардағы фандинг ставкалары бір-біріне жақын — айырмашылық 0,001-0,005%. Бірақ жоғары құбылмалылық кезеңдерінде алшақтықтар өседі:

Нарық фазасы Binance Bybit OKX dYdX Спред
Тыныш 0,01% 0,012% 0,009% 0,01% ~0,003%
Өсу трендi 0,03% 0,05% 0,025% 0,04% ~0,025%
Экстремалды өсу 0,1% 0,2% 0,08% 0,15% ~0,12%
Құлдырау трендi -0,02% -0,01% -0,025% -0,015% ~0,015%

8 сағатқа 0,025% спред — бір күнге 0,075% дегенді білдіреді. 100Kпозициякөлеміндебұлкүніне100K позиция көлемінде бұл күніне 75 немесе айына ~$2,250 — бағыттық тәуекелсіз.

Арбитраждың негізгі механикасы

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

Идея қарапайым: екі биржада қарама-қарсы позициялар ашу, осылайша бір жерден фандинг аласыз, ал екіншісінде азырақ төлейсіз.

Мысал

Binance: фандинг ставкасы = +0,01% (лонгтар шорттарға төлейді) Bybit: фандинг ставкасы = +0,04% (лонгтар шорттарға төлейді)

Әрекеттер:

  1. Bybit-те шорт ашу — әрбір 8 сағат сайын 0,04% алу
  2. Binance-та лонг ашу — әрбір 8 сағат сайын 0,01% төлеу
  3. Позициялар айналы — баға тәуекелі бейтарап
  4. Таза пайда: 0,04% - 0,01% = 8 сағатқа 0,03%

Күніне (3 төлем): 0,09%. Айына: ~2,7%. Бағыттық тәуекелсіз.

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)

Тәуекелдер мен қиындықтар

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

Стратегия "тегін ақша" сияқты көрінеді. Бірақ бұл олай емес. Бірнеше елеулі тәуекел бар.

1. Биржалар арасындағы баға алшақтығы

Әр түрлі биржалардағы позициялар бірдей бағада емес. Binance пен Bybit арасындағы спред әдетте 0,01-0,05% құрайды, бірақ жоғары құбылмалылық сәттерінде 0,5-1%-ға жетуі мүмкін. Егер позицияларды бір мезгілде ашпасаңыз, алшақтық фандинг пайдасынан асып кетуі мүмкін.

Шешім: минималды кідірыспен API арқылы бір мезгілде ашу. Идеалды — екі биржаға жақын орналасқан коллокацияланған серверлер.

2. Фандинг ставкасының өзгеруі

Сіз 0,03% спредте позициялар аштыңыз. Бір сағаттан кейін спред 0,005%-ға дейін тарылды немесе кері бұрылды. Енді сіз екі биржада да төлеп жатырсыз.

Шешім: нақты уақыттағы спред мониторингі және спред шектен төмен түскенде автоматты жабу.

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. Сауда комиссиялары

Екі биржада позицияларды ашу және жабу 4 ордерді білдіреді. 0,02% мейкер комиссиясы және 0,05% тейкер комиссиясы кезінде:

  • Оптимистік сценарий (барлығы мейкер): 4×0,02%=0,08%4 \times 0,02\% = 0,08\%
  • Пессимистік сценарий (барлығы тейкер): 4×0,05%=0,20%4 \times 0,05\% = 0,20\%

Комиссиялардың өтелуі үшін позицияны жеткілікті ұзақ уақыт ұстау керек:

Өтелу уақыты=Жалпы комиссияларСпред×Күндегі төлемдер\text{Өтелу уақыты} = \frac{\text{Жалпы комиссиялар}}{\text{Спред} \times \text{Күндегі төлемдер}}

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. Маржа талаптары

Екі биржадағы позициялар үшін кепіл қажет. $100K позицияда әрбір биржада 5x левередж кезінде:

  • Binance: $20K кепіл
  • Bybit: $20K кепіл
  • Жалпы бұғатталған: 100Kпозицияүшін100K позиция үшін **40K**

Капиталдан кіріс: ROC=$2700$40000×100%=6,75% айына\text{ROC} = \frac{\$2700}{\$40000} \times 100\% = 6,75\% \text{ айына}

10x левередж кезінде кепіл $20K-ға дейін төмендейді, ROC 13,5%-ға дейін өседі. Бірақ баға алшақтығынан ликвидация тәуекелі де артады.

5. Ликвидация тәуекелі

Егер активтің бағасы күрт өзгерсе, позициялардың бірінде реализацияланбаған залал пайда болады. Залалды позициясы бар биржада маржаны сақтап тұру керек. Маржа жеткіліксіз болса — ликвидация. Сол уақытта басқа биржадағы пайда көмектеспейді — ол басқа шотта.

Шешім:

  • Маржа резервін ұстау (минимумның кемінде 2 есесі)
  • Маржа деңгейі туралы ескертулерді орнату
  • Автоматты теңгерімдеу: тепе-теңдік бұзылғанда — биржалар арасында қаражатты аудару

Фандинг ставкасын мониторинг жүйесі

Real-time funding rate monitoring dashboard across multiple exchanges

Арбитражға апаратын алғашқы қадам — деректерді жинау. Барлық қызықтыратын биржалардағы фандинг ставкаларын нақты уақытта қадағалау керек.

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

Мысал шығыс

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%

Орындау: позицияларды бір мезгілде ашу

Simultaneous arbitrage execution across exchanges

Бағыттық тәуекел экспозициясынан аулақ болу үшін лонг пен шортты мүмкіндігінше бір мезгілде ашу өте маңызды.

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

Позицияны басқару

Ашқаннан кейін үздіксіз мониторинг қажет:

  1. Фандинг ставкасының спреді. Егер спред шектен төмен тарылса — жабу.
  2. Маржа балансы. Егер бір биржада маржа қауіпсіз деңгейден төмен түссе — теңгерімдеу немесе жабу.
  3. Баға алшақтығы. Егер бір жақтың реализацияланбаған P&L шектен асса — жабу.
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)

Кеңейтілген нұсқалар

Спот-перп арбитражы

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

Екі биржадағы фьючерстер орнына бір биржада спот + фьючерс пайдалануға болады:

  • Спотты сатып алу (фандингсіз)
  • Perpetual фьючерсті шорттау (ставка оң болғанда фандинг алу)

Артықшылығы: бәрі бір биржада, маржаны басқару қарапайымырақ. Кемшілігі: тек оң фандингте жұмыс істейді (лонгтар шорттарға төлейді), бұл бұқа нарығында уақыттың ~70%-ында байқалады.

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)

Мульти-биржа арбитражы

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

5+ биржаны бір мезгілде бақылағанда, неғұрлым тиімді мүмкіндіктерді табуға болады. Алгоритм:

  1. Барлық биржалардан фандинг ставкаларын жинау
  2. Максималды спреді бар жұпты табу
  3. Екі биржада да ликвидтілік пен ордер кітабының тереңдігін тексеру
  4. Спред > шектен асса — позицияларды ашу
  5. Үздіксіз қайта сканерлеу: ең жақсы жұп өзгерсе — ротация жасау
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 prediction using premium index data with confidence cone

Фандинг ставкасы премиум индексін қамтитын формула арқылы есептеледі — фьючерс бағасы мен спот бағасының арасындағы айырмашылық. Премиум фандингке қарағанда жиірек жаңартылады (әр минут сайын, ал фандинг әрбір 8 сағат сайын). Бұл дегеніміз, сіз келесі фандинг ставкасын төлемге дейін бірнеше минут немесе сағат бұрын болжай аласыз.

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

Болжамды фандинг ставкасын біле отырып, спред басқа арбитражерлердің назарын әлі аудармаған кезде, төлемге дейін позициялар ашуға болады.

Инфрақұрылым талаптары

Low-latency trading infrastructure for cross-exchange arbitrage

Байсалды фандинг ставкасы арбитражы үшін инфрақұрылым қажет:

Компонент Минимум Оңтайлы
Сервер Cloud VPS Биржаларға жақын коллокацияланған
Кідіріс < 500ms < 50ms
API кілттер 2 биржа 5+ биржа
Биржа бойынша капитал $10K әрқайсысы $50K+ әрқайсысы
Мониторинг Логтар + ескертулер Дашборд + авто-теңгерімдеу
Деректер REST API polling WebSocket ағыны

Түрлі масштабтардағы экономика

Капитал Позиция (5x) Спред 0,03% Айлық 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 масштабқа тәуелді емес (жеткілікті ликвидтілік болған жағдайда). Бірақ $10K капиталдағы абсолютті пайда инфрақұрылым шығындары мен уақытты ақтамауы мүмкін.

Қорытынды

Фандинг ставкасы арбитражы — құрылымдық, дельта-бейтарап стратегия. Ол бағаны болжауды қажет етпейді, бірақ ол мыналарды қажет етеді:

  1. Инфрақұрылым — бірнеше биржадағы ставкаларды нақты уақытта мониторингілеу
  2. Орындау жылдамдығы — әр түрлі алаңдарда позицияларды бір мезгілде ашу
  3. Тәуекелдерді басқару — маржаны, баға алшақтығын және спред өзгерістерін бақылау
  4. Капитал — пайда позиция көлеміне пропорционалды

Фандинг ставкасының спредтері тұрақты емес. Олар құбылмалылық кезеңдерінде кеңейеді және тыныш кезеңдерде тарылады. Міндет — алшақтықтар бар кезде оларды автоматты түрде табу және пайдалану.

Фандинг ставкалары левереджделген стратегияларға қалай әсер ететіні туралы толығырақ — Funding Rates Kill Your Leverage: Why PnL×50x Is a Fiction мақаласын қараңыз.


Пайдалы сілтемелер

  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

Дәйексөз

@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

Нарықтан бір қадам алда болыңыз

AI сауда талдаулары, нарық аналитикасы және платформа жаңалықтары үшін біздің ақпараттық бюллетеньге жазылыңыз.

Біз сіздің жекелігіңізді құрметтейміз. Кез келген уақытта жазылымнан шығуға болады.