← العودة إلى قائمة المقالات
March 5, 2026
5 دقائق للقراءة

المراجحة على معدلات التمويل بين البورصات: كيفية الربح من فروقات الأسعار

المراجحة على معدلات التمويل بين البورصات: كيفية الربح من فروقات الأسعار
#algo trading
#funding rates
#arbitrage
#crypto
#Binance
#Bybit
#market making

معدل التمويل على ETHUSDT هو 0.01% على Binance و0.035% على Bybit. نفس العملة، نفس اللحظة الزمنية، لكن المعدلات تختلف بمقدار 3.5 مرة. شخص يدفع أكثر، وشخص يدفع أقل. وشخص يربح من هذا الفرق.

المراجحة على معدلات التمويل هي واحدة من الاستراتيجيات القليلة في العملات المشفرة التي لا تعتمد على اتجاه السوق. أنت لا تتنبأ بالسعر. بل تستخرج الربح من التباين الهيكلي للمعدلات بين المنصات.

لماذا تختلف معدلات التمويل بين البورصات

معدل التمويل هو آلية تربط سعر عقد العقود الآجلة الدائمة بالسعر الفوري. كل بورصة تحسبه بشكل مستقل بناءً على بياناتها الخاصة:

  • تركيبة المتداولين. تهيمن على Binance متداولو التجزئة الذين يميلون إلى الشراء (long). أما Bybit وOKX فلديهما مشاركون محترفون أكثر. اختلاف توازن الشراء/البيع يؤدي إلى اختلاف التمويل.
  • صيغة الحساب. كل بورصة تستخدم صيغتها الخاصة. Binance تأخذ في الاعتبار مؤشر العلاوة وسعر الفائدة. Bybit وOKX تفعلان الشيء نفسه لكن بأوزان وفترات متوسطة مختلفة.
  • السيولة. في البورصات الأقل سيولة، تكون العلاوة (الفرق بين العقود الآجلة والسعر الفوري) أكثر تقلبًا، مما يجعل التمويل يتذبذب بشكل أوسع.
  • تكرار الدفع. معظم البورصات تدفع التمويل كل 8 ساعات (00:00، 08:00، 16:00 UTC). لكن بعضها (Bybit لأزواج معينة، dYdX) تدفع كل ساعة، مما يخلق فرصًا إضافية.

التباينات النموذجية

فروقات معدلات التمويل بين البورصات

في سوق هادئ، تكون معدلات التمويل على البورصات الرئيسية متقاربة — الفرق 0.001-0.005%. لكن خلال فترات التقلب المرتفع، تتسع التباينات:

مرحلة السوق Binance Bybit OKX dYdX الفارق
هادئ 0.01% 0.012% 0.009% 0.01% ~0.003%
اتجاه صعودي 0.03% 0.05% 0.025% 0.04% ~0.025%
صعود حاد 0.1% 0.2% 0.08% 0.15% ~0.12%
اتجاه هبوطي -0.02% -0.01% -0.025% -0.015% ~0.015%

فارق 0.025% كل 8 ساعات يعني 0.075% يوميًا. بحجم مركز 100K،هذايعني100K، هذا يعني 75/يوم أو حوالي $2,250/شهر — بدون مخاطر اتجاهية.

الآلية الأساسية للمراجحة

المراجحة على معدلات التمويل بين البورصات: مراكز متعاكسة على بورصتين

الفكرة بسيطة: افتح مراكز متعاكسة على بورصتين بحيث تتلقى التمويل في واحدة وتدفع أقل في الأخرى.

مثال

Binance: معدل التمويل = +0.01% (المشترون يدفعون للبائعين) Bybit: معدل التمويل = +0.04% (المشترون يدفعون للبائعين)

الإجراءات:

  1. افتح مركز بيع (short) على Bybit — تتلقى 0.04% كل 8 ساعات
  2. افتح مركز شراء (long) على Binance — تدفع 0.01% كل 8 ساعات
  3. المراكز متعاكسة — مخاطر السعر محايدة
  4. صافي الربح: 0.04% - 0.01% = 0.03% كل 8 ساعات

في اليوم (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)

المخاطر والمزالق

مخاطر المراجحة بين البورصات: التصفية، تباين الأسعار، تآكل الرسوم

تبدو الاستراتيجية وكأنها "أموال مجانية". ليست كذلك. هناك عدة مخاطر جدية.

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 أوامر. بعمولة Maker 0.02% وعمولة Taker 0.05%:

  • السيناريو المتفائل (كلها Maker): 4×0.02%=0.08%4 \times 0.02\% = 0.08\%
  • السيناريو المتشائم (كلها Taker): 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. متطلبات الهامش

المراكز على كلتا البورصتين تتطلب ضمانات. برافعة مالية 5x على كل بورصة بمركز $100K:

  • Binance: ضمان $20K
  • Bybit: ضمان $20K
  • إجمالي المحجوز: **40Kلمركز40K** لمركز 100K

العائد على رأس المال: ROC=$2700$40000×100%=6.75% شهريًا\text{ROC} = \frac{\$2700}{\$40000} \times 100\% = 6.75\% \text{ شهريًا}

برافعة مالية 10x، ينخفض الضمان إلى $20K، ويرتفع ROC إلى 13.5%. لكن مخاطر التصفية من تباين الأسعار تزداد أيضًا.

5. مخاطر التصفية

إذا تحرك سعر الأصل بشكل حاد، يولّد أحد المراكز خسارة غير محققة. على البورصة التي بها المركز الخاسر، يجب الحفاظ على الهامش. إذا كان الهامش غير كافٍ — تصفية. في الوقت نفسه، الربح على البورصة الأخرى لا يساعد — فهو في حساب مختلف.

الحل:

  • الاحتفاظ باحتياطي هامش (على الأقل ضعف الحد الأدنى)
  • إعداد تنبيهات مستوى الهامش
  • إعادة موازنة تلقائية: عند حدوث اختلال — نقل الأموال بين البورصات

نظام مراقبة معدلات التمويل

الخطوة الأولى نحو المراجحة هي جمع البيانات. تحتاج إلى تتبع معدلات التمويل عبر جميع البورصات المهمة في الوقت الفعلي.

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%

التنفيذ: فتح المراكز المتزامن

تنفيذ المراجحة المتزامنة بين البورصات

من المهم للغاية فتح مركزي الشراء والبيع في وقت واحد قدر الإمكان لتجنب التعرض لمخاطر الاتجاه.

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. تباين الأسعار. إذا تجاوزت الأرباح/الخسائر غير المحققة على أحد الجانبين الحد — إغلاق.
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)

متغيرات متقدمة

مراجحة الفوري-الدائم

بدلاً من العقود الآجلة على بورصتين، يمكنك استخدام الفوري + العقود الآجلة على بورصة واحدة:

  • شراء فوري (بدون تمويل)
  • بيع العقد الآجل الدائم (تلقي التمويل عندما يكون المعدل إيجابيًا)

الميزة: كل شيء على بورصة واحدة، إدارة هامش أبسط. العيب: يعمل فقط مع التمويل الإيجابي (المشترون يدفعون للبائعين)، وهو ما يُلاحظ حوالي 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)

المراجحة متعددة البورصات

عند مراقبة 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

التنبؤ بمعدل التمويل

يُحسب معدل التمويل باستخدام صيغة تتضمن مؤشر العلاوة — الفرق بين سعر العقود الآجلة والسعر الفوري. يُحدَّث مؤشر العلاوة بشكل أكثر تكرارًا من التمويل (كل دقيقة مقابل كل 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

بمعرفة معدل التمويل المتوقع، يمكنك فتح مراكز قبل الدفع، عندما لم يجذب الفارق بعد انتباه المراجحين الآخرين.

متطلبات البنية التحتية

للمراجحة الجادة على معدلات التمويل، تحتاج إلى بنية تحتية:

المكوّن الحد الأدنى الأمثل
الخادم VPS سحابي خادم قريب من البورصات
زمن الاستجابة < 500ms < 50ms
مفاتيح API بورصتان 5 بورصات أو أكثر
رأس المال لكل بورصة $10K لكل واحدة $50K أو أكثر لكل واحدة
المراقبة سجلات + تنبيهات لوحة تحكم + إعادة موازنة تلقائية
البيانات استطلاع REST API تدفق WebSocket

الاقتصاديات بمقاييس مختلفة

رأس المال المركز (5x) فارق 0.03% الربح الشهري 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. رأس المال — الربح يتناسب مع حجم المركز

فروقات معدلات التمويل ليست ثابتة. تتسع خلال فترات التقلب وتضيق خلال فترات الهدوء. المهمة هي إيجاد واستغلال التباينات تلقائيًا أثناء وجودها.

لمزيد من المعلومات حول كيفية تأثير معدلات التمويل على استراتيجيات الرافعة المالية — انظر المقال معدلات التمويل تقتل الرافعة المالية: لماذا PnL×50x وهم.


روابط مفيدة

  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

Citation

@article{soloviov2026fundingarbitrage,
  author = {Soloviov, Eugen},
  title = {Funding Rate Arbitrage Across Exchanges: How to Profit from Rate Differences},
  year = {2026},
  url = {https://marketmaker.cc/ar/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

MarketMaker.cc Team

البحوث والاستراتيجيات الكمية

ناقش في تلغرام
Newsletter

ابقَ متقدماً على السوق

اشترك في نشرتنا الإخبارية للحصول على رؤى حصرية حول تداول الذكاء الاصطناعي وتحليلات السوق وتحديثات المنصة.

نحترم خصوصيتك. يمكنك إلغاء الاشتراك في أي وقت.