المراجحة على معدلات التمويل بين البورصات: كيفية الربح من فروقات الأسعار
معدل التمويل على 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% يوميًا. بحجم مركز 75/يوم أو حوالي $2,250/شهر — بدون مخاطر اتجاهية.
الآلية الأساسية للمراجحة

الفكرة بسيطة: افتح مراكز متعاكسة على بورصتين بحيث تتلقى التمويل في واحدة وتدفع أقل في الأخرى.
مثال
Binance: معدل التمويل = +0.01% (المشترون يدفعون للبائعين) Bybit: معدل التمويل = +0.04% (المشترون يدفعون للبائعين)
الإجراءات:
- افتح مركز بيع (short) على Bybit — تتلقى 0.04% كل 8 ساعات
- افتح مركز شراء (long) على Binance — تدفع 0.01% كل 8 ساعات
- المراكز متعاكسة — مخاطر السعر محايدة
- صافي الربح: 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):
- السيناريو المتشائم (كلها Taker):
لتغطية العمولات، يجب الاحتفاظ بالمركز لفترة كافية:
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
- إجمالي المحجوز: **100K
العائد على رأس المال:
برافعة مالية 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
إدارة المراكز
بعد الفتح، يلزم المراقبة المستمرة:
- فارق معدل التمويل. إذا تقلص الفارق تحت الحد الأدنى — إغلاق.
- رصيد الهامش. إذا انخفض الهامش على إحدى البورصات تحت المستوى الآمن — إعادة موازنة أو إغلاق.
- تباين الأسعار. إذا تجاوزت الأرباح/الخسائر غير المحققة على أحد الجانبين الحد — إغلاق.
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 بورصات أو أكثر في وقت واحد، يمكنك إيجاد فرص أفضل. الخوارزمية:
- جمع معدلات التمويل من جميع البورصات
- إيجاد الزوج ذو أقصى فارق
- التحقق من السيولة وعمق دفتر الأوامر على كلتا البورصتين
- إذا كان الفارق > الحد الأدنى — فتح مراكز
- إعادة مسح مستمرة: إذا تغير أفضل زوج — تدوير
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 قد لا يبرر تكاليف البنية التحتية والوقت.
الخلاصة
المراجحة على معدلات التمويل هي استراتيجية هيكلية محايدة الدلتا. لا تتطلب التنبؤ بالأسعار، لكنها تتطلب:
- البنية التحتية — مراقبة المعدلات في الوقت الفعلي عبر بورصات متعددة
- سرعة التنفيذ — فتح مراكز متزامنة عبر منصات مختلفة
- إدارة المخاطر — التحكم في الهامش وتباين الأسعار وتغيرات الفارق
- رأس المال — الربح يتناسب مع حجم المركز
فروقات معدلات التمويل ليست ثابتة. تتسع خلال فترات التقلب وتضيق خلال فترات الهدوء. المهمة هي إيجاد واستغلال التباينات تلقائيًا أثناء وجودها.
لمزيد من المعلومات حول كيفية تأثير معدلات التمويل على استراتيجيات الرافعة المالية — انظر المقال معدلات التمويل تقتل الرافعة المالية: لماذا PnL×50x وهم.
روابط مفيدة
- Binance — Funding Rate History
- Binance — Introduction to Funding Rates
- Bybit — Understanding Funding Rates
- dYdX — Perpetual Funding Rate Mechanism
- 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.}
}
MarketMaker.cc Team
البحوث والاستراتيجيات الكمية