Polymarket Bot Tutorial · Chapter 10 of 32
شرح أنواع أوامر Polymarket لمطوري bots: Fill-or-Kill (FOK)، وFill-and-Kill (FAK)، وGood-til-Cancelled (GTC)، والمفاضلة بين limit وmarket. مع قواعد قرار بمستوى الإنتاج.
ما يغطيه هذا الفصل
الالتباس حول أنواع الأوامر هو أكثر فئات الأخطاء كلفةً على مطوري bots الجدد. إرسال FOK عندما كان المطلوب GTC يؤدي إلى فوات فرص الدخول؛ وإرسال GTC عندما كان المطلوب FOK يترك أوامر resting تنفذ بعد ساعات بأسعار سيئة جدًا. هذا الفصل هو شجرة القرار والإعدادات الافتراضية الإنتاجية التي أثبتت فعاليتها عبر آلاف الأوامر.
- شجرة قرار سريعة
- FOK: عندما يجب أن ينفذ الأمر بالكامل أو يُلغى
- FAK: عندما تكون الأجزاء المنفذة مقبولة
- GTC: عندما تريد أن يبقى الأمر على book
- المفاضلة بين limit وmarket وضريبة spread
- إعداداتنا الافتراضية في الإنتاج (FOK للشراء، GTC للبيع)
- Code: تنفيذ كل نوع من الأوامر
Quick decision tree
ثلاثة أسئلة تحسم كل عملية وضع أمر.
- هل تحتاج تنفيذًا مضمونًا الآن، ولا تريد الصفقة أصلًا إذا لم تحصل عليه فورًا؟ → FOK.
- هل تريد أكبر قدر ممكن من التنفيذ الآن، وتقبل التنفيذ الجزئي، ولا تريد أمرًا resting؟ → FAK.
- هل تريد أن يبقى الأمر على book عند سعرك وتنتظر أن يأتيك الطرف الآخر؟ → GTC.
هذا كل شيء. معظم أخطاء bots المتعلقة بأنواع الأوامر تنشأ من اختيار #1 عندما كنت تريد #3 (فيتحول "buy" إلى "لا توجد position لأن spread كان واسعًا جدًا") أو اختيار #3 عندما كنت تريد #1 (فيتحول "buy" إلى أمر resting يُنفذ بعد ساعات في وقت غير مناسب).
FOK: when you must fill or skip
Fill-or-Kill يطابق كامل الأمر عند السعر المطلوب أو أفضل منه، فورًا. إذا تعذر تنفيذ الحجم الكامل فورًا، يُرفض الأمر ولا يحدث شيء. لا resting، ولا partial.
استخدم FOK في: دخولات news-arbitrage (تريد الدخول عند سعر الخبر فقط، لا عند السعر بعد 30 ثانية)؛ عمليات الخروج لجني الربح عند هدف محدد عندما تؤدي الأجزاء المنفذة إلى تشويش المحاسبة؛ أي وقت تفترض فيه الاستراتيجية تنفيذًا atomic.
المفاضلة: FOK يُرفض أكثر من أنواع الأوامر الأخرى، خصوصًا على books قليلة السيولة. يجب أن يكون لديك دائمًا مسار بديل - أعد تقييم شرط الاستراتيجية وأعد المحاولة إذا كان لا يزال صالحًا، أو انتقل إلى الفرصة التالية.
FAK: when partials are acceptable
Fill-and-Kill (ويُسمى أيضًا "immediate or cancel") ينفذ أكبر قدر ممكن الآن، ثم يُلغي الجزء غير المنفذ. قد تحصل على الحجم الكامل، أو تنفيذ جزئي، أو لا شيء.
استخدم FAK في: market-buy مع حد سعري محدد (ارفع ask حتى N سنت فوق mid)؛ عمليات البيع sweeping للـ book عند الحاجة لتقليل inventory بشكل عاجل؛ أي استراتيجية يكون فيها "بعض position أفضل من لا شيء".
تشغيليًا، هو أكثر تعقيدًا من FOK لأن على bot أن يعرف هل حصل على 100% أم 30% قبل تحديد الخطوة التالية. استجابة التنفيذ تتضمن الحقل filled_size - اقرأه دائمًا.
GTC: when you want to rest on the book
Good-til-Cancelled يبقى على book عند سعرك حتى يُنفذ أو تقوم بإلغائه. لا يوجد timeout (أنواع أخرى من الأوامر في v2 API تتضمن GTD مع expiry).
استخدم GTC في: عمليات البيع لجني الربح عند +Nc فوق نقطة الدخول؛ أوامر stop-loss عند -Nc تحت نقطة الدخول (مع بعض التحفظات - انظر أدناه)؛ market-making بعروض على الجانبين؛ أي position يكون bot مستعدًا للانتظار من أجل سعر أفضل فيها.
القاعدة الصارمة: GTC يتطلب ≥ 5 shares. الأوامر الأقل من 5 shares يرفضها CLOB مع الرسالة Size (X) lower than the minimum: 5. bot يضع GTC للبيع على 4 shares يفشل بصمت في ضبط الخروج ويُبقي position حتى التسوية. تحقّق دائمًا من أن inventory ≥ 5 قبل إرسال GTC؛ وإلا فانتقل إلى FAK أو ride-to-resolve إذا كان الحجم أصغر.
Limit vs market and the spread tax
كل أوامر Polymarket هي تقنيًا limit orders - حتى ما يسميه bots "market buy" يحدد سقف سعر. الفرق هو ما إذا كان هذا السعر عند أفضل ask (فعليًا market order، وسيتم تنفيذه مقابل book) أو أقل منه (فيبقى resting على book).
ضريبة spread هي تكلفة crossing - bid 0.45، ask 0.47، mid 0.46. صفقة ذهاب وعودة تشتري عند ask وتبيع عند bid تدفع 2 سنت لكل share. في استراتيجية بمعدل ربح 60% مع أهداف +3c/-4c، يكون هذا الـ 2c spread هو الفرق بين الربح والخسارة.
نمط maker (وضع GTC عند bid أو أقل، والانتظار حتى يتم ضربه) يجمع spread بدلًا من دفعه. التكلفة هي عدم اليقين في التنفيذ - قد لا يتم ضربك أبدًا. في الصفقات عالية القناعة، ادفع spread. في التراكم السلبي، اعمل على book.
Our production defaults (FOK buys, GTC sells)
النمط الذي تميل إليه معظم bots الإنتاجية لدينا:
- Entries: FOK at ask + 0-2 cents. إذا قرر bot الشراء، فعليه أن يشتري الآن أو يتجاوز الفرصة. إبقاء أمر دخول resting نادرًا ما يكون مجديًا - الحالة التي أدت إلى قرار الشراء تتغير أسرع من المدة التي سيبقى فيها الأمر resting.
- Take-profit exits: GTC at target price. يُرسل فورًا بعد تنفيذ الدخول. نسمح للسوق بأن يأتي إلينا؛ لا نطارد bid نزولًا. مع ≥ 5 shares.
- Stop-loss: case-by-case. يعمل GTC مع الاستراتيجيات البطيئة حيث تكون تغيرات السعر محدودة. أما في الأسواق السريعة، فلن يُنفذ GTC stop إذا اندفع السعر عبره؛ عندها نذهب إلى التسوية بصيغة option-D (تذكير: trader-gtc-sell.md).
هذا النمط محافظ - تنفيذات أقل، وslippage أقل. النسخة الأكثر هجومية تستخدم FAK للدخول وFAK للخروج، مع قبول التنفيذات الجزئية. اختر نهجًا واحدًا والتزم به؛ فخلط القرارات لكل صفقة يفتح الباب أمام الالتباس.
Code: place each order type
مرجع لوضع الأوامر في Python باستخدام py-clob-client (v0.34.6).
from py_clob_client.client import ClobClient
from py_clob_client.clob_types import OrderArgs, OrderType
c = ClobClient(host="https://clob.polymarket.com", chain_id=137,
key=PRIVATE_KEY, signature_type=2, funder=PROXY)
c.set_api_creds(creds)
# FOK buy: fill 10 shares at price 0.45 or skip
args = OrderArgs(token_id=TOKEN, price=0.45, size=10, side="BUY")
resp = c.create_and_post_order(args, OrderType.FOK)
# FAK buy: take as much as you can at 0.45 or below
resp = c.create_and_post_order(args, OrderType.FAK)
# GTC sell: rest a sell at 0.85 for 10 shares
sell_args = OrderArgs(token_id=TOKEN, price=0.85, size=10, side="SELL")
resp = c.create_and_post_order(sell_args, OrderType.GTC)
نفس العمليات في Node مع @polymarket/clob-client-v2: استبدل OrderType.FOK بـ clob.OrderType.GTC إلخ؛ والطريقة هي createAndPostOrder. يجب ضبط negRisk flag (الفصل 11) في الوسيط الثاني لأسواق multi-outcome - إغفاله يوجّهك إلى عقد exchange خاطئ.












