Polymarket Bot Tutorial · Chapter 10 of 32

Polymarket order types کی وضاحت bot builders کے لیے: Fill-or-Kill (FOK)، Fill-and-Kill (FAK)، Good-til-Cancelled (GTC)، اور limit-vs-market trade-offs۔ Production-grade decision rules کے ساتھ۔

یہ chapter کیا cover کرتا ہے

Order-type confusion نئے bot builders کے لیے bug کی سب سے مہنگی category ہے۔ جب GTC کی ضرورت ہو تو FOK بھیجنے سے entry miss ہو جاتی ہے؛ جب FOK کی ضرورت ہو تو GTC بھیجنے سے resting orders چھوٹ جاتی ہیں جو گھنٹوں بعد بہت خراب prices پر fill ہوتی ہیں۔ یہ chapter decision tree اور وہ production defaults ہے جو ہزاروں orders کے دوران ثابت شدہ رہے ہیں۔

  • Quick decision tree
  • FOK: جب آپ کو fill یا skip کرنا ہو
  • FAK: جب partials قابلِ قبول ہوں
  • GTC: جب آپ book پر rest کرنا چاہتے ہوں
  • Limit vs market اور spread tax
  • ہمارے production defaults (FOK buys, GTC sells)
  • Code: ہر order type place کریں

Quick decision tree

تین سوال ہر order placement کا فیصلہ کرتے ہیں۔

  1. کیا آپ کو ابھی guaranteed fill چاہیے، اور اگر ابھی نہ ملے تو بالکل نہیں؟ → FOK.
  2. کیا آپ کو ابھی جتنا fill مل سکے اتنا چاہیے، partials قبول ہیں، resting order نہیں چاہیے؟ → FAK.
  3. کیا آپ اپنی price پر book میں rest کرنا چاہتے ہیں اور کسی کے آپ تک آنے کا انتظار کرنا چاہتے ہیں؟ → GTC.

بس اتنا ہی۔ Order types کے گرد زیادہ تر bot bugs #1 چننے سے آتے ہیں جب آپ کو #3 چاہیے ہوتا ہے (ایک "buy" "no position because the spread was too wide" میں بدل جاتا ہے) یا #3 چننے سے جب آپ کو #1 چاہیے ہوتا ہے (ایک "buy" resting order میں بدل جاتا ہے جو گھنٹوں بعد غلط وقت پر fill ہوتا ہے)۔

FOK: جب آپ کو fill یا skip کرنا ہو

Fill-or-Kill پوری order کو مانگی گئی price یا اس سے بہتر price پر فوراً match کرتا ہے۔ اگر پوری size فوراً fill نہ ہو سکے تو order reject ہو جاتی ہے اور کچھ نہیں ہوتا۔ نہ resting، نہ partial۔

FOK ان چیزوں کے لیے use کریں: news-arbitrage entries (آپ صرف news price پر داخل ہونا چاہتے ہیں، 30s بعد market جہاں ہوگا وہاں نہیں); مخصوص target پر take-profit exits جہاں partials bookkeeping کو muddy کر دیں؛ جب بھی strategy atomic execution فرض کرے۔

Trade-off: FOK دوسری order types کے مقابلے میں زیادہ reject ہوتی ہے، خاص طور پر illiquid books پر۔ ہمیشہ fallback path رکھیں - strategy condition دوبارہ evaluate کریں اور اگر ابھی بھی valid ہو تو retry کریں، یا آگے بڑھ جائیں۔

FAK: جب partials قابلِ قبول ہوں

Fill-and-Kill (جسے "immediate or cancel" بھی کہا جاتا ہے) ابھی جتنا fill ہو سکے اتنا کرتا ہے، پھر unfilled remainder cancel کر دیتا ہے۔ آپ کو full size، partial، یا zero مل سکتا ہے۔

FAK ان چیزوں کے لیے use کریں: market-buy with a specific price ceiling (mid سے N cents اوپر تک ask lift کریں); inventory فوری کم کرنے کے لیے sweep-the-book sells; ہر وہ strategy جہاں "کچھ position ہونا، نہ ہونے سے بہتر ہے"۔

Operationally FOK سے زیادہ tricky ہے کیونکہ bot کو next step decide کرنے سے پہلے یہ معلوم ہونا چاہیے کہ اسے 100% ملا یا 30%۔ Fill response میں filled_size field شامل ہوتا ہے - ہمیشہ اسے read کریں۔

GTC: جب آپ book پر rest کرنا چاہتے ہوں

Good-til-Cancelled آپ کی price پر book میں rest کرتا ہے جب تک fill نہ ہو جائے یا آپ cancel نہ کریں۔ کوئی timeout نہیں (v2 API میں دوسرے order types میں expiry کے ساتھ GTD شامل ہے)۔

GTC ان چیزوں کے لیے use کریں: entry سے +Nc اوپر take-profit sells; entry سے -Nc نیچے stop-loss sells (caveats کے ساتھ - نیچے دیکھیں); market-making کے لیے دونوں طرف quotes; ہر وہ position جہاں bot بہتر price کے انتظار پر آمادہ ہو۔

سخت rule: GTC کے لیے ≥ 5 shares ضروری ہیں. 5 shares سے کم orders CLOB کی طرف سے Size (X) lower than the minimum: 5 کے ساتھ reject ہو جاتی ہیں۔ ایک bot جو 4-share GTC sell post کرتا ہے exit set کرنے میں silently fail کر جاتا ہے اور position کو resolution تک لے جاتا ہے۔ GTC post کرنے سے پہلے ہمیشہ inventory ≥ 5 چیک کریں؛ اگر size کم ہو تو FAK یا ride-to-resolve پر fall back کریں۔

Limit vs market اور spread tax

ہر Polymarket order technically ایک limit order ہے - حتیٰ کہ وہ جسے bots "market buy" کہتے ہیں ایک price ceiling specify کرتا ہے۔ فرق یہ ہے کہ آیا وہ price best ask پر ہے (effectively market order، book کے خلاف fill ہو جائے گی) یا اس سے نیچے ہے (book میں rest کرے گی)۔

Spread tax crossing کی cost ہے - bid 0.45، ask 0.47، mid 0.46۔ ایک round trip جو ask buy اور bid sell کرتا ہے فی share 2 cents ادا کرتا ہے۔ 60% win-rate strategy میں جہاں targets +3c/-4c ہوں، وہ 2c spread profit اور loss کے درمیان فرق ہے۔

Maker pattern (bid پر یا اس سے نیچے GTC post کریں، hit ہونے کا انتظار کریں) spread pay کرنے کے بجائے collect کرتا ہے۔ Cost ہے uncertain fill - ممکن ہے آپ کو hit ہی نہ ملے۔ High-conviction trades کے لیے spread pay کریں۔ Passive accumulation کے لیے book کو work کریں۔

ہمارے production defaults (FOK buys, GTC sells)

وہ pattern جس پر ہمارے زیادہ تر production bots converge کرتے ہیں:

  • Entries: ask + 0-2 cents پر FOK. اگر bot نے buy decide کیا ہے تو اسے ابھی buy کرنا چاہیے یا skip۔ Entry order کو rest کرنا شاذونادر ہی قابلِ قدر ہوتا ہے - جس situation نے buy decision trigger کی وہ order کے rest ہونے سے زیادہ تیزی سے بدل جاتی ہے۔
  • Take-profit exits: target price پر GTC. Entry fill ہونے کے فوراً بعد post کیا جاتا ہے۔ ہم market کو اپنے پاس آنے دیتے ہیں؛ bid کو نیچے chase نہیں کرتے۔ ≥ 5 shares کے ساتھ۔
  • Stop-loss: case-by-case. GTC ان slow strategies کے لیے کام کرتا ہے جہاں price changes bounded ہوں۔ Fast-moving markets میں GTC stop price کے اس سے گزر جانے پر fill نہیں ہوگا؛ ہم option-D fashion میں resolution تک ride کرتے ہیں (memory: trader-gtc-sell.md)۔

یہ pattern conservative ہے - کم fills، کم slippage۔ زیادہ aggressive variant FAK entries اور FAK exits use کرتا ہے، partial fills قبول کرتے ہوئے۔ ایک منتخب کریں اور consistency برقرار رکھیں؛ ہر trade کے لیے فیصلے mix کرنا confusion کو دعوت دیتا ہے۔

Code: ہر order type place کریں

Python میں py-clob-client (v0.34.6) کے ساتھ reference order placement۔

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 کے ساتھ یہی operations: OrderType.FOK کو clob.OrderType.GTC وغیرہ سے replace کریں؛ method createAndPostOrder ہے۔ negRisk flag (chapter 11) کو multi-outcome markets کے لیے second argument میں set کرنا ضروری ہے - اسے miss کرنے سے request غلط exchange contract کی طرف route ہو جاتی ہے۔

اکثر پوچھے گئے سوالات

Polymarket پر FOK کیا ہے؟
Fill-or-Kill۔ order کو فوراً مکمل طور پر fill ہونا چاہیے ورنہ وہ cancel ہو جاتی ہے - نہ partial fills، نہ book پر resting۔ ہم اپنی production trader میں buys کے لیے default طور پر FOK use کرتے ہیں کیونکہ یہ phantom-fill ambiguity ختم کر دیتا ہے (order یا تو پوری طرح fill ہوتی ہے یا مکمل طور پر ختم، کبھی آدھی stuck نہیں رہتی)۔
Polymarket پر FAK کیا ہے؟
Fill-and-Kill (جسے IOC, Immediate-or-Cancel بھی کہا جاتا ہے)۔ order فوری طور پر دستیاب liquidity جتنی ہو اتنی لیتی ہے اور unfilled remainder cancel کر دیتی ہے۔ جب آپ partial fills قبول کرتے ہوں مگر کبھی rest نہ چاہتے ہوں تو یہ مفید ہے۔ Fragmented order books میں FOK سے زیادہ تیز۔
Polymarket پر GTC کیا ہے؟
Good-til-Cancelled۔ order book میں اس وقت تک rest کرتی ہے جب تک fill نہ ہو جائے یا آپ اسے cancel نہ کریں۔ GTC وہ ہے جو آپ maker بننے (liquidity provide کرنے)، rebates کمانے، اور taker fees سے بچنے کے لیے use کرتے ہیں۔ ہم اپنے production setup میں sells کے لیے GTC use کرتے ہیں تاکہ exits پر spread capture کر سکیں۔
کیا میرے bot کو limit orders use کرنی چاہئیں یا market orders؟
تقریباً ہمیشہ limit orders۔ Market orders taker fee (0.75% سے 1.80%) اور spread ادا کرتی ہیں؛ limit orders maker rebate کماتی ہیں (taker fees کا 20-25%)۔ Market order استعمال کرنے کی اچھی وجہ صرف یہ ہے کہ جب news آ چکی ہو اور price آپ کے limit fill ہونے سے پہلے spread سے آگے نکلنے والی ہو۔
کیا Polymarket native stop-loss orders support کرتا ہے؟
نہیں۔ Stop-loss ایک client-side concept ہے: آپ کا bot price watch کرتا ہے، اور جب trigger condition پوری ہو جائے تو market یا FAK sell order place کرتا ہے۔ Exchange میں کوئی native stop primitive نہیں، اس لیے logic آپ کو اپنے bot میں build کرنا ہوگا۔
Order minimums کیا ہیں؟
Market orders: 1 USD minimum notional۔ Limit orders: 5 shares minimum۔ کچھ thin markets بہت چھوٹے orders reject کر دیتے ہیں - SDK ایک specific error code return کرتا ہے جسے آپ detect کر کے re-size کے لیے استعمال کر سکتے ہیں۔