Polymarket Bot Tutorial · Chương 11 trong 32
Cách các market nhiều outcome NegRisk hoạt động trên Polymarket: cơ chế tổng bằng 1, cờ negRisk trong CLOB orders, vì sao các YES legs trong NegRisk không thể thay thế cho nhau, và các best practices khi execution.
Chương này đề cập đến gì
NegRisk markets là cơ chế của Polymarket cho các sự kiện nhiều outcome loại trừ lẫn nhau - các ứng viên bầu cử 2024, đội vô địch Premier League, các tournament brackets. Hầu hết bot đều fail trong lần đầu xử lý đúng vì việc đặt order yêu cầu một flag sẽ bị drop một cách âm thầm nếu thiếu. Chương này bao gồm cơ chế hoạt động và production code path.
- NegRisk có nghĩa là gì (mutually exclusive Yes legs)
- Vì sao tổng YES luôn gần 1 USD
- Tham số neg_risk trong order placement
- Hedging giữa các NegRisk legs
- Khi nào NegRisk arb hoạt động (và khi nào không)
- Các edge case khi resolution
- Code: đặt một NegRisk order
NegRisk có nghĩa là gì (mutually exclusive Yes legs)
NegRisk (viết tắt của "negative risk") là cơ chế của Polymarket cho các sự kiện có nhiều outcome loại trừ lẫn nhau - chỉ một outcome có thể resolve YES. Cuộc Bầu cử Tổng thống 2024 là một sự kiện có NegRisk: một position Trump-YES và một position Harris-YES không thể cùng được payout.
Bên trong hệ thống: một NegRisk event duy nhất có một parent question_id và N child markets, mỗi market có YES/NO riêng. Sàn giao dịch enforce tổng bằng 1 trên các YES legs tại thời điểm resolution - chính xác một leg resolve thành 1.0 và các leg còn lại là 0.0.
Ở góc nhìn của bot, YES leg của mỗi outcome được giao dịch như một token riêng, với order book và price riêng. Cờ negRisk trong order placement (bên dưới) sẽ route giao dịch tới NegRisk-specific exchange contract; nếu thiếu cờ này, giao dịch sẽ được gửi tới standard CTF exchange và sẽ silently fail khi settlement.
Vì sao tổng YES luôn gần 1 USD
Arbitrageurs liên tục giữ tổng giá YES trên tất cả NegRisk legs ở mức ≈ 1.0. Nếu Trump-YES là 0.55 và Harris-YES là 0.40, và không có ứng viên cạnh tranh nào khác, thì phần thiếu 0.05 xấp xỉ là implied probability của "any other outcome." Khi phần thiếu này vượt quá tail probability ngụ ý, sẽ xuất hiện cơ hội arb: mua tất cả YES legs theo tỷ lệ, tổng thấp hơn 1.0, khóa lợi nhuận chênh lệch.
Trong thực tế, arb này có tính cạnh tranh rất cao - mức discount nhìn thấy thường chỉ 1-2 cent trên các event thanh khoản cao, và biến mất trong vài phút sau khi mở. Arb cũng bị giới hạn bởi thanh khoản: bạn có thể khóa $1k discount nhưng không phải $20k.
Phần lớn bot không làm NegRisk arb; chúng giao dịch từng leg riêng lẻ và chỉ cần tôn trọng cờ negRisk để execution chính xác.
Tham số neg_risk trong order placement
Trong các SDK CLOB v2, order placement nhận một flags object với boolean negRisk. Giá trị này phải khớp với loại market:
// Node (CLOB v2)
await client.createAndPostOrder(
{ tokenID, price: 0.45, size: 10, side: Side.BUY },
{ tickSize: '0.01', negRisk: true }, // <-- TRUE for NegRisk
OrderType.FOK
);
Flag này cũng là một tham số trong daemon op signature mà hầu hết production bot sử dụng:
{ op: 'buy', tokenID, price, size, neg_risk: true, order_type: 'FOK' }
Nguồn dữ liệu chuẩn: market.negRisk từ Gamma API. Luôn đọc nó; không bao giờ hardcode. Một market BTC tăng/giảm là negRisk: false (binary); một market vô địch giải đấu là negRisk: true (multi-outcome). Nhầm lẫn ở đây sẽ gửi order tới sai exchange và gây transfer failures khi settlement.
Hedging giữa các NegRisk legs
Nếu bạn đang nắm Trump-YES ở 0.50 và muốn hedge trước rủi ro Trump thua, có hai lựa chọn trong NegRisk.
Mua một competing NO leg (ví dụ Harris-NO ở 0.45). Cách này sẽ payout nếu Harris thua, bao gồm cả trường hợp Trump thắng. Bất đối xứng - có payoff nếu Trump thắng nhưng vô giá trị nếu Trump thua trước một ứng viên thứ ba.
Mua tất cả competing YES legs theo tỷ lệ. Nếu portfolio của bạn được cân bằng hoàn toàn giữa các NegRisk legs, exposure của bạn sẽ được hedge: chính xác một leg sẽ payout. Đây là synthetic-cash position.
Công cụ hedge mà KHÔNG hoạt động như mong đợi: một NO leg trên market hiện tại của bạn. Trump-NO có tương quan với các YES legs khác nhưng không hoàn hảo - nếu resolution là "Other" thì cả Trump-YES và Trump-NO của bạn đều về 0. NegRisk legs không phải binary thuần túy.
Khi nào NegRisk arb hoạt động (và khi nào không)
NegRisk arb kiểu "tổng nhỏ hơn 1.0" hoạt động khi ba điều kiện sau thỏa mãn.
- Tất cả legs đều có thanh khoản: mỗi leg bạn cần mua phải có ít nhất $1k depth tại mức giá bạn cần. Arb đòi hỏi phải khớp nhiều books cùng lúc; chỉ một leg kém thanh khoản là làm hỏng toàn bộ trade.
- Spread đủ hẹp: tổng chi phí spread-tax trên tất cả legs phải nhỏ hơn discount. Năm legs với spread 0.5c mỗi leg sẽ tạo ra 2.5c chi phí; nếu discount chỉ 1.5c, arb là âm.
- Bạn có thể nắm giữ đến khi resolution: NegRisk arb là settlement arb. Bạn nhận payout khi parent event resolve; nếu còn 6 tháng nữa mới resolve, vốn của bạn sẽ bị khóa.
Với 95% bot, NegRisk arb không phải chiến lược chính. Các chiến lược còn lại giao dịch từng leg riêng lẻ và cờ negRisk chỉ tồn tại để đảm bảo order được route đúng.
Các edge case khi resolution
Có hai edge case cần lưu ý khi giữ vị thế NegRisk qua giai đoạn resolution.
Các outcome "None of the above": một số NegRisk event có leg "Other" hoặc "None of the above" rõ ràng. Nếu câu trả lời thực tế không khớp với bất kỳ leg nào đã đặt tên, đây sẽ là leg thắng. Bot không mô hình hóa leg Other rõ ràng đôi khi xem đây là trường hợp suy biến và bỏ lỡ payout.
Disputed resolutions: resolution của NegRisk đi qua UMA giống như bất kỳ market nào khác. Nếu bị dispute, market có thể ở trạng thái chưa resolve trong 24-72 giờ. Trong khoảng thời gian này, front-end có thể hiển thị "resolved" trong khi on-chain payouts vẫn chưa được set. Đọc payoutNumerators trên CTF contract là cách an toàn duy nhất để xác nhận.
Code: đặt một NegRisk order
Ví dụ đầy đủ bằng Node để đặt lệnh mua NegRisk YES leg.
import { ClobClient, Side, OrderType } from "@polymarket/clob-client-v2";
import { Wallet } from "ethers";
const c = new ClobClient({
host: "https://clob.polymarket.com", chain: 137,
signer: new Wallet(process.env.PRIVATE_KEY),
creds: { key: K, secret: S, passphrase: P },
signatureType: 2,
funderAddress: process.env.POLY_FUNDER,
});
// market.negRisk === true (verified via Gamma earlier)
const resp = await c.createAndPostOrder(
{ tokenID: "<YES_TOKEN_ID>", price: 0.42, size: 25, side: Side.BUY },
{ tickSize: "0.01", negRisk: true },
OrderType.FOK
);
console.log(resp.status, resp.orderID);
Bug phổ biến nhất đối với người mới xây dựng bot: bỏ qua negRisk: true trên một NegRisk market. Order vẫn được CLOB chấp nhận nhưng settlement sẽ fail. Luôn đọc market.negRisk từ Gamma và truyền nó qua; đừng bao giờ đoán từ tiêu đề câu hỏi.










