מדריך Bot ל־Polymarket · פרק 13 מתוך 32
יצירת שוק ב־Polymarket: איך לתמחר bid ו־ask, ללכוד את ה־spread, להרוויח maker rebates (20-25% מ־taker fees), מתמטיקת סיכון מלאי, ומתי MM עובד בשווקי חיזוי.
מה הפרק הזה מכסה
Market making ב־Polymarket פירושו לתמחר באופן רציף את שני הצדדים של ספר הפקודות ולהרוויח את ה־spread בכל round trip. האסטרטגיה מוכרת היטב בעולם הפיננסי המסורתי; הניואנסים הספציפיים ל־Polymarket הם תוכנית ה־maker rebate וה־adverse selection של שווקי חיזוי, שהוא גבוה יותר מאשר בזירות CFD. הפרק הזה הוא החשבון האמיתי, בלי לייפות.
- Market making באנגלית פשוטה
- היתרון של ה־spread + rebate
- סיכון מלאי ו־skew
- מתי MM עובד ב־Polymarket (ומתי לא)
- שלד קוד: תמחור שני הצדדים ב־+/- N סנט
- התאמת ה־quotes לפי זרימת חדשות
- כיבוי ה־bot כש־adverse selection מזנק
Market making באנגלית פשוטה
Market maker מתמחר באופן רציף גם מחיר קנייה (bid) וגם מחיר מכירה (ask), רחבים יותר מה־mid ב־spread קבוע. כשמישהו פוגע ב־bid ה־maker קונה בזול; כשמישהו מרים את ה־ask ה־maker מוכר ביוקר; ההפרש בין bid ל־ask הוא ההכנסה של ה־maker לכל round trip.
האסטרטגיה מונעת על ידי order flow, לא על ידי כיוון השוק. ה־maker לא נוקט עמדה בשאלה האם ה־YES ינצח; הוא מניח שהזרימה תימשך ושימשיכו לשלם לו את ה־spread.
הסיכון הוא adverse selection: האנשים שפוגעים ב־bid שלך מחזיקים במידע שאין לך. לאורך זמן, הרווחיות של MM תלויה בשאלה האם ה־spread רחב מספיק כדי לכסות את ה־slippage מצד סוחרים מיודעים.
היתרון של ה־spread + rebate
שני מקורות הכנסה ל־maker ב־Polymarket.
לכידת spread: תמחור bid ב־0.45 ו־ask ב־0.47 סביב mid של 0.46. כל fill על ה־bid שתוכל אחר כך לצאת ממנו ב־ask מניב 2 סנט. ה־edge נטו תלוי בחוסר איזון בין fills לבין תנועת המחיר.
Maker rebate: תוכנית תגמול הנזילות של Polymarket משלמת rebate לכל share על fills של maker בשווקים זכאים. המספרים משתנים; בדקו את דף התגמולים הרשמי לערכים העדכניים. ה־rebate משולם ב־pUSD באופן תקופתי, בנפרד מהעסקה עצמה.
ברוב השווקים, לכידת ה־spread היא מקור ההכנסה הגדול יותר. ה־rebate הופך משמעותי כשאפשר לתמחר שווקים רחבים מאוד (שנת בחירות, פלייאוף של ענפי ספורט גדולים) שבהם Polymarket מגדילה את ה־rebates כדי למשוך נזילות.
סיכון מלאי ו־skew
MM שמקבל שוב ושוב פגיעות ב־bid צובר פוזיציה לונג. הסיכון הוא שה־mid יורד בזמן שהמלאי לונג; ה־maker מממש הפסד על הפוזיציה גם אחרי הכנסות ה־spread.
הגנות: quote skew (להוריד את ה־bid כשיש לכם לונג, ולהעלות את ה־ask כשאתם שורט, כדי להרתיע fills חד־צדדיים); תקרת מלאי (להפסיק לתמחר בצד שבו אתם כבר לונג מדי); איזון מחדש אקטיבי (מדי פעם לחצות את ה־spread כדי לצמצם פוזיציה כשהמלאי מגיע לגבול).
המתמטיקה: אם 60% מה־fills ב־bid לעולם לא נסגרים לפני שהמחיר זז נגדכם ב־2 סנט, האסטרטגיה מפסידה כסף על אותם fills לבדם. בצעו skew אגרסיבי כשחוסר האיזון ב־fill חוצה את 65/35.
מתי MM עובד ב־Polymarket (ומתי לא)
MM עובד ב־Polymarket כששלושה תנאים מתקיימים.
- ספר פקודות נזיל: מספיק תחרות על quotes כך שה־spread שלכם תחרותי אך לא אפס. שווקי הבחירות של 2024, משחקי NFL/NBA גדולים, BTC up/down 5m - כולם עומדים בכך.
- זרימה דו־צדדית: גם קונים וגם מוכרים פעילים. בשווקים חד־צדדיים (כמעט הוכרעו ב־0.95+) אין ל־maker מה ללכוד.
- תנועות מחיר מוגבלות: לכידות ה־spread לא נאכלות על ידי קפיצות של 5 סנט. שווקים יציבים בטווח אמצעי (0.40-0.60) הם הידידותיים ביותר.
MM נכשל בשווקים מונעי חדשות שבהם ה־mid קופץ מהר יותר ממה שאתם יכולים ל־re-quote; בספרי פקודות דלילים שבהם אתם ה־quote היחיד והעסקה הבאה "צועדת" 5 רמות; ובשווקים סמוך להכרעה, שבהם צד אחד מתכנס ל־0 או ל־1.
שלד קוד: תמחור שני הצדדים ב־+/- N סנט
Pseudocode ל־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)
ב־production makers מוסיפים: מעקב מלאי לפי צד, סדר פעולות cancel-before-place, jitter על מרווח ה־re-quote כדי לא להיות צפויים, ו־kill-switch על adverse selection (הסעיף הבא).
התאמת ה־quotes לפי זרימת חדשות
כאשר אירוע חדשותי פוגע, ה־fair value זז לפני שה־quotes שלכם זזים. MM שלא מושך quotes בזמן זרימת חדשות יילקח אליו "בחינם".
האות: שיעור ה־cancel של fills נכנסים קופץ מעל בערך פי 3 מהקו הבסיסי בתוך 30 שניות, או בדיקת צולבת רחבה יותר מול זרם האירועים (Polymarket Twitter/Discord, פיד כותרות של Bloomberg). כשהדבר מזוהה, ה־maker מושך את כל ה־quotes ל־60-120 שניות, נותן ל־mid החדש להתייצב, ואז מתמחר מחדש סביב המרכז החדש.
היישום הפשוט ביותר עוקב אחרי זרם last-trade-price עבור הטוקן. קפיצה של יותר מ־2 סטיות תקן מהממוצע של חלון נע מפעילה השהיה. ה־bot חוזר לפעולה כשהמחיר התייצב ל־30 שניות ומעלה.
כיבוי ה־bot כש־adverse selection מזנק
יציאה חדה. אם ה־fill PnL של ה־bot ב־50 ה־fills האחרונים הופך לשלילי בחדות, משהו לא תקין: או שהשוק כעת מונע חדשות ואתם לא אמורים להיות market making, או שה־spread שלכם צר מדי ביחס לרמת ה־adverse selection הנוכחית.
תנאי כיבוי שכדאי לקודד:
- 5 fills רצופים ב־bid בלי fill ב־ask, וה־mid ירד ביותר מ־1c מאז ה־fill הראשון.
- Realized PnL על 25 ה־round-trip fills האחרונים נמוך ב־25% מהצפוי.
- זיהוי ניתוק של WebSocket או ספר פקודות מיושן.
- מלאי בתקרה באחד הצדדים במשך יותר מ־5 דקות.
כאשר אחד התנאים מופעל, מבטלים הכול, מיישרים את המלאי ב־market, ומפסיקים ל־15 דקות ומעלה. Market maker בלי kill switch יפסיד כסף בתקופות תנודתיות עד שה־trader יבחין בכך ידנית - וזה תמיד לוקח יותר זמן ממה שחושבים.





