API · בנייה

מתכונים להעתקה לדברים שכל בוט בפולימרקט צריך. הכול CLOB V2 / pUSD, Python (הקריאות אינן צריכות מפתח). קחו אחד, הריצו אותו, המשיכו הלאה. הריצו כל קריאה חיה ב-sandbox קודם:

שתי הגדרות ששוברות פקודות בשקט. כל פקודה צריכה את ה-tick_size הנכון של השוק (לרוב "0.01", אך חלק מהשווקים הם "0.001"), ולשווקי "סיכון שלילי" רב-תוצאתיים, neg_risk=True. קראו את שניהם מהשוק לפני החתימה - גודל טיק שגוי או דגל neg_risk חסר נדחה, או גרוע מכך, מתומחר שגוי. מתכון 3 מראה איך.

1. השגת מזהי הטוקן של שוק מ-slug

כל עסקה מתחילה כאן: slug אנושי נכנס, שני מזהי טוקן התוצאה יוצאים.

import requests, json
m = requests.get("https://gamma-api.polymarket.com/markets",
                 params={"slug": SLUG}).json()[0]
outcomes  = json.loads(m["outcomes"])       # ["Yes","No"]
token_ids = json.loads(m["clobTokenIds"])   # aligned with outcomes
yes_token = token_ids[outcomes.index("Yes")]
tick_size = m.get("orderPriceMinTickSize", "0.01")   # use this, don't hardcode
neg_risk  = bool(m.get("negRisk", False))            # needed for multi-outcome markets

2. גזירת פרטי ההזדהות של ה-API (פעם אחת)

מסחר צריך מפתח/סוד/passphrase של API הנגזרים מהמפתח הפרטי שלכם. גזרו פעם אחת, ואז העבירו creds לכל לקוח - אין set_api_creds ב-V2.

import os
from py_clob_client_v2 import ClobClient
boot = ClobClient(host="https://clob.polymarket.com", chain_id=137, key=os.environ["PK"])
creds = boot.create_or_derive_api_key()      # idempotent: same key -> same creds
client = ClobClient(host="https://clob.polymarket.com", chain_id=137,
                    key=os.environ["PK"], creds=creds)

3. קריאת ספר הפקודות והערכת החלקה

עברו על ה-asks כדי לקבל את מחיר המילוי הממוצע האמיתי לקנייה (bids למכירה) לפני שאתם מתחייבים לגודל.

book = client.get_order_book(token_id)
def cost_to_buy(book, shares):
    rem, spent = shares, 0.0
    for lvl in book.asks:                     # asks sorted best (lowest) first
        take = min(rem, float(lvl.size)); spent += take*float(lvl.price); rem -= take
        if rem <= 0: break
    return (spent/shares, rem)                 # (avg fill price, unfilled shares)

4. ביצוע וביטול פקודת לימיט (GTC)

from py_clob_client_v2 import (ClobClient, OrderArgs, OrderType,
                               PartialCreateOrderOptions, Side, OrderPayload)
resp = client.create_and_post_order(
    order_args=OrderArgs(token_id=token_id, price=0.45, side=Side.BUY, size=100),
    options=PartialCreateOrderOptions(tick_size=tick_size, neg_risk=neg_risk),
    order_type=OrderType.GTC,                 # rests on the book until filled/cancelled
)
client.cancel_order(OrderPayload(orderID=resp["orderID"]))

5. לקיחת נזילות עכשיו - פקודת שוק (FOK)

פקודת שוק נמדדת ב-USDC, לא במניות, ומתמלאת מיד או מתבטלת. השתמשו ב-FOK כאשר אתם חייבים להתמלא במלואכם, וב-FAK כדי למלא את מה שאפשר.

from py_clob_client_v2 import MarketOrderArgs
client.create_and_post_market_order(
    order_args=MarketOrderArgs(token_id=token_id, amount=25.0, side=Side.BUY),  # $25
    options=PartialCreateOrderOptions(tick_size=tick_size, neg_risk=neg_risk),
    order_type=OrderType.FOK,
)

6. רשימה, פרסום באצווה, וביטול פקודות

orders = client.get_orders()                  # your resting orders
client.cancel_orders([o["orderID"] for o in orders])   # cancel a batch
client.cancel_all()                           # or wipe everything (panic button)

# Post several quotes in ONE request (POST /orders, max 15 per batch).
# post_only=True makes each strictly a maker order - it's rejected rather than
# allowed to cross the book, so you never accidentally pay the taker fee.
client.create_and_post_orders([
    OrderArgs(token_id=token_id, price=0.44, side=Side.BUY,  size=50),
    OrderArgs(token_id=token_id, price=0.48, side=Side.SELL, size=50),
], options=PartialCreateOrderOptions(tick_size=tick_size, neg_risk=neg_risk, post_only=True))

7. מעקב אחר פוזיציות ו-PnL של כל ארנק (ללא מפתח)

import requests
for p in requests.get("https://data-api.polymarket.com/positions",
                      params={"user": PROXY_ADDRESS}).json():
    print(p["title"], p["outcome"], "PnL", p["cashPnl"], p["percentPnl"])

8. צפייה במילויים שלכם דרך WebSocket

# wss://ws-subscriptions-clob.polymarket.com/ws/user  (auth: api key/secret/passphrase)
# subscribe by condition_id; you get fills/cancels for your orders in real time.
# Send a PING every ~10s or the server drops you. Full reconnect+heartbeat pattern:
#   /api/polymarket-websocket/

9. טיק מינימלי של עושה שוק

mid = float(client.get_midpoint(token_id)["mid"])
spread = 0.02                                  # quote 1 cent each side of mid
bid = round(mid - spread/2, 2); ask = round(mid + spread/2, 2)   # round to tick
for price, side in [(bid, Side.BUY), (ask, Side.SELL)]:
    client.create_and_post_order(
        order_args=OrderArgs(token_id=token_id, price=price, side=side, size=50),
        options=PartialCreateOrderOptions(tick_size=tick_size, neg_risk=neg_risk),
        order_type=OrderType.GTC)
# reprice on every book update; makers pay 0 fees and can earn liquidity rewards.
לפני כל פקודה חיה: הבטוחה חייבת להיות pUSD, ועליכם לאשר pUSD + טוקנים מותנים לשלושת חוזי בורסת ה-V2 פעם אחת (ראו תיקון ההרשאה). ברירת המחדל שלכם תהיה מצב נייר עד שהמילויים וה-PnL שלכם תואמים לציפיות שלכם.

פרויקט חדש? פולימרקט משיקה כעת SDK מאוחד (py-sdk / @polymarket/sdk) שמקפל את ה-REST APIs ואת ה-WebSockets לחבילה אחת - שווה מבט אחרי שגדלתם מעבר לקטעים האלה. ראו את בוחר ה-SDK.

הבא: עיון ב-CLOB · Data API · דלגו על התשתית - תבניות הפתיחה.