آموزش Polymarket Bot · فصل 11 از 32
بازارهای چندنتیجهای NegRisk در Polymarket چگونه کار میکنند: مکانیزم sum-to-1، پرچم negRisk در سفارشهای CLOB، چرا YES legها در میان NegRisk قابل جایگزینی نیستند، و best practiceهای execution.
این فصل چه چیزهایی را پوشش میدهد
بازارهای NegRisk مکانیزم Polymarket برای رویدادهای چندنتیجهایِ mutually exclusive هستند - نامزدهای انتخابات 2024، برنده Premier League، جدولهای tournament. بیشتر botها بار اول نمیتوانند آنها را درست هندل کنند، چون ثبت order به یک flag نیاز دارد که اگر وجود نداشته باشد، بیسروصدا حذف میشود. این فصل mechanics و production code path را پوشش میدهد.
- NegRisk یعنی چه (YES legهای mutually exclusive)
- چرا مجموع YESها نزدیک 1 USD میماند
- پارامتر neg_risk در ثبت order
- Hedging در میان NegRisk legها
- چه زمانی NegRisk arb کار میکند (و چه زمانی نه)
- حالتهای edge در resolution
- کد: ثبت یک NegRisk order
NegRisk یعنی چه (YES legهای mutually exclusive)
NegRisk (مخفف "negative risk") مکانیزم Polymarket برای رویدادهایی با چند نتیجهی mutually exclusive است - فقط یکی میتواند YES resolve شود. انتخابات ریاستجمهوری 2024 یک رویداد با NegRisk بود: یک position با Trump-YES و یک position با Harris-YES نمیتوانند هر دو payout داشته باشند.
در پشت صحنه: یک event از نوع NegRisk یک parent question_id و N child market دارد، که هر کدام YES/NO مخصوص خود را دارند. exchange در زمان resolution جمع YES legها را به 1 enforce میکند - دقیقاً یکی 1.0 resolve میشود و بقیه 0.0.
از دید یک bot، YES leg هر outcome مثل token جداگانهای معامله میشود، با order book و price مخصوص خودش. پرچم negRisk در ثبت order (پایین) trade را به contract exchange مخصوص NegRisk هدایت میکند؛ اگر این پرچم نباشد، سفارش به standard CTF exchange میرود و در settlement بهدرستی settle نمیشود.
چرا مجموع YESها نزدیک 1 USD میماند
Arbitrageurها بهطور مداوم مجموع قیمتهای YES در همهی NegRisk legها را نزدیک ≈ 1.0 نگه میدارند. اگر Trump-YES برابر 0.55 باشد و Harris-YES برابر 0.40 و نامزد رقابتی دیگری هم وجود نداشته باشد، 0.05 باقیمانده تقریباً احتمال ضمنیِ "هر نتیجهی دیگر" است. وقتی این بخشِ جاافتاده از tail probability ضمنی بیشتر شود، یک فرصت arb وجود دارد: همهی YES legها را بهصورت proportional بخرید، مجموع را کمتر از 1.0 کنید، و اختلاف را قفل کنید.
در عمل arb رقابتی است - discount قابلمشاهده معمولاً در eventهای liquid فقط 1 تا 2 سنت است و اغلب ظرف چند دقیقه پس از باز شدن از بین میرود. arb همچنین به liquidity محدود است: ممکن است بتوانید 1 هزار دلار discount را قفل کنید، اما 20 هزار دلار نه.
بیشتر botها در حال انجام NegRisk arb نیستند؛ آنها legهای تکی را معامله میکنند و فقط برای correctness در execution باید به پرچم negRisk احترام بگذارند.
پارامتر neg_risk در ثبت order
در CLOB v2 SDKها، ثبت order یک flags object با boolean negRisk میگیرد. مقدار آن باید با نوع market match باشد:
// 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 همچنین یک parameter در signature عملیات daemon است که بیشتر production botها استفاده میکنند:
{ op: 'buy', tokenID, price, size, neg_risk: true, order_type: 'FOK' }
Source of truth: market.negRisk از Gamma API. همیشه آن را بخوانید؛ هرگز hardcode نکنید. یک بازار BTC-up/down negRisk: false است (binary)؛ یک بازار برندهی tournament negRisk: true است (multi-outcome). جابهجا شدن اینها سفارش را به exchange اشتباه میفرستد و در settlement باعث transfer failure میشود.
Hedging در میان NegRisk legها
اگر Trump-YES را در 0.50 نگه داشتهاید و میخواهید در برابر Trump loss hedging کنید، داخل NegRisk دو گزینه دارید.
خریدن یک competing NO leg (مثلاً Harris-NO در 0.45). این در صورتی payout میدهد که Harris ببازد، که شامل برنده شدن Trump هم میشود. Asymmetric است - اگر Trump ببرد payoff دارد، اما اگر Trump به یک نامزد سوم ببازد بیارزش است.
خریدن همهی competing YES legها بهصورت proportional. اگر portfolio شما در میان NegRisk legها کاملاً balanced باشد، exposure شما hedged است: دقیقاً یکی payout خواهد داد. این همان synthetic-cash position است.
ابزار hedging که آنطور که انتظار میرود کار نمیکند: یک NO leg روی market موجود خودتان. Trump-NO با دیگر YES legها correlated است اما نه بهطور کامل - اگر resolution "Other" باشد، هم Trump-YES و هم Trump-NO شما به 0 میرسند. NegRisk legها binary خالص نیستند.
چه زمانی NegRisk arb کار میکند (و چه زمانی نه)
NegRisk arb از نوع "sum to less than 1.0" وقتی کار میکند که سه شرط برقرار باشند.
- همهی legها liquid باشند: هر legی که باید بخرید باید حداقل 1 هزار دلار depth در price موردنیاز شما داشته باشد. Arb نیاز دارد چندین book را همزمان hit کند؛ یک leg illiquid کل trade را خراب میکند.
- Spread بهاندازهی کافی تنگ باشد: مجموع spread-tax روی همهی legها باید کمتر از discount باشد. پنج leg با spread نیمسنتی هرکدام، در مجموع 2.5 سنت هزینه ایجاد میکند؛ اگر discount برابر 1.5 سنت باشد، arb منفی است.
- بتوانید تا زمان resolution نگه دارید: NegRisk arb یک settlement arb است. payout را وقتی دریافت میکنید که parent event resolve شود؛ اگر این زمان 6 ماه بعد باشد، capital شما قفل میشود.
برای 95٪ botها، NegRisk arb استراتژی نیست. استراتژیهای باقیمانده legهای تکی را معامله میکنند و negRisk flag فقط برای این است که order درست route شود.
حالتهای edge در resolution
دو حالت edge که هنگام نگهداشتن positionهای NegRisk تا زمان resolution باید حواستان به آنها باشد.
نتیجههای "None of the above": بعضی از eventهای NegRisk شامل یک leg صریح "Other" یا "None of the above" هستند. اگر پاسخ واقعی با هیچ leg نامگذاریشدهای match نشود، این leg برنده است. botهایی که leg صریح Other را model نمیکنند، گاهی آن را یک حالت degenerate در نظر میگیرند و payout را از دست میدهند.
Disputed resolutionها: resolution در NegRisk هم مثل هر market دیگری از طریق UMA انجام میشود. اگر disputed شود، market ممکن است 24 تا 72 ساعت unresolved بماند. در این بازه، front-end ممکن است "resolved" نشان دهد در حالیکه on-chain payoutها هنوز تنظیم نشدهاند. خواندن payoutNumerators روی contract CTF تنها راه مطمئن برای تأیید است.
کد: ثبت یک NegRisk order
نمونه کامل Node برای ثبت buy روی یک 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 برای سازندگان تازهکار: حذف negRisk: true روی یک market از نوع NegRisk. سفارش توسط CLOB پذیرفته میشود اما settlement شکست میخورد. همیشه market.negRisk را از Gamma بخوانید و آن را pass کنید؛ هرگز به حدس زدن از روی عنوان question تکیه نکنید.
سؤالات متداول
neg_risk: true باشند (Python: به OrderArgs بدهید؛ Node: در CreateOrderOptions بگذارید). فراموش کردن این flag باعث رد شدن order میشود یا، بدتر، order روی order book اشتباه ثبت میشود. ما دقیقاً همین bug را در production داشتیم - commit 06deaef در تاریخچه trader ما.













