Polymarket Bot Tutorial · Hoofdstuk 10 van 32
Polymarket order types uitgelegd voor bot-builders: Fill-or-Kill (FOK), Fill-and-Kill (FAK), Good-til-Cancelled (GTC) en limit-vs-market trade-offs. Met production-grade beslisregels.
Wat dit hoofdstuk behandelt
Order-type verwarring is de enkele duurste klasse bugs voor nieuwe bot-builders. FOK sturen wanneer GTC nodig was produceert gemiste entries; GTC sturen wanneer FOK nodig was laat resting orders die uren later vullen op vreselijke prijzen. Dit hoofdstuk is de beslis-tree en de production-defaults die hebben standgehouden over duizenden orders.
Dit is hoofdstuk 10 van onze 32-delige serie over het bouwen van een Polymarket trading bot. We behandelen het onderwerp in detail in de secties hieronder. De body content voor elke sectie wordt geschreven en hoofdstuk-per-hoofdstuk uitgerold; FAQ-antwoorden en referenties zijn al compleet en weerspiegelen production-ervaring van het draaien van onze eigen trader.
- Snelle beslis-tree
- FOK: wanneer je moet vullen of skippen
- FAK: wanneer partials acceptabel zijn
- GTC: wanneer je wilt rusten op het book
- Limit vs market en de spread tax
- Onze production defaults (FOK buys, GTC sells)
- Code: plaats elk order type
Snelle beslis-tree
Drie vragen bepalen elke order-plaatsing.
- Heb je een gegarandeerde fill nu nodig, en helemaal niet als je hem nu niet kunt krijgen? → FOK.
- Wil je zoveel fill als je kunt krijgen nu, accepteer partials, geen resting order? → FAK.
- Wil je op het book rusten op jouw prijs en wachten tot iemand naar je toe komt? → GTC.
Dat is het. De meeste bot-bugs rond order types komen van #1 kiezen wanneer je #3 wilde (een "buy" wordt "geen positie omdat de spread te breed was") of #3 kiezen wanneer je #1 wilde (een "buy" wordt een resting order die uren later vult op het verkeerde moment).
FOK: wanneer je moet vullen of skippen
Fill-or-Kill matched de hele order op de gevraagde prijs of beter, direct. Als de volledige size niet direct kan worden gevuld, wordt de order rejected en gebeurt er niets. Geen resting, geen partial.
Gebruik FOK voor: news-arbitrage entries (je wilt alleen in op de news-prijs, niet op waar de markt 30s later is); take-profit exits op een specifiek doel waar partials de boekhouding zouden vertroebelen; elke keer dat de strategie atomische executie aanneemt.
De trade-off: FOK weigert vaker dan andere order types, vooral op illiquide books. Heb altijd een fallback path — herevalueer de strategy-conditie en retry als nog geldig, of ga door.
FAK: wanneer partials acceptabel zijn
Fill-and-Kill (ook "immediate or cancel" genoemd) matched zoveel als het nu kan, dan annuleert de ongevulde rest. Je kunt de volledige size krijgen, een partial of nul.
Gebruik FAK voor: market-buy met een specifiek prijsplafond (lift de ask tot N cent boven mid); sweep-the-book sells bij het urgent verminderen van inventory; elke strategie waar "wat positie beter is dan geen".
Operationeel lastiger dan FOK omdat de bot moet weten of hij 100% of 30% kreeg voordat hij de volgende stap beslist. De fill-respons bevat een filled_size veld — lees het altijd.
GTC: wanneer je wilt rusten op het book
Good-til-Cancelled rust op het book op jouw prijs totdat het vult of je annuleert. Geen timeout (andere order types in de v2 API zijn onder andere GTD met een expiry).
Gebruik GTC voor: take-profit sells op +Nc boven entry; stop-loss sells op -Nc onder entry (met caveats — zie hieronder); market-making tweezijdige quotes; elke positie waar de bot bereid is te wachten op een betere prijs.
De harde regel: GTC vereist ≥ 5 shares. Orders onder 5 shares worden afgewezen door de CLOB met Size (X) lower than the minimum: 5. Een bot die een 4-share GTC sell post faalt stil aan het zetten van de exit en rijdt de positie tot resolution. Check altijd inventory ≥ 5 voor het posten van GTC; val terug op FAK of ride-to-resolve als kleiner.
Limit vs market en de spread tax
Elke Polymarket order is technisch een limit order — zelfs wat bots een "market buy" noemen specificeert een prijsplafond. Het onderscheid is of die prijs op de best ask is (in feite een market order, vult tegen het book) of eronder (rust op het book).
De spread tax is de kost van crossing — bid 0,45, ask 0,47, mid 0,46. Een round trip die ask koopt en bid verkoopt betaalt 2 cent per share. Op een 60% win-rate strategie met +3c/-4c targets is die 2c spread het verschil tussen winst en verlies.
Maker-patroon (post GTC op de bid of eronder, wacht om geraakt te worden) vangt de spread in plaats van te betalen. De kost is onzekere fill — je wordt misschien nooit geraakt. Voor high-conviction trades, betaal de spread. Voor passieve accumulatie, werk het book.
Onze production defaults (FOK buys, GTC sells)
Het patroon waar de meeste van onze productie-bots op convergeren:
- Entries: FOK op ask + 0-2 cent. Als de bot besloot te kopen, moet hij nu kopen of skippen. Een entry-order rusten is zelden de moeite waard — de situatie die de buy-beslissing triggerde verandert sneller dan de order rust.
- Take-profit exits: GTC op doel-prijs. Direct gepost na entry-fill. We laten de markt naar ons komen; we jagen de bid niet omlaag. Met ≥ 5 shares.
- Stop-loss: case-by-case. GTC werkt voor trage strategieën waar prijsveranderingen begrensd zijn. Voor snel-bewegende markten zal een GTC stop niet vullen als de prijs er doorheen vliegt; we rijden tot resolution in optie-D stijl (memory: trader-gtc-sell.md).
Het patroon is conservatief — minder fills, minder slippage. Een agressievere variant gebruikt FAK entries en FAK exits, accepteert partial fills. Kies één en blijf consistent; per-trade beslissingen mixen nodigt verwarring uit.
Code: plaats elk order type
Referentie order-plaatsing in Python met 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)
Zelfde operaties in Node met @polymarket/clob-client-v2: vervang OrderType.FOK door clob.OrderType.GTC etc.; de methode is createAndPostOrder. De negRisk flag (hoofdstuk 11) moet worden gezet in het tweede argument voor multi-outcome markten — het missen ervan routeert naar het verkeerde exchange contract.











