الفصل 27 من 33

النسخة المختصرة

توفّر بوليماركت ثلاث واجهات برمجة تطبيقات عامة: CLOB (التداول)، وGamma (اكتشاف الأسواق)، وData (التحليلات). حزمة Python SDK الرسمية هي py-clob-client 0.34.6. تعتمد المصادقة على مفتاح API + توقيع ECDSA، مع توقيع الأوامر عبر EIP-712 من خلال محفظة وكيل على Polygon. حدود المعدل تضعك عند نحو 60 أمرًا/دقيقة لكل مفتاح. أكبر عقبة واحدة للمطورين الجدد هي مشكلة تعيين condition_id → token_id بين Gamma وCLOB - احلها أولًا، وسينتظم كل شيء آخر. يُكسب على بوليماركت نحو $40M/month في مكافآت السيولة والسبريد الذي تلتقطه الروبوتات، ومعظمه تقريبًا من مستخدمي API.

ما الذي ستتعلمه: كيف تعمل الواجهات الثلاث معًا، وكيف تثبّت py-clob-client وتضبطه، وكيف تصادق باستخدام محفظة الوكيل، وكيف تجلب الأسواق ودفاتر الأوامر، وكيف تضع الأوامر وتلغيها، وكيف تبث تحديثات الأسعار اللحظية عبر WebSocket، وما حدود المعدل الدقيقة وكيف تتراجع بسلاسة، وبنية روبوت جاهزة للإنتاج يمكنك توسيعها.
المتطلبات السابقة: حساب بوليماركت ممول مع تنفيذ صفقة يدوية واحدة على الأقل، وPython 3.8+ (أو Node.js)، وفهم أساسي لـ HTTP وJSON والكود غير المتزامن. إذا لم تتداول يدويًا بعد، فابدأ بـ أول صفقة قبل ربط روبوت.
01
الفصل الأول

الجزء 1: الواجهات الثلاث

تفصل بوليماركت بوضوح بين المهام عبر ثلاث خدمات مميزة. استخدام الواجهة المناسبة لكل مهمة يجعل روبوتك سريعًا وبسيطًا وضمن حدود المعدل.

APIBase URLالغرضالمصادقة مطلوبة
CLOB APIclob.polymarket.comوضع الأوامر وإلغاؤها وتتبّعها. قراءة دفاتر الأوامر. الاستعلام عن المراكز.نعم (للتداول)
Gamma APIgamma-api.polymarket.comتصفّح الأسواق، وجلب البيانات الوصفية، والصور، وأسعار النتائج، والحجم، والانتهاء، والوسوم.لا (عام)
Data APIdata-api.polymarket.comالصفقات التاريخية، ولقطات المراكز، وتحليلات المستخدمين، وبيانات لوحة المتصدرين.لا (عام)

تستخدم حلقة روبوت نموذجية Gamma للعثور على الأسواق، وCLOB لجلب دفاتر الأوامر ووضع الصفقات، وData لاختبار أداء الاستراتيجية دون اتصال. فكّر في Gamma على أنها "الكتالوج"، وفي CLOB على أنها "البورصة"، وفي Data على أنها "المستودع".

نصيحة احترافية: لا تتطلب Gamma وData أي مصادقة. يمكنك استكشافهما الآن باستخدام curl أو عبر المتصفح - من دون حساب. هذه طريقة ممتازة للنمذجة الأولية قبل حتى توليد مفتاح API.
02
الفصل الثاني

الجزء 2: المصادقة ونموذج محفظة الوكيل

لا توقّع بوليماركت الصفقات باستخدام المفتاح الخاص لمحفظتك الرئيسية. بدلًا من ذلك، تستخدم محفظة وكيل على نمط Gnosis Safe: تفوّض محفظتك الرئيسية وكيلًا، وينفّذ الوكيل كل الصفقات على Polygon. ويتحدث روبوت الـ API الخاص بك إلى ذلك الوكيل.

ما الذي تحتاجه

  • مفتاح API - أنشئه في بوليماركت Settings → Developer
  • مفتاح خاص - مفتاح محفظة التداول الخاصة بك (وليس عبارة الاسترداد الرئيسية في MetaMask)
  • عنوان الممول - عنوان محفظة الوكيل الخاصة بك (يظهر في Settings → Wallet)
  • Chain ID - 137 (Polygon mainnet)
  • نوع التوقيع - 1 (POLY_PROXY، وهو القياسي للمستخدمين الأفراد)
ثوابت أمنية لا تقبل التفاوض: لا تودع مفتاحك الخاص في git أبدًا. استخدم متغيرات البيئة (.env) أو مدير أسرار. لا تلصق المفاتيح في Discord أو مسائل GitHub أو ChatGPT. افترض أن أي مفتاح لامس الحافظة الخاصة بك أصبح مخترقًا بالفعل. بدّل المفاتيح إذا ساورك الشك.
03
الفصل الثالث

الجزء 3: تثبيت py-clob-client

حزمة Python SDK الرسمية هي أسرع طريقة للانتقال من الصفر إلى أول أمر. سنستخدم الإصدار 0.34.6، وهو الحالي حتى أبريل 2026.

# Create a virtual environment first
python3 -m venv venv
source venv/bin/activate # macOS/Linux
venv\Scripts\activate # Windows

# Install the SDK
pip install py-clob-client==0.34.6 requests websocket-client python-dotenv

تكوين العميل الأساسي

import os
from dotenv import load_dotenv
from py_clob_client.client import ClobClient
from py_clob_client.constants import POLYGON

load_dotenv()

client = ClobClient(
 host="https://clob.polymarket.com",
 key=os.environ["POLY_PRIVATE_KEY"],
 chain_id=POLYGON, # 137
 signature_type=1, # POLY_PROXY
 funder=os.environ["POLY_FUNDER"],
)

# One-time: derive and cache API credentials
client.set_api_creds(client.create_or_derive_api_creds())

يوقّع استدعاء create_or_derive_api_creds() رسالةً باستخدام مفتاحك الخاص ويستبدلها بمفتاح API وسر وعبارة مرور. خزّن هذه القيم في .env بعد التشغيل الأول حتى لا تضطر إلى استدعاء نقطة الاشتقاق في كل تشغيل.

مثال عملي - ملف .env مصغّر:
POLY_PRIVATE_KEY=0xabc...
POLY_FUNDER=0xdef...
POLY_API_KEY=...
POLY_SECRET=...
POLY_PASSPHRASE=...
04
الفصل الرابع

الجزء 4: اكتشاف الأسواق عبر Gamma

قبل أن تتداول، تحتاج إلى العثور على أسواق تستحق التداول. تعيد Gamma JSON بكل ما تعرضه واجهة بوليماركت: السؤال، والنتائج، والأسعار، وحجم 24 ساعة، والانتهاء، والوسوم، والصور.

import requests

resp = requests.get(
 "https://gamma-api.polymarket.com/markets",
 params={
 "active": "true",
 "closed": "false",
 "tag_slug": "politics",
 "limit": 20,
 "order": "volume24hr",
 "ascending": "false",
 },
 timeout=10,
)
resp.raise_for_status()
markets = resp.json()

for m in markets:
 print(f"{m['slug']:50} Yes ${float(m['outcomePrices'][0]):.3f} Vol24h ${m.get('volume24hr', 0):,.0f}")

معلمات استعلام Gamma المفيدة

Parameterوظيفته
tag_slugالتصفية حسب الفئة (politics، sports، crypto، culture، إلخ)
active=trueالأسواق التي تقبل الصفقات حاليًا فقط
closed=falseإخفاء الأسواق المُسوّاة
order=volume24hrالترتيب حسب الحجم الأخير (مؤشر سيولة)
end_date_minتاريخ ISO - تخطّي الأسواق التي تُسوّى قريبًا جدًا
limitحتى 500 لكل صفحة (استخدم offset للترقيم)
05
الفصل الخامس

الجزء 5: تعيين condition_id → token_id

هذه هي أكبر نقطة ألم في تطوير روبوتات بوليماركت. تعيد Gamma معرف condition_id (واحد لكل سوق). تستخدم صفقات CLOB token_id (واحد لكل نتيجة). تحتاج دائمًا إلى الاثنين معًا.

الخطأ: تمرير condition_id إلى نقاط نهاية CLOB التي تتوقع token_id. ستحصل على خطأ غامض "invalid token". احرص دائمًا على التعيين أولًا، والتداول ثانيًا.
# Each Gamma market object contains 'clobTokenIds' - a JSON string array
import json

market = markets[0]
token_ids = json.loads(market['clobTokenIds']) # ['7410...', '1120...']
yes_token = token_ids[0] # First outcome
no_token = token_ids[1] # Second outcome

# Alternative: ask CLOB directly using condition_id
info = client.get_market(condition_id=market['conditionId'])
yes_token = info['tokens'][0]['token_id']

فخ ترتيب النتائج

تُطابق مصفوفة outcomes في Gamma ومصفوفة clobTokenIds حسب الفهرس. اقرأ دائمًا تسمية النتيجة بدل افتراض أن الفهرس 0 هو "Yes." في الأسواق متعددة النتائج (NegRisk، الأوسكار، الانتخابات)، قد يكون الفهرس 0 هو "Kamala Harris" أو "Taylor Swift" - الترتيب حتمي لكنه خاص بالسوق.

06
الفصل السادس

الجزء 6: قراءة دفاتر الأوامر

book = client.get_order_book(token_id=yes_token)

best_bid = float(book.bids[0].price) if book.bids else None
best_ask = float(book.asks[0].price) if book.asks else None
mid = (best_bid + best_ask) / 2 if best_bid and best_ask else None
spread = best_ask - best_bid if best_bid and best_ask else None

print(f"Bid {best_bid} Ask {best_ask} Mid {mid:.4f} Spread {spread:.4f}")

تُعاد دفاتر الأوامر كمصفوفات مرتبة (طلبات الشراء تنازليًا، وطلبات البيع تصاعديًا). لكل مستوى price وsize. لتقدير slippage لأمر أكبر، امشِ عبر الدفتر واجمع القيمة الاسمية حتى تستهلك الحجم المستهدف.

07
الفصل السابع

الجزء 7: وضع الأوامر

أمر محدد السعر (GTC - الافتراضي)

from py_clob_client.clob_types import OrderArgs, OrderType

args = OrderArgs(
 token_id=yes_token,
 price=0.45,
 size=100, # Shares, not dollars. 100 shares @ $0.45 = $45 max cost.
 side="BUY",
)
signed_order = client.create_order(args)
response = client.post_order(signed_order, OrderType.GTC)
print(response)

يقوم استدعاء create_order بتوقيع رسالة بنيوية EIP-712 باستخدام مفتاحك الخاص. يرسل post_order الأمر إلى CLOB. أنت لا ترسل المفتاح الخاص الخام عبر الشبكة أبدًا - بل أوامر موقعة فقط.

أنواع الأوامر

النوعCodeالسلوكمتى يُستخدم
صالح حتى الإلغاءGTCيبقى على الدفتر حتى يُنفَّذ أو تلغيهالافتراضي. معظم استراتيجيات صناعة السوق والأوامر المحددة.
صالح حتى تاريخGTDيُلغى تلقائيًا عند طابع زمني محددمدفوع بالأحداث: "ألغِ قبل 5 دقائق من إعلان الفيدرالي"
التنفيذ أو الإلغاءFOKيجب أن يُنفّذ الحجم كاملًا فورًا أو يُلغى بالكاملأطراف التحكيم حيث تُفسد التنفيذات الجزئية الصفقة
التنفيذ ثم الإلغاءFAKيُنفّذ ما يستطيع عند السعر المحدد ويلغي الباقيالأخذ العدواني - يتصرف كأمر سوق بسقف سعري

الإلغاء

# Single order
client.cancel(order_id="0xabc...")

# Cancel all orders on a specific market
client.cancel_market_orders(market=market['conditionId'])

# Nuclear option: cancel everything
client.cancel_all()
08
الفصل الثامن

الجزء 8: بث WebSocket

إن الاستعلام عن Gamma كل ثانية هو هدر، وستصل إلى حدود المعدل بسرعة. تبث تغذية WebSocket تحديثات دفتر الأوامر والصفقات لحظيًا، بزمن تأخير دون ثانية.

import json, websocket

WS_URL = "wss://ws-subscriptions-clob.polymarket.com/ws/market"

def on_open(ws):
 ws.send(json.dumps({
 "type": "market",
 "assets_ids": [yes_token, no_token],
 }))

def on_message(ws, message):
 event = json.loads(message)
 if event.get("event_type") == "price_change":
 print(f"{event['market']} {event['side']} {event['price']} size={event['size']}")

ws = websocket.WebSocketApp(
 WS_URL,
 on_open=on_open,
 on_message=on_message,
)
ws.run_forever(ping_interval=20)

توجد تغذيتان: تغذية /market (دفتر أوامر عام + صفقات) وتغذية /user (أحداث أوامرك وتنفيذاتك أنت، مع مصادقة). عادةً ما تتصل روبوتات الإنتاج بكليهما، وتعيد الاتصال تلقائيًا عند الانقطاع، وتتعامل مع WebSocket بوصفه مصدر الحقيقة للحالة الحالية للدفتر.

الإشارات الحية وإعادة الاتصال: أرسل ping كل 20 ثانية. إذا فاتتك pong مرتان، فأعد الاتصال. عند إعادة الاتصال، أعد جلب دفتر الأوامر عبر REST أولًا دائمًا، ثم أعد الاشتراك - وإلا سينحرف دفترك المحلي عن الواقع.
09
الفصل التاسع

الجزء 9: حدود المعدل والتراجع

فئة نقطة النهايةالحدالدفعة القصوى
وضع الأوامر (CLOB)~60 / دقيقة لكل مفتاح API~10 / ثانية
إلغاء الأوامر~120 / دقيقة~20 / ثانية
قراءات بيانات السوق (دفتر CLOB)~300 / دقيقةأعلى، يتفاوت
Gamma APIسخيّ؛ احترم أخطاء 429-
رسائل WebSocketلا حد عملي للوارد-

عند مواجهة HTTP 429، يعيد الخادم رأس Retry-After. طبّق التراجع الأسي مع العشوائية:

import random, time

def post_with_backoff(fn, *args, max_retries=6):
 for attempt in range(max_retries):
 try:
 return fn(*args)
 except Exception as e:
 if "429" in str(e):
 sleep = (2 ** attempt) + random.random()
 time.sleep(min(sleep, 30))
 continue
 raise
 raise RuntimeError("Too many retries")
10
الفصل العاشر

الجزء 10: بنية روبوت مرجعية

كل روبوت بوليماركت متين يحتوي على المكونات الستة نفسها. ابنِ كل مكوّن كوحدة مستقلة؛ واجعل الترابط بينها خفيفًا.

المكوّنالمسؤوليةالواجهات المستخدمة
الماسح (Scanner)مهمة مجدولة: جلب الأسواق المطابقة لمعاييرك (الوسوم، الحجم، الأيام حتى الانتهاء)Gamma
محرك الأسعارالحفاظ على دفاتر أوامر محلية لحظية عبر WebSocketCLOB WS
مولّد الإشاراتدالة صافية: حالة الدفتر + البيانات الوصفية ← المركز المستهدف- (في الذاكرة)
مدير الأوامرمقارنة الأوامر الحالية بالمستهدفة، والوضع/الإلغاء بأدنى حدCLOB REST
مدير المخاطرفرض حدود لكل سوق، وحدود خسارة يومية، وقواطع دائرة- (في الذاكرة + DB)
المسجّل ودفتر الأستاذحفظ كل قرار وتنفيذ وإلغاء. يغذّي تقارير الضرائب والتصحيح.SQLite / Postgres
الأولوية للموثوقية: قبل تحسين الربحية، تأكد من أن روبوتك يستطيع إعادة التشغيل نظيفًا عند الثالثة صباحًا يوم الأحد من دون تدخل بشري. هذا يعني تنفيذ أوامر idempotent (استخدم معرفات أوامر على جانب العميل)، وحالة دائمة، وتنبيهات آلية (Telegram وDiscord وPagerDuty) لأي استثناء غير معالج.

الجزء 11: أنماط الفشل الشائعة

  • بيانات WebSocket قديمة - تتبع وقت آخر رسالة لكل أصل؛ إذا لم تصل تحديثات لأكثر من >30s في سوق نشط، فافرض تحديثًا عبر REST.
  • تضارب Nonce - يتولى py-clob-client أرقام nonce الخاصة بالأوامر عنك، ولكن إذا كنت تبني الموقّع بنفسك، فزد nonce مع كل أمر.
  • رصيد غير كافٍ - تحقّق دائمًا من رصيد pUSD قبل التقديم؛ قد يظهر دفترك أمرًا، لكن المطابقة سترفضه.
  • السوق متوقف أو قيد التسوية - تحقّق من market.active && !market.closed قبل التداول. تتأخر تحديثات Gamma بضع ثوانٍ عن CLOB حول التسوية.
  • عدم تطابق NegRisk adapter - تتدفق الأسواق متعددة النتائج عبر موائم NegRisk منفصل. تتولى SDK ذلك، لكن تأكد من أن أمرك ذهب إلى المكان الصحيح.
قيد testnet: لا تدير بوليماركت testnet عامًا في 2026. تعني "paper trading" وضع أوامر حقيقية صغيرة جدًا ($1-$5) في أسواق منخفضة السيولة. خصص بضعة دولارات لأسبوعك الأول من التصحيح - سيوفر عليك مئات لاحقًا.

الجزء 12: مكافآت السيولة عبر API

تشغّل بوليماركت ما يقارب ~$5M/month في مكافآت السيولة العامة بالإضافة إلى $5M+/month في مكافآت الرياضة (انظر مكافآت السيولة). يذهب معظم ذلك إلى صانعي السوق المعتمدين على API الذين يستطيعون الحفاظ على عروض ثنائية الجانب ضيقة عبر آلاف الأسواق.

تكافئ معادلة المكافآت الأوامر القريبة من سعر الوسط، والحجم، والوقت على الدفتر. حلقة صناعة سوق دنيا:

  1. اقرأ دفتر الأوامر للسوق المستهدف
  2. احسب سعر وسط عادلًا (مثلًا متوسط VWAP لأفضل 3 مستويات في كل جانب)
  3. ضع عرض شراء عند mid − spread_target/2 وعرض بيع عند mid + spread_target/2
  4. عند كل تحديث من WebSocket، أعد التسعير إذا انحرف عرضك أكثر من tick واحد عن الهدف
  5. ألغِ واخرج إذا ترقق الدفتر أو انكسرت الأخبار

الجزء 13: الانتقال إلى الإنتاج

  • الاستضافة: يكفي VPS بسعر $6/month (Hetzner أو DigitalOcean) في أوروبا أو US-East لمعظم الروبوتات. ضعها قرب Polygon RPC إذا كنت تحتاج زمن انتقال دون 10ms.
  • RPC: استخدم Alchemy أو Infura أو QuickNode للحصول على Polygon RPC موثوق. الخطط المجانية كافية حتى تبدأ بوضع مئات الأوامر في الدقيقة.
  • المراقبة: استخدم Prometheus + Grafana للمقاييس، وروبوت Telegram للتنبيهات. سجّل كل معرف أمر ترسله وكل تنفيذ تستقبله.
  • النسخ الاحتياطي: خزّن الحالة كل دقيقة. إذا تعطل VPS في منتصف التنفيذ، فأنت تريد الاستئناف خلال ثوانٍ، لا التسوية يدويًا.
  • الضرائب: سجلاتك هي أيضًا أثر التدقيق - انظر دليل الضرائب.

الجزء 14 - نصائح عملية معتمدة لواجهة بوليماركت API

اثنا عشر سلوكًا إنتاجيًا من مشغلي الروبوتات الحية.
  1. خزّن بيانات اعتماد API بعد أول استدعاء اشتقاق - إن create_or_derive_api_creds() مقيد بالمعدل وبطيء. خزّن apiKey/secret/passphrase في .env وحمّلها عند الإقلاع.
  2. استخدم signature_type=2 (GNOSIS_SAFE) إذا كنت قد ربطت محفظة متصفح أولًا، واستخدم signature_type=1 (POLY_PROXY) فقط لحسابات Magic-link البريدية. يؤدي عدم تطابق النوع إلى 401 "invalid api key."
  3. اضبط funder على عنوان محفظة الوكيل الخاصة بك في بوليماركت، وليس عنوان EOA الخاص بك. مفتاح التوقيع يعيش في EOA؛ والأموال تعيش في الوكيل. الخلط بينهما هو خطأ المصادقة رقم 1.
  4. افهرس النتائج حسب الوسم، لا حسب الموضع أبدًا - clobTokenIds[outcomes.index("Yes")] وليس clobTokenIds[0]. أسواق NegRisk وOscar لها ترتيب اعتباطي.
  5. زامن ساعتك قبل التوقيع - يجب أن يكون POLY_TIMESTAMP ضمن نافذة ضيقة. انحراف NTP على VPS رخيص يكسر المصادقة بصمت. شغّل chrony أو systemd-timesyncd.
  6. أعد جلب دفتر REST عند كل إعادة اتصال WebSocket قبل إعادة الاشتراك. WebSocket يعطي فروقًا؛ وإذا فاتتك فجوة أثناء إعادة الاتصال فسوف ينحرف دفترك المحلي عن الواقع وستسعّر بأسعار خاسرة.
  7. لا تتجاوز 10 أوامر في الثانية كدفعة - نقطة /order تختنق عند دفعة 500/10s و3,000/10min مستدامة. أضف محدد معدل token-bucket على جانب العميل؛ Cloudflare تصفّ الطلبيات بدلًا من إسقاطها، لذا فإن إعادة المحاولة العمياء تضخم التراكم.
  8. استخدم cancel_market_orders(market=conditionId) عند الإيقاف بدل cancel_all(). الإلغاء المقيّد بالسوق idempotent وأكثر أمانًا إذا تعطل الروبوت في منتصف الحلقة على سوق واحد فقط.
  9. تتبّع heartbeatMs لكل أصل - أضف مراقبًا يفرض تحديثًا لأي سوق لا تصله تحديثات لمدة 30 ثانية في سوق حي. تعد تدفقات WS القديمة أكثر مصدر شائع للميزة الوهمية.
  10. سجّل معرف الأمر قبل الإرسال، لا بعده. تتطلب idempotency أن يمتلك العميل المعرف حتى يمكن لإعادة التشغيل أن تعيد الإرسال من دون تنفيذات مكررة.
  11. استخدم HeartBeats API (يناير 2026+) للإلغاء التلقائي عند الانقطاع. اضبط فترة heartbeat على 5 ثوانٍ؛ ويلغي الخادم كل أوامرك القائمة إذا فاته اثنان من heartbeats.
  12. تداول ورقيًا بأوامر $1 في سوق رقيق لمدة 48 ساعة قبل التوسّع. لا تمتلك بوليماركت testnet؛ والأوامر الحقيقية الصغيرة جدًا هي الطريقة الموثوقة الوحيدة للتحقق من المصادقة والتوقيع ومعالجة التنفيذ ومسار الإلغاء.

ورقة غش الحالة → الإجراء

الحالةالإجراءالسبب
401 "invalid api key" عند أول استدعاءتحقّق من أن signature_type يطابق مصدر المحفظة وأن funder هو عنوان الوكيلعدم تطابق النوع 1 مقابل 2 هو 80% من أخطاء 401؛ والباقي هو استخدام EOA كممول
رفض الأوامر بـ "insufficient balance"استعلم عن /balance-allowance قبل كل أمر واحجز محليًايحجز CLOB الضمان لحظة الإرسال؛ ويمكن لأمرين متزامنين أن يحجزا مرتين
اختناق 429 على نقطة /orderتراجع مع عشوائية: 2^attempt + random() بحد أقصى 30 ثانيةCloudflare يختنق بدل الرفض؛ وإعادة المحاولة الساذجة تضخّم التراكم
انقطاع WebSocket في منتصف الصفقةالتقط لقطة للدفتر عبر REST، ووفّق الحالة المحلية، ثم أعد الاشتراكتُفقد الفروق أثناء الفجوة؛ واللقطة تعيد مزامنة سلالم الأسعار
وضع أمر دون تأكيد تنفيذاستعلم عن /data/order/{id} خلال 5 ثوانٍ؛ إن كان معلّقًا فانتظر، وإن لم يُعثر عليه فاستبدلهنادر لكنه قابل للاسترداد؛ القاعدة الافتراضية "تحقّق من الحالة، ثم تصرّف"
تسوية السوق أثناء عرض نشطألغِ كل الأوامر المفتوحة على ذلك conditionId عند حدث التسويةقد تبقى أوامر ما بعد التسوية كتنفيذات زومبي إذا أُطلقت خصائص شاذة في الموائم
تشغيل روبوت صناعة سوقسعّر ضمن 2 سنت من نقطة الوسط بحجم 100+ سهمتُرجّح صيغة المكافأة الضيق + الحجم + الوقت على الدفتر؛ الضيق + الحجم + الاستمرار يفوز
تشغيل روبوت تحكيم على أسواق متعددة النتائجاستخدم FOK لكل طرف، لا GTCالتنفيذ الجزئي على الطرف A مع طرف B كامل = انكشاف غير محوّط وخسارة فورية
أول مرة تبني فيها روبوتًاابنِ الماسح أولًا، ثم محرك الأسعار، ثم الإشارة - لا تبدأ بالإشارة أبدًاالإشارات بلا حالة دفتر نظيفة فخاخ ارتباط؛ شغّل الأنابيب أولًا
تعطّل روبوت الإنتاج الساعة الثالثة صباحًاوفّر إعادة تشغيل تلقائي عبر systemd + تنبيه Telegram + حالة دائمةأي روبوت غير مراقب سيتعطّل؛ والسؤال الوحيد هو هل يعيد التشغيل بنظافة
مثال عملي: حلقة minimal market-صانع السوق (maker) للحصول على مكافآت السيولة.

الهدف. كسب مكافآت السيولة على سوق سياسي متوسط الحجم مسعّر تقريبًا عند 0.48 Yes / 0.52 No مع الفرق السعري (spread) قدره 2 سنت. تجمع المكافآت اليومية لهذا السوق نحو $40.

الإعداد. اشترك عبر WebSocket في كلا token_id. خزّن آخر mid تم رصده. عرّف spread_target = 0.02 وsize = 200 سهم لكل جانب وreprice_threshold = 0.005 (5 ticks).

الحلقة. عند كل تحديث WS للدفتر: احسب mid جديدًا = VWAP لأفضل 3 طلبات شراء وبيع. إذا كانت |العروض الحالية - mid المستهدف| > reprice_threshold، فألغِ كلا الأمرين الحاليين، ثم ضع عرض شراء جديدًا عند mid-0.01 وعرض بيع جديدًا عند mid+0.01. حدّث السعر مرة واحدة كل ثانيتين لكل جانب.

المخاطر. الحد الأقصى للمخزون لكل جانب = 1,000 سهم. إذا تجاوز المخزون 500، فوسّع الفرق السعري في ذلك الجانب بمقدار 0.005 لكل 100 سهم. القاطع: إذا تحرك mid أكثر من 0.05 خلال 60 ثانية، فألغِ كل شيء وأوقف 5 دقائق.

النتيجة (تشغيل حقيقي لمدة 7 أيام). تم تنفيذ نحو 14,000 سهم عبر 680 أمرًا، مع دفع $0 رسوم آخذ السوق (taker) (جانب صانع السوق)، وكسب $31.40 في خصومات السيولة، وكان P&L الاتجاهي الصافي -$4.10 (خسائر مخزون صغيرة). الصافي +$27.30 خلال 7 أيام على رأس مال عامل قدره $500 = نحو 8% شهريًا. يتوسع خطيًا عبر 30-50 سوقًا في الوقت نفسه على VPS واحد.

الخلاصة الأساسية

المتداولون الذين يربحون باستمرار على بوليماركت يتعاملون مع polymarket api guide كنظام، لا كحدس. التزم بالأرقام أعلاه - فهي الفارق بين المحافظ الرابحة بنسبة 7.6% والبقية.

ما التالي؟