رفتن به محتوای اصلی
سرفصل مسیر Quant Developer

مسیر Quant Developer · بخش ۶: Hedging و بازار مشتقات · درس ۲۱

Hedging و انتخاب ابزار هج

چطور ریسک موجودی بازارساز را با یک موقعیت مخالف پوشش دهیم، با چه ابزاری و به چه نسبتی، و چه وقت هزینه هج از ریسکی که کم می‌کند بیشتر می‌شود.

سطح: متوسط تا پیشرفته۱۴ دقیقه مطالعه

۱. مسئله: موجودی‌ای که نخواسته‌ای

بخش ششم را با سؤالی شروع می‌کنیم که از درس ۱ همراه ما بوده است: اگر سفارش خرید بازارساز پر شود ولی سفارش فروشش نه، با موجودی باقی‌مانده چه کنیم؟

در درس ۶ دیدیم ابزار اول بازارساز Skew است: قیمت‌هایش را طوری جابه‌جا می‌کند که احتمال پر شدن سمتی که موجودی را کم می‌کند بیشتر شود. در درس‌های ۱۱ و ۱۲ همین ایده را در مدل‌های Avellaneda–Stoikov و Guéant–Lehalle–Fernandez-Tapia دقیق کردیم. اما Skew یک ابزار منفعل است؛ باید صبر کنی تا بازار بیاید و طرف مقابلت شود.

فرض کن بعد از یک موج فروش در بازار BTC/USDT، بازارساز ما 0.5 BTC موجودی خریده است. با Mid حدود 100,000، این یعنی حدود 50,000 دلار مواجهه با قیمت بیت‌کوین. اگر نوسان روزانه را ۳٪ فرض کنیم (عدد فرضی؛ محاسبه نوسان را در درس ۹ دیدیم)، نوسان یک‌ساعته چنین است:

σ_1h = 3% / √24 ≈ 0.61%
PnL std (1h) = 50,000 × 0.61% ≈ 306 USDT

حالا این را کنار درآمد بازارسازی بگذار: هر پر شدن 0.05 BTC با نیم‌اسپرد ۱۰ دلار (همان قیمت‌های 99,990 و 100,010 درس ۱)، پیش از کارمزد فقط 0.5 دلار درآمد دارد. یعنی یک انحراف معیار حرکت قیمت در یک ساعت، برابر درآمد حدود ۶۰۰ پر شدن است. صبر کردن برای اینکه Skew کارش را بکند، خودش ریسک است.

Hedging یا پوشش ریسک یعنی گرفتن یک موقعیت مخالف در جای دیگر، همین الان، تا سود و زیان مجموع به حرکت قیمت حساسیت کمتری داشته باشد. به این حساسیت Delta یا مواجهه می‌گوییم:

Net Exposure = Inventory + Hedge Position

اگر 0.5 BTC موجودی داری و 0.5 BTC در جای دیگر می‌فروشی، مواجهه خالص صفر است. بهایش این است که معامله هج معمولاً Taker است (درس ۳) و کارمزد و اسپرد می‌پردازی؛ یعنی دقیقاً همان هزینه‌ای که بازارساز بقیه بازار را بابتش شارژ می‌کند، حالا خودش می‌پردازد.

۲. با چه ابزاری هج کنیم؟

سه انتخاب رایج برای بازارساز رمزارز:

ابزار هجمزیتایراد
همان دارایی (Spot) در صرافی دیگردقیقاً همان دارایی؛ ریسک باقی‌مانده تقریباً صفرباید از قبل BTC آنجا داشته باشی؛ موجودی فقط جابه‌جا می‌شود و بعداً باید متعادلش کنی
Perpetual Futures روی همان داراییبدون داشتن دارایی می‌توانی Short بگیری؛ نقدشونده؛ با وجه تضمین کار می‌کندFunding، اختلاف قیمت با Spot، خطر Liquidation
دارایی همبسته (مثلاً هج یک آلت‌کوین با BTC)وقتی برای خود دارایی ابزار نقدشونده‌ای نیستریسک باقی‌مانده بزرگ؛ همبستگی ثابت نیست

چند معیار انتخاب را تعیین می‌کنند:

  • همبستگی با موجودی: هرچه حرکت ابزار هج به موجودی نزدیک‌تر باشد، ریسک باقی‌مانده کمتر است.
  • هزینه اجرا: کارمزد Taker، اسپرد و اسلیپیج (درس ۱۹). ابزاری که اسپرد پهن دارد، هج را گران می‌کند.
  • سرمایه: فروش Spot در صرافی دیگر یعنی از قبل آنجا BTC نگه داشته‌ای. قرارداد آتی فقط وجه تضمین می‌خواهد.
  • ریسک عملیاتی: هر صرافی اضافه یعنی یک اتصال دیگر، یک حساب دیگر و یک نقطه شکست دیگر.

در بازار رمزارز، رایج‌ترین ابزار هج Perpetual Futures است: قراردادی بدون سررسید که قیمتش با سازوکاری به نام Funding نزدیک قیمت Spot نگه داشته می‌شود. جزئیاتش، از Mark Price تا Liquidation، موضوع کامل درس بعد است. در این درس فرض می‌کنیم ابزار هج دقیقاً هم‌قیمت Spot است؛ در درس ۲۳ می‌بینیم این فرض کجا می‌شکند.

۳. نسبت هج: چقدر بفروشیم؟

اگر ابزار هج همان دارایی باشد، جواب ساده است: 0.5 BTC موجودی، 0.5 BTC فروش. سؤال وقتی جالب می‌شود که ابزار هج دارایی دیگری باشد.

فرض کن روی یک آلت‌کوین فرضی به نام ALT بازارسازی می‌کنی و 20,000 دلار ALT موجودی داری. ALT قرارداد آتی نقدشونده ندارد، پس با BTC هج می‌کنی. اگر ALT معمولاً بیشتر از BTC حرکت کند، فروش 20,000 دلار BTC کم است. نسبتی که واریانس PnL مجموع را کمینه می‌کند، نسبت هج حداقل واریانس (Minimum-Variance Hedge Ratio) است:

h* = Cov(r_S, r_H) / Var(r_H) = ρ × σ_S / σ_H

که در آن r_S بازده موجودی، r_H بازده ابزار هج، و ρ همبستگی آن دو است. این دقیقاً شیب رگرسیون بازده موجودی روی بازده ابزار هج است؛ همان β که در درس ۱۰ با رگرسیون خطی تخمین زدیم. مقدار هج به دلار می‌شود β برابر ارزش موجودی.

نکته مهم‌تر این است که حتی با بهترین نسبت، ریسک صفر نمی‌شود. انحراف معیار PnL بعد از هج:

σ_hedged = σ_S × √(1 − ρ²)
همبستگی ρکاهش انحراف معیارکاهش واریانس
0.5۱۳٪۲۵٪
0.8۴۰٪۶۴٪
0.9۵۶٪۸۱٪
0.95۶۹٪۹۰٪

همبستگی 0.8 روی کاغذ قوی به نظر می‌رسد، ولی فقط ۴۰٪ از نوسان PnL را حذف می‌کند. با کد ببینیم:

import numpy as np

rng = np.random.default_rng(21)
n = 720                                   # 30 days of hourly returns

# Synthetic world: ALT moves 1.2x BTC plus its own noise
r_btc = rng.normal(0, 0.006, n)           # BTC hourly return, sigma = 0.6%
r_alt = 1.2 * r_btc + rng.normal(0, 0.0054, n)

# Minimum-variance hedge ratio = OLS slope of ALT on BTC
beta = np.cov(r_alt, r_btc)[0, 1] / np.var(r_btc, ddof=1)
rho = np.corrcoef(r_alt, r_btc)[0, 1]

inventory = 20_000                        # long ALT, in USDT
hedge = beta * inventory                  # short this much BTC notional
print(f"beta = {beta:.2f}, rho = {rho:.2f}")
print(f"hedge: short {hedge:,.0f} USDT of BTC = {hedge / 100_000:.3f} BTC")

# PnL of the inventory alone vs inventory + hedge, per hour
pnl_raw = inventory * r_alt
pnl_hedged = inventory * r_alt - hedge * r_btc
print(f"hourly PnL std: unhedged {pnl_raw.std():.0f}, hedged {pnl_hedged.std():.0f}")
print(f"variance reduction: {1 - pnl_hedged.var() / pnl_raw.var():.0%} (rho^2 = {rho**2:.0%})")

خروجی:

beta = 1.19, rho = 0.80
hedge: short 23,883 USDT of BTC = 0.239 BTC
hourly PnL std: unhedged 171, hedged 102
variance reduction: 64% (rho^2 = 64%)

β تخمینی 1.19 است (مقدار واقعی در داده ساختگی 1.2 بود)، پس به‌جای 20,000 دلار، حدود 23,900 دلار BTC می‌فروشی. نوسان ساعتی PnL از ۱۷۱ به ۱۰۲ دلار می‌رسد و کاهش واریانس دقیقاً همان ρ² است.

۴. هزینه هج در برابر ریسکی که کم می‌کند

هج رایگان نیست. هزینه هر معامله هج را برای این درس ۰.۰۶٪ ارزش معامله فرض می‌کنیم: کارمزد Taker فرضی ۰.۰۵٪ به‌اضافه نیم‌اسپرد ۱۰ دلاری روی 100,000 (۰.۰۱٪). اگر هج با Perpetual باشد، Funding هم اضافه می‌شود (درس ۲۲).

Hedge Cost = 0.5 BTC × 100,000 × 0.06% = 30 USDT

حالا فرض کن نیم ساعت بعد جریان سفارش برمی‌گردد و بازارساز با سفارش‌های Limit خودش همان 0.5 BTC را می‌فروشد. موجودی صفر شده ولی هج هنوز باز است و حالا خودش یک موقعیت Short بی‌پشتوانه است. باید آن را هم ببندی: ۳۰ دلار دیگر. ۶۰ دلار پرداختی برای پوشش موجودی‌ای که خودبه‌خود برگشت.

این مشکل ساختاری است. موجودی بازارساز به لطف Skew معمولاً به صفر برمی‌گردد، پس بخش زیادی از هج‌ها رفت‌وبرگشت‌های بی‌فایده‌اند. یک نکته ریاضی هم تصمیم را روشن‌تر می‌کند:

  • ریسک با مجذور موجودی بزرگ می‌شود: واریانس PnL متناسب با q² است. 0.1 BTC موجودی ۲۵ برابر کمتر از 0.5 BTC واریانس تولید می‌کند.
  • هزینه هج خطی است: هج 0.1 BTC فقط ۵ برابر ارزان‌تر از هج 0.5 BTC است.

پس هج کردن انحراف‌های کوچک، به ازای هر واحد ریسکی که حذف می‌کند، گران است؛ و هج کردن انحراف‌های بزرگ ارزان. این همان منطق باند هج است.

۵. چه وقت هج کنیم: پیوسته یا با باند؟

سه سیاست رایج:

  1. هج کامل (پیوسته): بعد از هر پر شدن، مواجهه خالص را به صفر برگردان.
  2. هج با باند (آستانه): تا وقتی abs(net) <= B کاری نکن؛ وقتی از باند بیرون زد، هج کن (به صفر یا به لبه باند).
  3. هج زمانی: هر N دقیقه یک بار مواجهه را صفر کن.

در ادبیات هج با هزینه معامله، سیاست بهینه معمولاً شکل همین «ناحیه بدون معامله» را دارد: داخل باند، هزینه هج از ارزش کاهش ریسک بیشتر است. برای مقایسه، یک شبیه‌سازی ساده می‌سازیم: روزهای ۱۴۴۰ دقیقه‌ای، در هر دقیقه با احتمال ۰.۳ یک پر شدن 0.05 BTC، و Skew که وقتی موجودی مثبت است احتمال خرید بیشتر را کم می‌کند. ابزار هج هم‌قیمت Spot است و هزینه‌اش ۰.۰۶٪.

import numpy as np

days, steps = 2000, 1440                  # 2000 simulated days, 1-minute steps
price0 = 100_000
sigma_min = 0.03 / np.sqrt(steps)         # 3% daily vol, hypothetical
fill_size = 0.05                          # BTC per fill
cost_rate = 0.0006                        # hedge cost: taker fee + half spread (hypothetical)

def simulate(band):
    """band=None: never hedge; band=0: hedge every fill; else hedge back to 0 when |net| > band."""
    rng = np.random.default_rng(7)        # same market and fills for every strategy
    price = np.full(days, float(price0))
    inv = np.zeros(days)                  # spot inventory from market making
    hedge = np.zeros(days)                # perp position (short = negative)
    pnl = np.zeros(days)
    cost = np.zeros(days)
    for _ in range(steps):
        # A fill arrives with prob 0.3; skew makes buys less likely when long
        filled = rng.random(days) < 0.3
        p_buy = np.clip(0.5 - 0.2 * inv, 0.05, 0.95)
        side = np.where(rng.random(days) < p_buy, 1.0, -1.0)
        inv += filled * side * fill_size
        net = inv + hedge
        if band is not None:
            trade = np.where(np.abs(net) > band, -net, 0.0)
            hedge += trade
            cost += np.abs(trade) * price * cost_rate
        # Price moves; PnL comes from the net exposure only
        move = price * rng.normal(0, sigma_min, days)
        pnl += (inv + hedge) * move
        price += move
    return pnl, cost

for name, band in [("no hedge", None), ("full hedge", 0.0), ("band 0.25", 0.25), ("band 0.5", 0.5)]:
    pnl, cost = simulate(band)
    print(f"{name:10s}  PnL std {pnl.std():6.0f}   avg hedge cost {cost.mean():6.0f}   "
          f"worst day {pnl.min():7.0f}")

نتیجه روی ۲۰۰۰ روز شبیه‌سازی‌شده (PnL فقط بخش ناشی از حرکت قیمت روی مواجهه خالص است، بدون درآمد اسپرد):

سیاستانحراف معیار PnL روزانهمیانگین هزینه هج روزانهبدترین روز
بدون هج72502,953 دلار زیان
هج کامل01,2960
باند 0.25 BTC3511891,177 دلار زیان
باند 0.5 BTC611622,332 دلار زیان

این اعداد را باید کنار درآمد گذاشت. روزانه حدود ۴۳۲ پر شدن (۰.۳ × ۱۴۴۰) هر کدام 0.05 BTC با نیم‌اسپرد ۱۰ دلار، یعنی:

Gross Spread Income = 432 × 0.05 × 10 = 216 USDT / day
  • هج کامل ریسک را صفر می‌کند ولی روزانه ۱,۲۹۶ دلار هزینه دارد؛ شش برابر کل درآمد ناخالص. استراتژی‌ای که هر پر شدن را با Taker هج کند، در این دنیا قطعاً زیان‌ده است.
  • باند 0.25 نوسان را ۵۲٪ کم می‌کند و بدترین روز را از ۲,۹۵۳ به ۱,۱۷۷ دلار زیان می‌رساند، ولی ۱۸۹ دلار از ۲۱۶ دلار درآمد ناخالص را می‌خورد.
  • باند 0.5 فقط ۱۶٪ از نوسان را کم می‌کند و ۶۲ دلار هزینه دارد.

جواب «درست» در این مدل وجود ندارد؛ انتخاب بین این نقطه‌ها به تحمل ریسک و محدودیت‌های درس ۲۴ بستگی دارد. اما دو درس روشن است: هزینه هج باید داخل ارزیابی استراتژی باشد (درس ۲۰)، و اگر اسپرد تو از هزینه هج کمتر است، هج پیوسته معنا ندارد.

چند راه برای ارزان‌تر کردن هج که در عمل استفاده می‌شوند:

  • هج تا لبه باند به‌جای صفر: حجم هر معامله هج کمتر می‌شود، هرچند دفعاتش بیشتر.
  • هج با سفارش Maker: کارمزد کمتر یا حتی ریبیت، ولی پر شدن تضمینی نیست و در همان لحظه‌ای که بیشتر به هج نیاز داری، ممکن است پر نشود.
  • اول Skew، بعد هج: وقتی موجودی بالا می‌رود، Skew را تندتر کن و هج Taker را برای خارج از باند نگه دار.

۶. هج در معماری سیستم

در سیستم واقعی، هج یک جزء جداگانه است که روی مواجهه کل سیستم کار می‌کند، نه روی هر پر شدن:

  1. Fills from all venues پر شدن سفارش‌های بازارسازی در همه صرافی‌ها
  2. Position Service محاسبه مواجهه خالص: موجودی Spot به‌اضافه موقعیت‌های هج
  3. Hedger قاعده باند، انتخاب ابزار، نسبت β و اندازه معامله هج
  4. Execution ارسال سفارش هج و پیگیری پر شدن آن
  5. Risk & Monitoring هزینه هج، مواجهه باقی‌مانده و هشدار

سخت‌ترین بخش مهندسی همین «مواجهه خالص» است: موجودی در چند صرافی، پر شدن‌هایی که با تأخیر گزارش می‌شوند، و سفارش هجی که فرستاده شده ولی هنوز تأییدش نرسیده. اگر Hedger وضعیت را اشتباه بداند، دو بار هج می‌کند یا اصلاً هج نمی‌کند. مدیریت چرخه عمر سفارش و همین ناسازگاری‌ها موضوع درس ۲۶ است.

۷. تمرین این درس

گزینه مناسب هر سؤال را انتخاب کن و در پایان نتیجه را ببین.

سؤال ۱: موجودی تو 30,000 دلار ALT است و β بازده ALT نسبت به BTC برابر 1.5 تخمین زده شده. برای هج حداقل واریانس، چقدر BTC باید بفروشی؟
سؤال ۲: اگر همبستگی موجودی و ابزار هج 0.6 باشد، انحراف معیار PnL بعد از هج بهینه چند درصد حالت بدون هج است؟
سؤال ۳: با هزینه هج ۰.۰۶٪، هج 0.5 BTC در قیمت 100,000 و بستن همان هج بعد از برگشت موجودی، روی هم چقدر هزینه دارد؟
سؤال ۴: چرا هج با باند معمولاً از هج پیوسته به‌صرفه‌تر است؟

درس بعدی

در درس ۲۲ سراغ رایج‌ترین ابزار هج در بازار رمزارز می‌رویم: Perpetual Futures. می‌بینیم Mark Price و Index Price چه فرقی دارند، Funding Rate چطور قیمت قرارداد را به Spot می‌چسباند و چه کسی به چه کسی پول می‌دهد، و اهرم، وجه تضمین و Liquidation چه ریسک‌هایی برای بازارسازی می‌سازند که موجودی Spot را با Perp هج کرده است.

این مطلب صرفاً آموزشی است و توصیه خرید، فروش یا سرمایه‌گذاری نیست.