Polymarket Bot Tutorial · Bölüm 10 / 32
Bot builder'lar için Polymarket order type'ları açıklanıyor: Fill-or-Kill (FOK), Fill-and-Kill (FAK), Good-til-Cancelled (GTC) ve limit-vs-market trade-off'ları. Production-grade karar kurallarıyla birlikte.
Bu bölüm neleri kapsıyor
Order-type karışıklığı, yeni bot builder'lar için bug'ların tek başına en pahalı sınıfıdır. FOK göndermek gerekirken GTC göndermek kaçırılan entry'lere yol açar; GTC göndermek gerekirken FOK göndermek ise saatler sonra korkunç fiyatlarda fill olan resting order'lar bırakır. Bu bölüm, decision tree ve binlerce order boyunca dayanıklılığını koruyan production default'ları anlatır.
- Hızlı decision tree
- FOK: ne zaman fill ya da skip etmeniz gerektiği
- FAK: partial'ların kabul edilebilir olduğu durumlar
- GTC: book üzerinde beklemek istediğiniz zaman
- Limit vs market ve spread tax
- Production default'larımız (FOK buys, GTC sells)
- Code: her order type'ı gönderme
Hızlı decision tree
Her order placement kararını üç soru belirler.
- Hemen şimdi garanti fill gerekiyor mu, ve şimdi alamıyorsanız hiç olmasın mı? → FOK.
- Hemen şimdi alabildiğiniz kadar fill mi istiyorsunuz, partial'ları kabul ediyor musunuz, resting order istemiyor musunuz? → FAK.
- Kendi fiyatınızla book üzerinde bekleyip birinin size gelmesini mi istiyorsunuz? → GTC.
Hepsi bu. Order type'ları etrafındaki bot bug'larının çoğu, #1 seçmeniz gerekirken #3 seçmenizden ("buy", "spread çok geniştiği için position yok" durumuna dönüşür) veya #3 seçmeniz gerekirken #1 seçmenizden ("buy", saatler sonra yanlış anda fill olan resting order"a dönüşür) kaynaklanır.
FOK: fill etmek ya da skip etmek zorundaysanız
Fill-or-Kill, tüm order'ı istenen fiyatta veya daha iyisinde, anında match eder. Tam size anında fill edilemiyorsa order reddedilir ve hiçbir şey olmaz. Resting yok, partial yok.
FOK kullanın: news-arbitrage entry'lerinde (yalnızca news fiyatından girmek istersiniz, piyasanın 30 saniye sonraki seviyesinden değil); partial'ların muhasebeyi bulanıklaştıracağı belirli hedeflerde take-profit exit'lerinde; strategy'nin atomic execution varsaydığı her durumda.
Trade-off şu: FOK, özellikle illiquid book'larda diğer order type'larına göre daha sık reddedilir. Her zaman bir fallback path'iniz olsun - strategy condition'ı yeniden değerlendirin ve hâlâ geçerliyse retry edin ya da devam edin.
FAK: partial'ların kabul edilebilir olduğu durumlar
Fill-and-Kill (ayrıca "immediate or cancel" olarak da adlandırılır), o anda alabildiği kadarını match eder, sonra fill olmamış kalan kısmı iptal eder. Tam size, partial ya da sıfır alabilirsiniz.
FAK kullanın: belirli bir fiyat tavanıyla market-buy için (ask'ı mid'in N cent üstüne kadar kaldırmak); envanteri acilen azaltırken book'u süpüren sell işlemleri için; "bir miktar position hiç yoktan iyidir" diyen her strategy için.
Operasyonel olarak FOK'tan daha zordur çünkü bot'un sonraki adımı belirlemeden önce %100 mü yoksa %30 mu fill aldığını bilmesi gerekir. Fill response içinde filled_size alanı bulunur - her zaman okuyun.
GTC: book üzerinde beklemek istediğiniz zaman
Good-til-Cancelled, fill olana veya siz iptal edene kadar order'ı fiyatınızla book üzerinde bekletir. Timeout yoktur (v2 API'deki diğer order type'ları expiry içeren GTD'yi barındırır).
GTC kullanın: entry'nin +Nc üstünde take-profit sell'ler için; entry'nin -Nc altında stop-loss sell'ler için (uyarılarla - aşağıya bakın); market-making için iki taraflı quote'lar; bot'un daha iyi bir fiyat için beklemeye razı olduğu her position için.
Sert kural: GTC en az 5 share gerektirir. 5 share altındaki order'lar CLOB tarafından Size (X) lower than the minimum: 5 hatasıyla reddedilir. 4 share'lik bir GTC sell post eden bot, exit'i sessizce kuramaz ve position'ı resolution'a kadar taşır. GTC post etmeden önce her zaman inventory'nin ≥ 5 olduğunu kontrol edin; daha küçükse FAK ya da ride-to-resolve'a geçin.
Limit vs market ve spread tax
Her Polymarket order'ı teknik olarak bir limit order'dır - bot'ların "market buy" dediği şey bile bir price ceiling belirtir. Fark, bu fiyatın best ask'te olup olmamasıdır (etkili olarak bir market order, book'a karşı fill olur) ya da onun altında olup olmamasıdır (book üzerinde bekler).
Spread tax, cross etmenin maliyetidir - bid 0.45, ask 0.47, mid 0.46. Ask'ten alıp bid'ten satan bir round trip, share başına 2 cent öder. +3c/-4c hedefleri olan ve %60 win-rate'e sahip bir strategy'de bu 2c spread, kâr ile zarar arasındaki farktır.
Maker pattern'i (bid'de ya da altında GTC post etmek, size vurulmayı beklemek) spread'i öder yerine toplar. Bunun bedeli fill belirsizliğidir - size hiç vurulmayabilir. Yüksek conviction'lı trade'lerde spread'i ödeyin. Pasif accumulation için book üzerinde çalışın.
Production default'larımız (FOK buys, GTC sells)
Production bot'larımızın çoğunun üzerinde birleştiği pattern:
- Entry'ler: ask + 0-2 cent'te FOK. Bot buy kararı verdiyse, şimdi buy etmeli ya da skip etmelidir. Entry order'ını resting bırakmak nadiren değerdir - buy kararını tetikleyen durum, order'ın resting kalma hızından daha hızlı değişir.
- Take-profit exit'ler: target price'ta GTC. Entry fill olduktan hemen sonra post edilir. Piyasanın bize gelmesine izin veririz; bid'i aşağı kovalamayız. ≥ 5 share ile.
- Stop-loss: duruma göre. GTC, price change'lerin sınırlandığı yavaş strategy'ler için işe yarar. Hızlı hareket eden piyasalarda GTC stop, price onun üzerinden uçarsa fill olmaz; option-D biçiminde resolution'a kadar taşırız (hafıza: trader-gtc-sell.md).
Bu pattern muhafazakârdır - daha az fill, daha az slippage. Daha agresif bir varyant FAK entry'leri ve FAK exit'leri kullanır, partial fill'leri kabul eder. Birini seçin ve tutarlı kalın; trade bazında kararları karıştırmak kafa karışıklığı yaratır.
Code: her order type'ı gönderme
Python'da py-clob-client (v0.34.6) ile örnek 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 ile Node'da aynı işlemler: OrderType.FOK yerine clob.OrderType.GTC vb. kullanın; method createAndPostOrder'dür. Çok sonuçlu market'ler için ikinci argümanda negRisk flag'i (bölüm 11) ayarlanmalıdır - eksik olması yanlış exchange contract'a yönlendirir.












