FAK order explained: how Fill-And-Kill works on Polymarket
A deep-dive for active traders into how a FAK order works on Polymarket, execution mechanics, edge cases, and practical tactics for intra-market arb and tight markets.
FAK order explained: how Fill-And-Kill works on Polymarket
Câu trả lời ngắn: lệnh FAK (Fill-And-Kill) trên Polymarket là một chỉ thị kiểu market cố gắng thực hiện ngay lập tức trên CLOB và huỷ phần chưa khớp. Hướng dẫn này, dành cho các trader hoạt động tích cực, giải thích cơ chế thực hiện, hành vi của FAK ở mức tick, các tình huống biên, và các chiến thuật thực tế cho arbitrage intra-market và thị trường hẹp.
Những điểm chính
- FAK thực hiện ngay lập tức trên các lệnh nghỉ (resting orders) trong CLOB của Polymarket và huỷ bất kỳ phần lượng còn lại; nghĩ tới nó như một market order có cơ chế tự động huỷ phần dư.
- Helper của CLOB trong SDK cung cấp một utility duy nhất createMarketOrder trả về hành vi FAK; FAK có cơ chế bảo vệ trượt giá so với việc dùng market fills thô.
- Thay đổi gần mức tick và kích thước tick (0.01 vs 0.001) có thể thay đổi hiệu quả thực thi. Luôn kiểm tra tick size và midpoint trước khi gửi FAK.
- FAK loại bỏ rủi ro maker nhưng khiến bạn đối mặt với partial fills, slippage, phí taker, rủi ro resolution và tranh chấp oracle — không bao giờ gọi thực thi FAK là "risk-free" nếu không liệt kê các rủi ro này.
- Với arbitrage intra-market, FAK hữu dụng để chộp các edge thoáng qua, nhưng bạn phải dự trù cho partial fills, phí và thời gian thanh toán.
Tại sao Polymarket dùng FAK (lý do thực tế)
CLOB của Polymarket hỗ trợ cả limit order và một market-order helper hoạt động như FAK. Thiết kế này phù hợp với hướng tập trung vào UX và giao dịch không phí gas: đa số người dùng mong đợi thực thi tức thì khi họ chọn routing kiểu market, nhưng giao thức cũng phải tránh để lại các lệnh mở vô thời hạn do market order quá hung hãn. FAK đáp ứng cả hai yêu cầu — nó thực thi ngay và huỷ phần còn lại, ngăn không cho các lệnh hung hãn tồn trên sổ lệnh.
Cơ chế thực thi (từng bước)
- Bạn ra lệnh cho client hoặc SDK tạo một market order. Helper phát hành một FAK tới CLOB.
- Lệnh đi dọc sổ lệnh, khớp với các limit order nghỉ theo các mức giá tăng dần (với lệnh mua) hoặc giảm dần (với lệnh bán), cho đến khi hoặc là lượng mục tiêu được khớp, hoặc không còn thanh khoản hợp lệ ở các mức giá cho phép.
- Bất kỳ lượng nào không được khớp ngay sẽ bị huỷ (killed). Bạn sẽ không để lại một limit order hung hãn trên sổ lệnh.
- Sàn tính phí taker trên lượng được thực hiện. Maker fees là zero đối với thanh khoản nghỉ mà bạn chạm tới.
Kích thước tick và ảnh hưởng của nó lên FAK
Polymarket dùng tick size động. Thông thường là $0.01, nhưng khi giá đi gần tới các cực (trên 0.96 hoặc dưới 0.04) thì tick sẽ siết lại thành $0.001. Hai hệ quả thực tế:
- Các bước giá bạn có thể vượt khi đi dọc sổ lệnh thay đổi. Ở tick siết, một FAK có thể thực thi ở các điểm giá tinh vi hơn, giảm trượt giá cho các thị trường nghiêng mạnh.
- Midpoint và edge cảm nhận có thể thay đổi khi tick size thay đổi. Luôn kiểm tra tick hiện tại trước khi định kích thước FAK.
Slippage, partial fills và vai trò của helper trong SDK
FAK thiết kế để tránh để lại lượng mở, nhưng nó không đảm bảo khớp đầy. Partial fills xảy ra khi độ sâu sổ lệnh nghỉ không đủ cho kích thước của bạn vào thời điểm gửi. Helper createMarketOrder trong SDK thường trả về lượng đã thực hiện và giá trung bình để bạn có thể phản ứng bằng chương trình.
Hai mẫu phổ biến trader hay dùng:
- FAK kích thước nhỏ, lặp lại: chia mục tiêu lớn thành nhiều FAK nhỏ và gửi liên tiếp nhanh để tiêu thụ thanh khoản hiển thị đồng thời giảm tác động giá trên mỗi lệnh.
- FAK đơn hung hãn: dùng khi bạn cần lộ trình tiếp xúc ngay lập tức và chấp nhận khả năng trượt giá và phí taker cao.
Phí và kinh tế
Polymarket áp dụng phí taker theo danh mục (biến đổi, hiện nằm trong khoảng 0% đến 1.8% theo băng phí của nền tảng). Maker fees là zero. Với arbitrage ngắn hạn nơi biên rất mỏng, hãy tính phí taker một cách rõ ràng vào phép tính edge. Nếu bạn định tuyến lệnh qua một Builder, builder fees (tính bằng basis points) và các hạng mục trong Builder Program cũng có thể ảnh hưởng đến kinh tế giao dịch.
Rủi ro bạn phải tính tới
Không bao giờ gọi thực thi FAK là "risk-free" nếu không liệt kê các rủi ro sau:
- Resolution và tranh chấp oracle: tranh chấp UMA có thể tạm dừng việc thanh toán và thay đổi thời điểm ghi nhận P&L.
- Slippage và partial fills: FAK có thể khớp một phần hoặc ở giá tệ hơn kỳ vọng trong khi huỷ phần dư.
- Thay đổi phí và builder fees: phí taker và builder fees làm giảm edge thực nhận.
- Thời gian thanh toán và chậm trễ merge/redeem: token là ERC-1155 và yêu cầu thao tác CTF để tạo và redeem bộ token hoàn chỉnh.
- Rủi ro smart-contract và vận hành: mặc dù Polymarket tài trợ gas qua Relayer, lỗi hợp đồng thông minh hoặc sự cố relayer là rủi ro ở mức giao thức.
Các chế độ lỗi phổ biến và cách phát hiện
- Khớp một phần ngay lập tức: kết quả trả về cho thấy lượng nhỏ hơn yêu cầu — xử lý bằng logic chương trình bằng cách đánh giá lại phần còn thiếu.
- Không khớp nào (zero fill): sổ lệnh thay đổi trước khi bạn gửi. Kiểm tra best_bid_ask và last_trade_price qua Market WebSocket hoặc các đọc của CLOB và cân nhắc logic gửi lại.
- Thay đổi tick bất ngờ: nếu tick siết lại trong khi chiến lược của bạn giả định bước $0.01, hồ sơ trượt giá kỳ vọng có thể bị vô hiệu. Đăng ký sự kiện tick_size_change trên Market WS.
Chiến thuật thực tế cho arbitrage và thị trường hẹp
- Với arbitrage binary intra-market (mua hai bên khi Σ bestAsk < $1.00), ưu tiên gửi FAK nhỏ đồng thời cho cả hai chân để tránh một chân khớp trong khi chân kia thì không. Nếu một chân chỉ khớp một phần, bạn có thể bị dư long hoặc short — sẵn sàng hedge hoặc unwind.
- Giám sát sổ lệnh ở off-chain: dùng Market WS best_bid_ask và last_trade_price để đảm bảo thanh khoản bạn mong đợi còn trước khi gửi FAKs.
- Khi giao dịch gần resolution hoặc trong spread rất hẹp, giảm kích thước lệnh và tăng tần suất. Hành vi spread chóng vánh trong thị trường thanh khoản và có thể đóng lại trong vài giây.
- Tính phí taker và builder fees khi bạn tính edge. Một edge danh nghĩa có thể biến mất sau khi tính phí và rủi ro partial-fill.
Ảnh hưởng tới chiến lược giao dịch của bạn
Nếu bạn giao dịch thường xuyên hoặc chạy bot arbitrage, coi FAK là primitive mặc định cho thực thi kiểu market trên Polymarket. Hành vi huỷ ngay lập tức ngăn bạn để lại các lệnh thụ động được định giá hung hãn trên sổ lệnh, nhưng nó cũng đưa vào sự không chắc chắn về thực thi. Xây dựng logic để:
- Kiểm tra tick size và best_bid_ask ngay trước mỗi FAK.
- Giới hạn kích thước lệnh so với độ sâu hiển thị; ưu tiên nhiều FAK nhỏ hơn một FAK lớn khi sổ lệnh mỏng.
- Ghi lại lượng đã thực hiện và giá trung bình cho kế toán sau giao dịch; helper của SDK trả về các giá trị này.
- Luôn bao gồm phí taker và builder fees trong kiểm tra lợi nhuận và tính đến rủi ro resolution cùng thời gian thanh toán trong đối chiếu sau giao dịch.
Tài nguyên và đọc tiếp
- Polymarket CLOB explainer: /guides/polymarket-clob-explained
- Intra-market arbitrage mechanics: /guides/intra-market-binary-arbitrage-explained
- Full arbitrage primer: /guides/polymarket-arbitrage-complete-guide
Ghi chú kết
FAK order explained ngắn gọn: đó là một lệnh kiểu market FAK thực thi ngay trên CLOB của Polymarket và huỷ mọi phần dư. Dùng nó để nắm bắt edge thoáng qua, nhưng thiết kế để đối phó với partial fills, thay đổi tick và phí.
Frequently asked questions
What's the difference between a FAK and a plain market order on Polymarket?
Polymarket exposes a market-order helper that implements Fill-And-Kill semantics: it executes immediately against resting liquidity and cancels any unfilled remainder. In practice, that means you won't leave an aggressive limit order on the book after submission; residual quantity is cancelled. The SDK's createMarketOrder returns executed quantity and average price so you can handle partial fills.
How should I size FAK orders for arbitrage?
Size FAKs against visible book depth. When the spread is thin, break your target into multiple small FAKs to reduce per-order price impact. For binary intra-market arbitrage, submit the two legs simultaneously at sizes you can reasonably expect the top-of-book to fill; be prepared to hedge if one leg only partially fills.
Do FAK orders pay maker or taker fees?
FAK executions are treated as taker fills and are subject to Polymarket's taker fees (variable by category). Maker fees for resting liquidity are zero. If you route through a Builder, builder fees in basis points may also apply.
Can a FAK execution be reversed if UMA disputes resolution?
No — UMA disputes affect resolution and settlement timing after trading is complete. Trades executed with FAK are final on-chain; however, resolution disputes can delay redeem/settle operations and thus affect the timing of realized P&L.
How can I detect a tick-size change before sending a FAK?
Subscribe to the Market WS (wss://ws-subscriptions-clob.polymarket.com/ws/market) and listen for tick_size_change events. Also query the CLOB's public reads for current tick metadata. Adjust sizing and slippage expectations when ticks tighten from $0.01 to $0.001 near price extremes.
Các thuật ngữ tham chiếu
Hướng dẫn liên quan
Chỉ mang tính giáo dục. Không phải là tư vấn tài chính, pháp lý hoặc thuế. Polymarket có thể không khả dụng tại khu vực pháp lý của bạn.