Polymarket Bot Tutorial · الفصل 13 من 32

صناعة السوق على Polymarket: كيف تسعّر bid وask، وتلتقط spread، وتكسب maker rebates (20-25% من taker fees)، ورياضيّات مخاطر المخزون، ومتى تعمل MM في أسواق التنبؤ.

ما الذي يغطيه هذا الفصل

تعني صناعة السوق على Polymarket عرض جانبي السوق بشكل مستمر عبر book، وكسب spread في كل دورة دخول وخروج. هذه الاستراتيجية مفهومة جيدًا في التمويل التقليدي؛ لكن الفروق الخاصة بـ Polymarket هي برنامج maker-rebate، وملف adverse selection في أسواق التنبؤ، وهو أعلى من منصات CFD. هذا الفصل يقدّم الحساب الحقيقي بلا تجميل.

  • صناعة السوق بلغة بسيطة
  • ميزة spread + rebate
  • مخاطر المخزون وskew
  • متى تعمل MM على Polymarket (ومتى لا)
  • هيكل code: تسعير الجانبين عند +/- N cents
  • تعديل الأسعار وفق تدفق الأخبار
  • إيقاف bot عندما يرتفع adverse selection

صناعة السوق بلغة بسيطة

يقوم market maker بعرض سعري bid وask بشكل مستمر، بحيث يكونان أوسع من mid بهامش spread ثابت. عندما يضرب أحدهم bid يشتري maker بسعر منخفض؛ وعندما يرفع أحدهم ask يبيع maker بسعر مرتفع؛ والفرق بين bid وask هو إيراد maker في كل round trip.

هذه الاستراتيجية مدفوعة بتدفق الأوامر، وليست اتجاهية. لا يكوّن maker رأيًا حول ما إذا كان YES سيفوز؛ بل يفترض أن التدفق سيستمر وأن spread سيظل يُدفع له.

المخاطر هنا هي adverse selection: الأشخاص الذين يضربون bid قد يمتلكون معلومات لا تملكها أنت. ومع الوقت، تعتمد أرباح MM على ما إذا كان spread واسعًا بما يكفي لتعويض slippage الناتج عن المتداولين المطلعين.

ميزة spread + rebate

هناك مصدران للإيراد لمتداول صناعة السوق على Polymarket.

التقاط spread: عرض bid عند 0.45 وask عند 0.47 حول mid عند 0.46. كل fill على bid يمكنك لاحقًا الخروج منه عند ask يحقق 2 cents. وتُحدَّد الميزة الصافية بحسب اختلال fills وحركة السعر.

maker rebate: برنامج rewards الخاص بـ Polymarket يدفع rebate لكل سهم على fills الخاصة بـ maker في الأسواق المؤهلة. الأرقام تتغير؛ راجع صفحة rewards الرسمية للقيم الحالية. يُدفع rebate بعملة pUSD بشكل دوري، وبشكل منفصل عن الصفقة نفسها.

في معظم الأسواق، يكون التقاط spread هو مصدر الإيراد الأكبر. أما rebate فيصبح مهمًا عندما تستطيع التسعير في أسواق واسعة مثل أسواق سنة الانتخابات أو مباريات الأدوار الإقصائية الكبرى، حيث ترفع Polymarket قيمة rebates لجذب السيولة.

مخاطر المخزون وskew

إذا تعرّض MM للضرب المتكرر على bid فسيتراكم لديه مركز long. الخطر هو أن ينخفض mid بينما يكون المخزون long؛ عندها يحقق maker خسارة على المركز حتى بعد احتساب إيراد spread.

وسائل الدفاع: quote skew (خفض bid عندما يكون المخزون long، ورفع ask عندما يكون short، لتقليل fills أحادية الجانب)؛ inventory cap (التوقف عن التسعير في الجهة التي أصبحت فيها long أكثر من اللازم)؛ إعادة توازن نشطة (أحيانًا عبور spread عمدًا لتقليل المركز عندما يصل المخزون إلى الحد).

الحساب: إذا كان 60% من fills على bid لا تُغلق قبل أن يتحرك السعر 2 cents ضدك، فهذه الاستراتيجية تخسر المال على تلك الـ fills وحدها. قم بعمل skew بقوة عندما يتجاوز اختلال fills نسبة 65/35.

متى تعمل MM على Polymarket (ومتى لا)

تعمل MM على Polymarket عندما تتوافر ثلاثة شروط.

  • book سائل: وجود منافسة كافية في التسعير بحيث يكون spread الذي تعرضه تنافسيًا لكنه ليس صفرًا. أسواق انتخابات 2024، ومباريات NFL/NBA الكبرى، وأسواق BTC up/down 5m كلها تنطبق عليها هذه الحالة.
  • تدفق ثنائي الجانب: وجود مشترين وبائعين نشطين. الأسواق أحادية الجانب (resolved-ish عند 0.95+) لا تمنح maker شيئًا ليلتقطه.
  • حركة سعر محدودة: بحيث لا تلتهم قفزات 5 cents أرباح spread. الأسواق المستقرة ضمن النطاق المتوسط (0.40-0.60) هي الأكثر ملاءمة.

تفشل MM في: الأسواق المدفوعة بالأخبار حيث يقفز mid أسرع من قدرتك على إعادة التسعير؛ والـ books غير السائلة حيث تكون أنت العرض الوحيد وتتحرك الصفقة التالية عبر 5 مستويات؛ والأسواق القريبة من التسوية حيث يتقارب أحد الجانبين نحو 0 أو 1.

هيكل code: تسعير الجانبين عند +/- N cents

شبه code لأبسط market maker قابل للتشغيل.

SPREAD_CENTS = 2
INVENTORY_CAP_SHARES = 50

def make_loop(token_id):
    while True:
        book = fetch_book(token_id)
        mid = (book.best_bid + book.best_ask) / 2
        inv = chain_balance(token_id)

        # Skew: pull the side we are too long on
        bid_px = mid - SPREAD_CENTS/200 - (0.005 if inv > INVENTORY_CAP_SHARES * 0.6 else 0)
        ask_px = mid + SPREAD_CENTS/200 + (0.005 if inv < -INVENTORY_CAP_SHARES * 0.6 else 0)

        cancel_my_existing_quotes(token_id)
        if inv < INVENTORY_CAP_SHARES:
            place_gtc(token_id, side="BUY", price=bid_px, size=5)
        if inv > -INVENTORY_CAP_SHARES:
            place_gtc(token_id, side="SELL", price=ask_px, size=min(5, inv))
        time.sleep(2)

تضيف النسخ الإنتاجية: تتبع المخزون لكل جانب، وترتيب cancel-before-place، وإدخال jitter في فاصل إعادة التسعير لتجنب التوقع، وkill-switch عند ارتفاع adverse selection (القسم التالي).

تعديل الأسعار وفق تدفق الأخبار

عندما يقع حدث خبري، تنتقل القيمة العادلة قبل أن تتحرك عروضك. الـ MM الذي لا يسحب عروضه أثناء تدفق الأخبار سيتم استغلاله.

الإشارة: ارتفاع معدل cancel للـ fills الواردة بأكثر من نحو 3x عن خط الأساس خلال 30 ثانية، أو التحقق عبر cross-check أوسع من stream الأحداث (Polymarket Twitter/Discord، أو Bloomberg headline feed). عند اكتشاف ذلك، يسحب maker كل العروض لمدة 60-120 ثانية، ويترك mid الجديد يستقر، ثم يعيد التسعير حول المركز الجديد.

أبسط تنفيذ يراقب stream last-trade-price للـ token. إذا حدثت قفزة أكبر من 2 standard deviations عن متوسط نافذة الحركة، يتم تفعيل pause. يعاود bot العمل عندما يستقر السعر لمدة 30 ثانية أو أكثر.

إيقاف bot عندما يرتفع adverse selection

هذا هو الخروج الصعب. إذا تحولت PnL الخاصة بـ fills خلال آخر 50 fill إلى السالب بشكل حاد، فهناك خطأ ما: إما أن السوق أصبح مدفوعًا بالأخبار ولم يعد مناسبًا لصناعة السوق، أو أن spread ضيّق جدًا بالنسبة لمستوى adverse selection الحالي.

شروط الإيقاف التي يجب ترميزها:

  • 5 bid fills متتالية دون أي ask fill، مع هبوط mid بأكثر من 1c منذ أول fill.
  • Realized PnL على آخر 25 round-trip fills أقل من -25% من المتوقع.
  • انقطاع WebSocket أو اكتشاف book قديم.
  • الوصول إلى حد inventory على أي جانب لأكثر من 5 دقائق.

عند التفعيل، ألغِ كل شيء، وصفِّ المخزون بسعر السوق، ثم أوقف العمل لمدة 15 دقيقة أو أكثر. market maker الذي لا يملك kill switch سيخسر المال خلال الفترات المتقلبة إلى أن يلاحظ trader ذلك يدويًا - وهذا يستغرق دائمًا وقتًا أطول مما تتوقع.

الأسئلة الشائعة

هل يمكن فعلًا لـ retail bot أن يربح من صناعة السوق على Polymarket؟
أحيانًا، وفي أسواق محددة. يمكن لبرنامج maker rebate (20-25% من taker fees) بالإضافة إلى spread يتراوح بين 1-3 cents لكل round trip أن يتراكم إلى عائد حقيقي. لكن على Polymarket، قد تحرك موجة الأخبار السوق 20+ cents في ثوانٍ - وأي market maker بلا feed أخبار سريع سيتعرض adverse selection. هذا أفضل في أسواق الرياضة السائلة قبل المباراة وخلال الفترات منخفضة الأخبار.
ما عرض spread الذي ينبغي أن أستخدمه على Polymarket؟
على الأقل، يجب أن يغطي spread أسوأ adverse-selection متوقع. للأسواق السائلة في الرياضة/السياسة: من 1 إلى 3 cents لكل جانب بعيدًا عن mid. للأسواق الضعيفة السيولة: 5+ cents. إذا لم تستطع التسعير ضيقًا بما يكفي لمنافسة makers الآخرين، ولا واسعًا بما يكفي لتحمّل التحركات، فهذه السوق ليست قابلة لصناعة السوق بالنسبة لك.
ما حدود inventory التي يجب أن أضعها؟
ضع حدًا أقصى صارمًا للمخزون في كل سوق عند 50-200 USD إلى أن تثبت الربحية على مدى أشهر. استخدم skew في الأسعار لدفع المخزون نحو الحياد - إذا تراكم لديك Yes، خفّض bid الخاص بـ Yes وخفّض ask الخاص بـ No لتشجيع عودة شراء No. لا تسمح أبدًا لسوق واحدة أن تحتفظ بأكثر من 20% من bankroll الخاص بك.
هل أحتاج إلى VPS سريع لكي أمارس market-making على Polymarket؟
نعم. صناعة السوق هي أكثر استراتيجيات Polymarket حساسية للـ latency. يؤدي VPS متذبذب إلى عروض قديمة يتم اصطيادها. نحن نستخدم TradingVPS لبرامج MM الخاصة بنا تحديدًا لأن jitter منخفض بشكل ثابت. أما cloud التجاري العام (DO/Vultr) فيمكن أن يعمل مع paper trading لـ MM لكنه لا يناسب التداول الحي.
كيف تختلف MM في Polymarket عن MM في crypto؟
هناك فرقان كبيران: (1) لدى Polymarket أحداث نتيجة نهائية واضحة (أخبار، نهائيات رياضية) يمكن أن تحرك السعر 30-100 cents فورًا - وهو تحرك أشد بكثير من crypto. (2) أسواق Polymarket تُسوّى في النهاية، لذا وعلى خلاف أزواج crypto، فإن مراكز MM لها انتهاء حتمي. وكلا الأمرين يدفعك نحو مدة احتفاظ أقصر وحدود مخاطرة أضيق.
هل يمكنني صناعة السوق في أسواق crypto لمدة 5 دقائق على Polymarket؟
ممكن، لكنه صعب جدًا. أسواق 5 دقائق تشهد نحو 288 انتهاء يوميًا لكل زوج، وتسيطر عليها bots أسرع، ولديها spreads أضيق. معظم retail MM bots تخسر المال هناك بسبب adverse selection. سنغطي استراتيجية crypto لمدة 5 دقائق بشكل صحيح في الفصل 23 من هذه السلسلة.