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 নির্ধারণ করে।
- আপনার কি এখনই guaranteed fill দরকার, আর এখন না পেলে একেবারেই না? → FOK.
- এখন যতটা fill সম্ভব চান, partials মেনে নেবেন, resting order চাই না? → FAK.
- আপনার 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 হবে।












