مسیر Quant Developer · بخش ۶: Hedging و بازار مشتقات · درس ۲۲
Spot و Perpetual Futures؛ Funding Rate و اهرم
قرارداد آتی بدون سررسید چطور کار میکند، Funding Rate چرا و بین چه کسانی پرداخت میشود، و اهرم و Liquidation چه ریسکی برای بازارساز هجشده با Perp دارند.
۱. قرارداد آتی بدون سررسید
در درس ۲۱ گفتیم رایجترین ابزار هج در بازار رمزارز Perpetual Futures است. قبل از اینکه با آن هج کنیم، باید بدانیم دقیقاً چه چیزی معامله میکنیم.
قرارداد آتی (Futures) توافقی است برای خرید یا فروش یک دارایی در آینده با قیمتی که امروز تعیین میشود. در قرارداد آتی معمولی، روز سررسید قرارداد با قیمت Spot تسویه میشود؛ پس هرچه به سررسید نزدیکتر شویم، قیمت قرارداد به Spot نزدیکتر میشود. Perpetual Futures (به اختصار Perp) سررسید ندارد. هیچ روز تسویهای نیست که قیمتش را به Spot برگرداند. پس چه چیزی جلوی فاصله گرفتنش را میگیرد؟ جواب Funding است که در بخش ۳ میبینیم.
در این درس فقط قراردادهای خطی (Linear) را بررسی میکنیم: وجه تضمین و سود و زیان به USDT است و PnL مستقیماً متناسب با تغییر قیمت:
که Size برای Long مثبت و برای Short منفی است. اگر بازارساز ما 0.5 BTC موجودی Spot دارد و 0.5 BTC Perp را در 100,000 Short کند، با رسیدن قیمت به 101,000، موجودی Spot پانصد دلار سود و Perp پانصد دلار زیان میدهد. مواجهه خالص صفر است؛ همان هجی که در درس ۲۱ میخواستیم.
۲. سه قیمت: Last، Index و Mark
روی صفحه هر Perp معمولاً سه قیمت میبینی و هر کدام کار متفاوتی دارد:
- Last Price: قیمت آخرین معامله در دفتر سفارش خود Perp. یک سفارش Market بزرگ میتواند آن را برای چند ثانیه جابهجا کند (درس ۳).
- Index Price: میانگین وزنی قیمت Spot همان دارایی در چند صرافی. مرجع «قیمت واقعی» دارایی است و به یک دفتر سفارش وابسته نیست.
- Mark Price: قیمتی که صرافی برای محاسبه سود و زیان تحققنیافته و تصمیم Liquidation استفاده میکند. معمولاً از Index بهاضافه یک اختلاف هموارشده، یا میانه چند قیمت مرجع ساخته میشود. فرمول دقیقش در هر صرافی فرق دارد.
چرا سه قیمت؟ فرض کن Index برابر 100,000 است و یک سفارش خرید بزرگ، Last Price را برای لحظهای به 100,300 میبرد. اگر صرافی با Last Price حساب میکرد، زیان تحققنیافته Short ما 0.5 × 300 = 150 دلار میشد و شاید کسانی با اهرم بالا بیدلیل Liquidate میشدند. اگر Mark Price (فرضاً) فقط به 100,050 برسد، زیان تحققنیافته ۲۵ دلار است. Mark Price سدی است در برابر دستکاری و جهشهای لحظهای.
۳. Funding Rate: چسبی که Perp را به Spot میچسباند
سازوکار Funding ساده است: در فاصلههای منظم (در بسیاری از صرافیها هر ۸ ساعت، ولی این عدد به صرافی بستگی دارد) دارندگان موقعیت Long و Short مستقیماً به یکدیگر پول پرداخت میکنند. صرافی واسطه است، نه گیرنده.
- اگر Perp بالاتر از Index معامله شود، Funding Rate مثبت است و Longها به Shortها پرداخت میکنند.
- اگر Perp پایینتر از Index معامله شود، Funding Rate منفی است و Shortها به Longها پرداخت میکنند.
منطقش انگیزه است: وقتی Perp گران است، Long بودن هزینه دارد و Short بودن درآمد. معاملهگرها Perp را میفروشند و Spot را میخرند و فاصله بسته میشود. نرخ Funding معمولاً از میانگین صرف قیمت (Premium) در طول دوره به دست میآید:
بسیاری از صرافیها یک جزء بهره و یک سقف و کف هم به آن اضافه میکنند؛ جزئیات فرمول، فاصله پرداخت و حتی اینکه چه موقعیتهایی مشمول پرداخت میشوند، به صرافی بستگی دارد. مبلغ پرداختی اما تقریباً همهجا همین شکل را دارد:
یک مثال عددی
بازارساز ما 0.5 BTC Perp را Short کرده است. Mark Price برابر 100,000 و Funding Rate این دوره ۰.۰۱٪ مثبت است (عدد فرضی):
چون نرخ مثبت است، Longها میپردازند و ما که Short هستیم ۵ دلار دریافت میکنیم. با سه دوره در روز، ۱۵ دلار در روز. اگر همین نرخ تمام سال ثابت میماند:
این عدد وسوسهانگیز است، ولی Funding ثابت نمیماند. با کد دو روز را دنبال کنیم که نرخها (همه فرضی) علامت عوض میکنند:
# Hedge: long 0.5 BTC spot, short 0.5 BTC perp. All rates are hypothetical.
perp_position = -0.5 # short
marks = [100_000, 101_200, 99_500, 98_800, 100_400, 100_900]
rates = [0.0001, 0.0001, 0.0003, -0.0002, -0.0004, 0.00005] # per 8h interval
def funding_payment(position, mark, rate):
"""Positive = you pay, negative = you receive. Longs pay shorts when rate > 0."""
return position * mark * rate
total = 0.0
for mark, rate in zip(marks, rates):
pay = funding_payment(perp_position, mark, rate)
total += pay
print(f"mark {mark:>7,} rate {rate:+.3%} payment {pay:+7.2f}")
print(f"net over 2 days: {total:+.2f} USDT (negative = received)")
mark 100,000 rate +0.010% payment -5.00
mark 101,200 rate +0.010% payment -5.06
mark 99,500 rate +0.030% payment -14.92
mark 98,800 rate -0.020% payment +9.88
mark 100,400 rate -0.040% payment +20.08
mark 100,900 rate +0.005% payment -2.52
net over 2 days: +2.45 USDT (negative = received)
در سه دوره اول حدود ۲۵ دلار دریافت کردیم، ولی دو دوره با نرخ منفی بیش از آن را پس گرفت و در جمع ۲.۴۵ دلار پرداخت کردیم. درس اصلی:
- Funding برای هج، هزینه یا درآمدی متغیر است که خودش هج نمیشود. در محاسبه هزینه هج درس ۲۱، باید Funding را هم کنار کارمزد گذاشت.
- جهت مهم است. بازارسازی که موجودی Spot اضافه دارد، Perp را Short میکند و در بازار پرهیجان صعودی (Funding مثبت) درآمد دارد. اگر موجودیاش کمتر از هدف باشد و با Long کردن Perp هج کند، همان Funding مثبت هزینه اوست.
- در شرایط حدی، Funding میتواند برای مدتی چند برابر حالت عادی شود و هج طولانیمدت را گران کند.
۴. اهرم، وجه تضمین و Liquidation
برای باز کردن موقعیت Perp لازم نیست کل ارزش قرارداد را بپردازی؛ فقط وجه تضمین اولیه (Initial Margin) را:
برای Short کردن 0.5 BTC در 100,000 (ارزش 50,000 دلار) با اهرم ۱۰، وجه تضمین ۵,۰۰۰ دلار است. اهرم سود و زیان هر واحد قیمت را تغییر نمیدهد؛ با هر اهرمی، هر ۱,۰۰۰ دلار افزایش قیمت، ۵۰۰ دلار زیان روی این Short است. اهرم فقط تعیین میکند چقدر سرمایه کنار گذاشتهای و این سرمایه کی تمام میشود.
وجه تضمین نگهداری (Maintenance Margin) حداقل موجودی حسابی است که موقعیت برای باز ماندن لازم دارد؛ معمولاً درصدی از ارزش موقعیت با Mark Price. وقتی دارایی حساب (وجه تضمین بهاضافه سود و زیان تحققنیافته) به این حد برسد، صرافی موقعیت را بهزور میبندد: Liquidation.
برای یک موقعیت Short در حالت Isolated (وجه تضمین مخصوص همین موقعیت)، با اهرم L و نرخ وجه تضمین نگهداری m، و بدون در نظر گرفتن کارمزد و Funding:
این فرمول از برابر گذاشتن دارایی حساب با حد نگهداری به دست میآید. با اهرم ۱۰ و m فرضی ۰.۵٪:
یعنی یک افزایش ۹.۵ درصدی، Short ما را Liquidate میکند. برای اهرمهای مختلف:
def liquidation_price(entry, leverage, mm_rate, side):
"""Isolated, linear (USDT-margined) contract; ignores fees and funding.
Liquidation when equity = initial margin + unrealized PnL falls to mm_rate * notional."""
if side == "short":
return entry * (1 + 1 / leverage) / (1 + mm_rate)
return entry * (1 - 1 / leverage) / (1 - mm_rate)
entry, mm = 100_000, 0.005 # maintenance margin 0.5% (hypothetical)
for lev in [2, 3, 5, 10, 20]:
p = liquidation_price(entry, lev, mm, "short")
print(f"{lev:>2}x short: margin {0.5 * entry / lev:>8,.0f} USDT, "
f"liquidated at {p:>9,.0f} ({p / entry - 1:+.1%})")
2x short: margin 25,000 USDT, liquidated at 149,254 (+49.3%)
3x short: margin 16,667 USDT, liquidated at 132,670 (+32.7%)
5x short: margin 10,000 USDT, liquidated at 119,403 (+19.4%)
10x short: margin 5,000 USDT, liquidated at 109,453 (+9.5%)
20x short: margin 2,500 USDT, liquidated at 104,478 (+4.5%)
این جدول یک بدهبستان را نشان میدهد: اهرم بالا سرمایه کمتری قفل میکند ولی Liquidation را نزدیک میآورد. حرکت ۵ درصدی BTC در یک روز اتفاق نادری نیست.
دو حالت وجه تضمین هم باید بشناسی:
- Isolated: هر موقعیت وجه تضمین خودش را دارد. حداکثر زیان آن موقعیت محدود است، ولی زودتر Liquidate میشود.
- Cross: کل موجودی حساب پشت همه موقعیتهاست. Liquidation دورتر است، ولی یک موقعیت بد میتواند کل حساب را ببلعد.
۵. ریسکهای هج Spot با Perp برای بازارساز
حالا همه را کنار هم بگذاریم. بازارساز ما 0.5 BTC موجودی Spot در صرافی A دارد و 0.5 BTC Perp را در صرافی B با اهرم ۱۰ Short کرده است. روی کاغذ مواجهه خالص صفر است. حالا BTC در چند ساعت ۱۰٪ بالا میرود:
- Spot در صرافی A — سود تحققنیافته در 109,453
- +4,726 USDT
- Perp در صرافی B — زیان تا لحظه Liquidation
- −4,726 USDT
- باقیمانده وجه تضمین در B (شاید کارمزد Liquidation)
- ≈ 274 USDT
- مواجهه خالص بعد از Liquidation
- +0.5 BTC
در لحظه Liquidation، سود و زیان کل تقریباً صفر است؛ هج «کار کرد». اما سه اتفاق بد افتاده است:
- هج از بین رفته. حالا 0.5 BTC بدون پوشش داری، درست بعد از یک حرکت شدید که احتمال برگشت تند هم دارد.
- سرمایه در جای اشتباه است. سود در صرافی A به شکل BTC نشسته؛ صرافی B که برای هج دوباره وجه تضمین میخواهد، خالی است. انتقال بین صرافیها زمان میبرد (درس ۲۳).
- هزینه Liquidation و اجرای اجباری با قیمت بد، از دارایی کم شده است.
این مهمترین درس این بخش است: موقعیتی که در مجموع هجشده است، میتواند پایه به پایه Liquidate شود، چون سود یک پایه نمیتواند وجه تضمین پایه دیگر در صرافی دیگر شود. فهرست کامل ریسکها:
- ریسک Liquidation: با اهرم پایینتر، بافر وجه تضمین، شارژ خودکار حساب و هشدار مدیریت میشود. اندازه بافر را در درس ۲۴ حساب میکنیم.
- ریسک Funding: علامتش عوض میشود و میتواند برای دورهای پرهزینه باشد.
- ریسک Basis: Mark Price صرافی B و قیمت Spot صرافی A میتوانند از هم فاصله بگیرند. هج کامل نیست و سود و زیان تحققنیافته نوسان دارد. این موضوع درس ۲۳ است.
- Auto-Deleveraging (ADL): در بعضی صرافیها، اگر صندوق بیمه برای پوشش زیان یک Liquidation کافی نباشد، بخشی از موقعیتهای سودده طرف مقابل بهزور بسته میشود. یعنی ممکن است پایه سودده هج تو بدون اجازه کم شود.
- ریسک صرافی و عملیات: قطعی API، محدودیت برداشت، توقف معاملات. هر کدام میتواند یک پایه را قفل کند در حالی که پایه دیگر در معرض بازار است.
۶. تمرین این درس
گزینه مناسب هر سؤال را انتخاب کن و در پایان نتیجه را ببین. همه نرخها فرضیاند.
درس بعدی
در درس ۲۳ فاصله بین قیمتها را جدی میگیریم: Basis یعنی اختلاف قیمت قرارداد آتی و Spot، شهود معامله Cash-and-Carry، و اختلاف قیمت یک دارایی بین دو صرافی. با یک مثال کامل با همه هزینهها میبینیم چرا بیشتر «آربیتراژ»هایی که روی صفحه دیده میشوند، بعد از کارمزد، تأخیر، زمان انتقال و ریسک صرافی دیگر آربیتراژ نیستند.
این مطلب صرفاً آموزشی است و توصیه خرید، فروش یا سرمایهگذاری نیست.