Polymarket Bot Tutorial · Chapter 10 of 32

Bot builders-এর জন্য Polymarket order types ব্যাখ্যা করা হলো: Fill-or-Kill (FOK), Fill-and-Kill (FAK), Good-til-Cancelled (GTC), এবং limit-vs-market trade-offs। Production-grade decision rules সহ।

এই অধ্যায়ে কী রয়েছে

Order-type confusion নতুন bot builders-এর জন্য bug-এর সবচেয়ে ব্যয়বহুল class। FOK পাঠানো যখন GTC দরকার ছিল, তাহলে entry miss হয়; GTC পাঠানো যখন FOK দরকার ছিল, তাহলে resting order পড়ে থাকে এবং ঘণ্টা পরে ভয়ংকর দামে fill হয়। এই অধ্যায়ে আছে decision tree এবং production defaults, যা হাজার হাজার order-এর মধ্যে টিকে আছে।

  • 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 type নিয়ে বেশিরভাগ bot bug হয় #1 বেছে নেওয়ার ফলে, যখন আপনার #3 দরকার ছিল (একটি "buy" রূপ নেয় "no position because the spread was too wide"-এ) অথবা #3 বেছে নেওয়ার ফলে, যখন আপনার #1 দরকার ছিল (একটি "buy" রূপ নেয় resting order-এ, যা ঘণ্টা পরে ভুল সময়ে fill হয়)।

FOK: যখন আপনাকে fill করতে হবে বা skip করতে হবে

Fill-or-Kill অনুরোধকৃত price বা আরও ভালো দামে পুরো orderটি instant-এ match করে। যদি পুরো size instant-এ fill করা না যায়, order reject হয় এবং কিছুই ঘটে না। কোনো resting নেই, partial নেই।

FOK ব্যবহার করুন: news-arbitrage entry-র জন্য (আপনি শুধু news price-এ ঢুকতে চান, 30s পরে market যেখানে থাকবে সেখানে নয়); নির্দিষ্ট target-এ take-profit exit-এর জন্য, যেখানে partials bookkeeping জটিল করে দেবে; যেকোনো সময় strategy atomic execution ধরে নেয়।

Trade-off হলো: FOK অন্য order type-এর তুলনায় বেশি reject হয়, বিশেষ করে illiquid book-এ। সবসময় fallback path রাখুন - strategy condition re-evaluate করুন এবং এখনও valid হলে retry করুন, নইলে এগিয়ে যান।

FAK: যখন partials গ্রহণযোগ্য

Fill-and-Kill (যাকে "immediate or cancel"-ও বলা হয়) এখন যতটা সম্ভব match করে, তারপর unfilled remainder cancel করে। আপনি full size, partial, বা zero - যেকোনোটি পেতে পারেন।

FAK ব্যবহার করুন: নির্দিষ্ট price ceiling সহ market-buy-এর জন্য (mid-এর উপরে N cents পর্যন্ত ask lift করা); জরুরি inventory reduction-এর সময় sweep-the-book sells-এর জন্য; যেকোনো strategy যেখানে "কিছু position, কিছুই না থাকার চেয়ে ভালো"।

Operationally, FOK-এর চেয়ে বেশি tricky, কারণ bot-কে পরের step decide করার আগে জানতে হবে সে 100% পেয়েছে নাকি 30%। Fill response-এ filled_size field থাকে - সবসময় এটি পড়ুন।

GTC: যখন আপনি book-এ rest করতে চান

Good-til-Cancelled আপনার price-এ book-এ rest করে, যতক্ষণ না fill হয় বা আপনি cancel করেন। কোনো timeout নেই (v2 API-তে অন্য order type-এ expiry-সহ GTD আছে)।

GTC ব্যবহার করুন: entry-এর উপরে +Nc-এ take-profit sells; entry-এর নিচে -Nc-এ stop-loss sells (কিছু caveat সহ - নিচে দেখুন); market-making-এ দুই পাশে quote দেওয়ার জন্য; যেকোনো position-এ যেখানে bot ভালো price-এর জন্য অপেক্ষা করতে রাজি।

কঠোর rule: GTC-এর জন্য ≥ 5 shares লাগে। 5 shares-এর নিচের order CLOB reject করে Size (X) lower than the minimum: 5 দিয়ে। একটি bot যদি 4-share GTC sell পোস্ট করে, তাহলে exit সেট করতে silently fail হবে এবং position resolution পর্যন্ত ride করবে। GTC পোস্ট করার আগে সবসময় inventory ≥ 5 চেক করুন; ছোট হলে FAK বা ride-to-resolve-এ fallback করুন।

Limit vs market এবং spread tax

প্রযুক্তিগতভাবে প্রতিটি Polymarket order-ই একটি limit order - এমনকি bot যেটিকে "market buy" বলে, সেটিও একটি price ceiling নির্দিষ্ট করে। পার্থক্য হলো সেই price best ask-এ আছে কি না (কার্যত market order, book-এর বিরুদ্ধে fill হবে) নাকি তার নিচে (book-এ rest করবে)।

Spread tax হলো crossing-এর খরচ - bid 0.45, ask 0.47, mid 0.46। একটি round trip যা ask-এ buy করে এবং bid-এ sell করে, per share 2 cents খরচ করে। +3c/-4c target-সহ 60% win-rate strategy-তে, সেই 2c spread-ই profit আর loss-এর পার্থক্য।

Maker pattern (bid-এ বা তার নিচে GTC post করে hit হওয়ার অপেক্ষা) spread pay না করে spread collect করে। খরচ হলো অনিশ্চিত fill - আপনি হয়তো কখনও hit হবেন না। High-conviction trade-এর জন্য spread pay করুন। Passive accumulation-এর জন্য book work করুন।

আমাদের production defaults (FOK buys, GTC sells)

আমাদের বেশিরভাগ production bot যে pattern-এ converge করে:

  • Entries: ask + 0-2 cents-এ FOK. যদি bot buy করার সিদ্ধান্ত নিয়ে থাকে, তাহলে এখনই buy করা উচিত বা skip করা উচিত। একটি entry order rest করানো খুব কমই মূল্যবান - buy decision trigger করা situation order rest থাকার আগেই দ্রুত বদলে যায়।
  • Take-profit exits: target price-এ GTC. Entry fill হওয়ার ঠিক পরে post করা হয়। আমরা market-কে আমাদের কাছে আসতে দিই; bid নিচে chase করি না। ≥ 5 shares সহ।
  • Stop-loss: case-by-case. ধীর strategy-তে, যেখানে price change bounded, সেখানে GTC কাজ করে। Fast-moving market-এ GTC stop price-এর ভেতর দিয়ে উড়ে গেলে fill নাও হতে পারে; আমরা option-D fashion-এ resolution পর্যন্ত ride করি (memory: trader-gtc-sell.md)।

এই pattern conservative - fill কম, slippage কম। আরও aggressive variant FAK entry এবং FAK exit ব্যবহার করে, partial fill accept করে। একটি বেছে নিন এবং consistent থাকুন; প্রতিটি trade-এ আলাদা সিদ্ধান্ত mixing 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)

@polymarket/clob-client-v2 দিয়ে Node-এ একই operation: OrderType.FOK এর জায়গায় clob.OrderType.GTC ইত্যাদি ব্যবহার করুন; method হলো createAndPostOrder। negRisk flag (chapter 11) multi-outcome market-এর জন্য দ্বিতীয় argument-এ set করতে হবে - এটি missing হলে wrong exchange contract-এ route হবে।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

Polymarket-এ FOK কী?
Fill-or-Kill। Order-টি অবশ্যই instant-এ পুরোটা fill হতে হবে, নইলে এটি cancel হয় - partial fill নেই, book-এ resting নেই। আমরা আমাদের production trader-এ buy-এর জন্য default হিসেবে FOK ব্যবহার করি, কারণ এটি phantom-fill ambiguity দূর করে (order-টি হয় পুরোপুরি fill হয়, নয়তো পুরোপুরি চলে যায়, কখনও অর্ধেক আটকে থাকে না)।
Polymarket-এ FAK কী?
Fill-and-Kill (যাকে IOC, Immediate-or-Cancel-ও বলা হয়)। Order-টি সঙ্গে সঙ্গে যত liquidity পাওয়া যায় তা নেয় এবং unfilled remainder cancel করে। যখন আপনি partial fill মেনে নেন কিন্তু কখনও rest চান না, তখন এটি useful। Fragmented order book-এ FOK-এর চেয়ে faster।
Polymarket-এ GTC কী?
Good-til-Cancelled। Order-টি fill হওয়া বা আপনি cancel করা পর্যন্ত book-এ rest করে। GTC হলো maker হওয়ার জন্য যা ব্যবহার করেন (liquidity provide), rebates earn করতে, এবং taker fees এড়াতে। আমরা আমাদের production setup-এ sell-এর জন্য GTC ব্যবহার করি, যাতে exit-এ spread capture করতে পারি।
আমার bot-এ limit order নাকি market order ব্যবহার করা উচিত?
প্রায় সবসময় limit order। Market order taker fee (0.75% to 1.80%) এবং spread pay করে; limit order maker rebate (taker fee-এর 20-25%) earn করে। Market order ব্যবহার করার ভালো কারণ একমাত্র তখনই, যখন news hit করেছে এবং আপনার limit fill হওয়ার আগে price spread-এর বাইরে চলে যেতে চলেছে।
Polymarket কি native stop-loss order support করে?
না। Stop-loss একটি client-side concept: আপনার bot price দেখে, এবং trigger condition পূরণ হলে market বা FAK sell order place করে। Exchange-এ native stop primitive নেই, তাই logic আপনাকেই bot-এ build করতে হবে।
Order minimum কত?
Market order: 1 USD minimum notional। Limit order: 5 shares minimum। কিছু thin market খুব ছোট order reject করে - SDK একটি specific error code দেয়, যেটি detect করে আপনি size আবার নির্ধারণ করতে পারেন।