Polymarket Bot Tutorial · บทที่ 11 จาก 32

วิธีการทำงานของตลาด NegRisk แบบ multi-outcome บน Polymarket: กลไก sum-to-1, flag negRisk ใน CLOB orders, ทำไม YES legs ภายใน NegRisk จึงใช้แทนกันไม่ได้ และแนวปฏิบัติที่ดีที่สุดในการ execution.

บทนี้ครอบคลุมอะไร

ตลาด NegRisk คือกลไกของ Polymarket สำหรับเหตุการณ์แบบ multi-outcome ที่เป็น mutually exclusive-เช่น ผู้สมัครเลือกตั้งปี 2024, ผู้ชนะ Premier League, สายการแข่งขันใน tournament. บอทส่วนใหญ่จัดการมันผิดในครั้งแรก เพราะการส่งออเดอร์ต้องใช้ flag ที่ถ้าขาดไปจะถูกละไว้แบบเงียบๆ บทนี้จะอธิบายทั้งกลไกและ production code path.

  • NegRisk หมายถึงอะไร (mutually exclusive Yes legs)
  • ทำไมยอดรวม YES จึงอยู่ใกล้ 1 USD
  • พารามิเตอร์ neg_risk ในการส่งออเดอร์
  • การ hedge ข้าม NegRisk legs
  • เมื่อไรที่ NegRisk arb ใช้ได้ผล (และเมื่อไรที่ไม่ได้ผล)
  • กรณีขอบของการ resolution
  • โค้ด: ส่ง NegRisk order

NegRisk หมายถึงอะไร (mutually exclusive Yes legs)

NegRisk (ย่อมาจาก "negative risk") คือกลไกของ Polymarket สำหรับเหตุการณ์ที่มีหลายผลลัพธ์ซึ่ง mutually exclusive-มีได้เพียงหนึ่งผลลัพธ์เท่านั้นที่ resolve เป็น YES ได้ การเลือกตั้งประธานาธิบดีปี 2024 เป็นหนึ่งเหตุการณ์แบบ NegRisk: ตำแหน่ง Trump-YES และ Harris-YES ไม่สามารถจ่ายผลตอบแทนพร้อมกันได้

เบื้องหลังการทำงาน: เหตุการณ์ NegRisk หนึ่งรายการมี parent question_id เดียว และมี N child markets โดยแต่ละตัวมี YES/NO ของตัวเอง exchange จะบังคับให้ sum-to-1 ในบรรดา YES legs ตอน resolution-มีเพียงหนึ่งตัวที่ resolve เป็น 1.0 และที่เหลือเป็น 0.0

จากมุมมองของบอท YES leg ของแต่ละผลลัพธ์จะเทรดเป็น token ของตัวเอง พร้อม order book และราคาของตัวเอง flag negRisk ใน order placement (ด้านล่าง) จะ route การเทรดไปยัง exchange contract เฉพาะของ NegRisk; ถ้าขาด flag นี้ ระบบจะส่งไปยัง standard CTF exchange และจะ fail ในการ settle อย่างถูกต้องแบบเงียบๆ

ทำไมยอดรวม YES จึงอยู่ใกล้ 1 USD

Arbitrageurs จะคอยทำให้ผลรวมของราคา YES ในทุก NegRisk legs อยู่ใกล้ ≈ 1.0 อย่างต่อเนื่อง ถ้า Trump-YES อยู่ที่ 0.55 และ Harris-YES อยู่ที่ 0.40 และไม่มีผู้สมัครรายอื่นที่แข่งขันได้ ส่วนที่ขาดไป 0.05 คือความน่าจะเป็นโดยนัยของ "ผลลัพธ์อื่นใด" เมื่อสัดส่วนที่ขาดมากกว่าความน่าจะเป็นหางที่โดยนัย จะเกิดโอกาส arb: ซื้อ YES legs ทุกตัวตามสัดส่วน ผลรวมต่ำกว่า 1.0 แล้วล็อกส่วนต่างไว้

ในทางปฏิบัติ arb นี้แข่งขันสูง-ส่วนลดที่เห็นได้มักอยู่ที่ 1-2 เซนต์ในเหตุการณ์ที่สภาพคล่องดี และหายไปภายในไม่กี่นาทีหลังเปิดตลาด arb นี้ยังถูกจำกัดด้วยสภาพคล่องด้วย: คุณอาจล็อกส่วนลดได้ $1k แต่ไม่ใช่ $20k

บอทส่วนใหญ่ไม่ได้ทำ NegRisk arb; แต่กำลังเทรด legs รายตัว และต้องเคารพ flag negRisk เพื่อให้ execution ถูกต้อง

พารามิเตอร์ neg_risk ในการส่งออเดอร์

ใน CLOB v2 SDK การส่งออเดอร์จะรับ flags object ที่มี boolean negRisk ค่านี้ต้องตรงกับประเภทของตลาด:

// 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 นี้ยังเป็นพารามิเตอร์ใน daemon op signature ที่บอท production ส่วนใหญ่ใช้:

{ op: 'buy', tokenID, price, size, neg_risk: true, order_type: 'FOK' }

source of truth คือ market.negRisk จาก Gamma API ต้องอ่านเสมอ; ห้าม hardcode เด็ดขาด ตลาด BTC ขึ้น/ลงคือ negRisk: false (binary); ตลาดผู้ชนะทัวร์นาเมนต์คือ negRisk: true (multi-outcome) การสลับสายส่งออเดอร์จะทำให้ออเดอร์ไปผิด exchange และเกิด transfer failure ตอน settlement

การ hedge ข้าม NegRisk legs

ถ้าคุณถือ Trump-YES ที่ 0.50 และอยาก hedge ความเสี่ยงหาก Trump แพ้ มีสองทางเลือกภายใน NegRisk

ซื้อ competing NO leg (เช่น Harris-NO ที่ 0.45) วิธีนี้จะจ่ายผลตอบแทนถ้า Harris แพ้ ซึ่งรวมถึงกรณีที่ Trump ชนะด้วย-เป็นแบบ asymmetric คือได้ payoff หาก Trump ชนะ แต่จะไร้ค่าถ้า Trump แพ้ให้ผู้สมัครคนที่สาม

ซื้อ competing YES legs ทั้งหมด ตามสัดส่วน หากพอร์ตของคุณบาลานซ์ครบถ้วน across the NegRisk legs ความเสี่ยงจะถูก hedge: จะมีเพียงหนึ่งตัวเท่านั้นที่จ่ายผลตอบแทน นี่คือสถานะ synthetic-cash

เครื่องมือ hedge ที่ ไม่ได้ ทำงานตามที่คาด: NO leg ของตลาดที่คุณถืออยู่เอง Trump-NO มีความสัมพันธ์กับ YES legs อื่นๆ แต่ไม่สมบูรณ์-ถ้าผลการตัดสินคือ "Other" ทั้ง Trump-YES และ Trump-NO ของคุณจะกลายเป็น 0 ทั้งคู่ NegRisk legs ไม่ใช่ binary ล้วนๆ

เมื่อไรที่ NegRisk arb ใช้ได้ผล (และเมื่อไรที่ไม่ได้ผล)

NegRisk arb แบบ "ผลรวมต่ำกว่า 1.0" ใช้ได้ผลเมื่อมีเงื่อนไขสามข้อ

  1. ทุก leg มีสภาพคล่อง: แต่ละ leg ที่คุณต้องซื้อมี depth อย่างน้อย $1k ที่ราคาที่ต้องการ Arb ต้องยิงหลาย order book พร้อมกัน; ถ้ามี leg ใด illiquid จะพังทั้งดีล
  2. spread แคบพอ: spread-tax สะสมรวมทุก leg ต้องน้อยกว่าส่วนลด ถ้ามีห้า legs ที่ spread 0.5c ต่อ leg ก็เท่ากับต้นทุน 2.5c; ถ้าส่วนลดมีแค่ 1.5c arb จะติดลบ
  3. คุณถือจนถึง resolution ได้: NegRisk arb คือ settlement arb คุณจะได้รับ payout ตอน parent event resolve; ถ้ามันอีก 6 เดือนข้างหน้า ทุนของคุณจะถูกล็อกไว้

สำหรับบอท 95% แล้ว NegRisk arb ไม่ใช่กลยุทธ์หลัก กลยุทธ์ที่เหลือจะเทรด legs รายตัว และ flag negRisk มีไว้เพื่อให้การ route order ถูกต้องเท่านั้น

กรณีขอบของการ resolution

มีสองกรณีขอบที่ควรรู้เมื่อถือสถานะ NegRisk จนถึง resolution

ผลลัพธ์แบบ "None of the above": บางเหตุการณ์ NegRisk มี leg "Other" หรือ "None of the above" แบบชัดเจน หากคำตอบจริงไม่ตรงกับ leg ที่ตั้งชื่อไว้ใดๆ ตัวนี้จะเป็นผู้ชนะ บอทที่ไม่ได้ model explicit Other leg บางครั้งจะมองว่าเป็นกรณีผิดปกติและพลาด payout

การ dispute resolution: การ resolve ของ NegRisk จะผ่าน UMA เหมือนตลาดอื่นๆ หากมีการ dispute ตลาดอาจค้าง unresolved 24-72 ชั่วโมง ในช่วงนี้ front-end อาจแสดงว่า "resolved" ทั้งที่ on-chain payouts ยังไม่ถูกตั้งค่า การอ่าน payoutNumerators บน CTF contract คือวิธีเดียวที่ปลอดภัยในการยืนยัน

โค้ด: ส่ง NegRisk order

ตัวอย่างเต็มใน Node สำหรับการส่งคำสั่งซื้อ YES leg ของ NegRisk

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);

บั๊กที่พบบ่อยที่สุดสำหรับผู้เริ่มสร้างบอท: ละเว้น negRisk: true ในตลาด NegRisk ออเดอร์จะถูกยอมรับโดย CLOB แต่ settlement จะล้มเหลว ต้องอ่าน market.negRisk จาก Gamma เสมอแล้วส่งต่อไปด้วย; ห้ามเดาจากชื่อคำถามอย่างเดียว

คำถามที่พบบ่อย

ตลาด NegRisk บน Polymarket คืออะไร?
คือตลาดแบบ multi-outcome ที่ YES legs เป็น mutually exclusive (มีเพียงหนึ่งตัวเท่านั้นที่ resolve เป็น YES ได้) ผลรวมของราคา YES ทั้งหมดจะอยู่ใกล้ 1 USD เพราะจะมีเพียงหนึ่งผลลัพธ์ที่ชนะ ตัวอย่าง: "2026 NBA Champion" (มีเพียงหนึ่งทีมชนะ), "Next Fed chair" (มีเพียงหนึ่งคน)
ฉันต้องตั้ง flag ในออเดอร์เพื่อเทรด NegRisk ไหม?
ต้อง ตั้งใจส่งคำสั่งซื้อสำหรับตลาด NegRisk จะต้องมี neg_risk: true (Python: ส่งไปที่ OrderArgs; Node: ส่งใน CreateOrderOptions) การลืม flag นี้จะทำให้ออเดอร์ถูกปฏิเสธ หรือแย่กว่านั้นคือถูกส่งไปยัง order book ผิด เราเคยเจอบั๊กนี้จริงใน production - commit 06deaef ในประวัติ trader ของเรา
ฉันสามารถ arbitrage NegRisk legs ที่รวมกันต่ำกว่า 1 ได้ไหม?
ได้ - ถ้า YES legs ทั้งหมดรวมกันต่ำกว่า 1.00 หลังหักค่าธรรมเนียม การซื้อทุก leg จะล็อกกำไรที่รับประกันไว้ แต่ arbitrage นี้พบได้น้อยมาก และมักถูก sniped ภายในไม่กี่วินาทีโดยบอทที่เร็วกว่า ควรมองเป็นความน่าสนใจ มากกว่ากลยุทธ์
ตลาด NegRisk resolve อย่างไร?
ใช้กระบวนการ UMA optimistic oracle เหมือนตลาด Polymarket อื่นๆ leg ที่ชนะจะจ่าย 1 USD ต่อ share ส่วน leg ที่แพ้จะจ่าย 0 โดยทั่วไป resolution จะ settle เหตุการณ์ NegRisk ทั้งหมดในครั้งเดียว
ค่าธรรมเนียมของ NegRisk ต่างจากตลาด binary ไหม?
ใช้ตารางค่าธรรมเนียมเดียวกับ binary - 0% maker, 0.75-1.80% taker ตามหมวดหมู่ maker rebate ก็ยังใช้ได้ ความแตกต่างในทางปฏิบัติเพียงอย่างเดียวคือคุณต้องจัดการ N order books แทนที่จะเป็น 1
ฉันสามารถ hedge ตำแหน่ง YES โดยซื้อ legs อื่นของ NegRisk ได้ไหม?
ได้ - นี่คือ hedge แบบเฉพาะของ NegRisk ถ้าคุณ long อยู่หนึ่ง leg และต้องการล็อก PnL ปัจจุบันไว้ ให้ซื้อ legs อื่นตามสัดส่วน ต้นทุนสุทธิควรเป็น (1 - ราคา YES leg ของคุณ) โดยหักค่าธรรมเนียมออก เราไม่แนะนำให้ใช้เป็นกลยุทธ์หลัก เพราะค่าธรรมเนียมมักกิน edge ของ hedge หมด