บทเรียนบอท โพลีมาร์เก็ต · บทที่ 3 จาก 32

เลือก bot stack สำหรับ โพลีมาร์เก็ต ของคุณ: Python (py-clob-client 0.34.6), Node.js (@polymarket/clob-client-v2 v1.0.2), หรือ Rust (ไม่มี official SDK, สร้างบน ethers-rs) ข้อดี ข้อเสีย latency และ code samples

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

การเลือกภาษาแทบไม่ได้สำคัญเท่าที่ผู้พัฒนาส่วนใหญ่คิด โพลีมาร์เก็ต เปิดใช้งาน REST และ WebSocket endpoints เดียวกันสำหรับทุกภาษา; การเลือก SDK ส่วนใหญ่จึงเป็นเรื่องของปริมาณ glue code ที่คุณต้องเขียนเอง Python และ Node มี official SDK ที่ดูแลโดยทีมงานแล้ว; Rust ไม่มี แต่ก็ใช้งานได้สำหรับ hot path บทนี้จะไล่ trade-off ต่างๆ แสดง task เดียวกันคือ "fetch order book" ในแต่ละภาษาเพื่อให้เห็นความต่างชัดเจน และปิดท้ายด้วย mixed-stack pattern ที่บอท production ส่วนใหญ่ลงเอยใช้จริง

  • กรอบการตัดสินใจ
  • Python (ตัวเลือกเริ่มต้น)
  • Node.js (นักพัฒนาฟูลสแตก)
  • Rust (เส้นทางร้อนที่ไวต่อความหน่วง)
  • คำสั่งติดตั้งของแต่ละสแตก
  • Code skeleton: fetch order book in 3 languages
  • เมื่อไรควรผสมสแตก (ชั้นควบคุม Python + เส้นทางร้อน Rust)

กรอบการตัดสินใจ

สามคำถามนี้ช่วยตัดสินการเลือก stack ได้ราว 90%

  1. คุณมีทักษะเดิมที่แข็งแรงอยู่แล้วไหม? ถ้าคุณเขียน Python ทุกวัน ก็เขียน bot ด้วย Python ถ้าคุณเขียน TypeScript ทุกวัน ก็เขียน bot ด้วย Node ความต่างด้าน SDK quality ด้านล่างเป็นเรื่องจริง แต่เล็กกว่าต้นทุนของการฝืนใช้ภาษาที่ไม่คุ้นเคย
  2. กลยุทธ์ของคุณต้องการ latency สูงหรือไม่? ถ้า edge ของคุณขึ้นอยู่กับการตอบสนองภายใน 50ms (ตลาด crypto 5 นาที, market-making ระหว่างข่าว) hot path จะได้ประโยชน์จาก Rust หรือ Go กลยุทธ์ส่วนใหญ่ไม่ต้องการระดับนี้
  3. คุณจะรันมากกว่าหนึ่งกลยุทธ์หรือไม่? Python process เดียวสามารถดูแล 10-20 markets ได้สบายกว่ามาก ถ้าเกินกว่านั้น async Node หรือการแยก process ใน Python จะสเกลได้ดีกว่า

ค่าเริ่มต้นที่ซื่อสัตย์สำหรับ bot ตัวแรกคือ Python เปลี่ยนก็ต่อเมื่อข้อจำกัดที่วัดได้บังคับให้ต้องเปลี่ยน

Python (ตัวเลือกเริ่มต้น)

Python เป็น default เพราะ SDK ครบที่สุดและวงจรการ iterate เร็วที่สุด py-clob-client เวอร์ชัน 0.34.6 (พฤษภาคม 2026) ครอบคลุมทุก CLOB v2 endpoint ที่สำคัญ: market และ limit orders, FOK/FAK/GTC variants, การอ่าน order book, การอ่าน balance/allowance และ direct chain operations ผ่าน web3.py

ข้อดี: SDK mature, วิเคราะห์ข้อมูลด้วย pandas ได้ง่าย, community ใหญ่, ใช้ web3.py สำหรับการอ่าน on-chain ได้ ข้อเสีย: async ergonomics ค่อนข้างอึดอัดเมื่อเทียบกับ JavaScript, GIL จำกัดการเร่งความเร็วแบบ multi-core (มักไม่สำคัญสำหรับ bot ที่เป็น I/O-bound), เวลาเริ่มต้นใน cold container ช้า

แนะนำสำหรับ: 80% ของผู้พัฒนา โดยเฉพาะคนที่กลยุทธ์เกี่ยวข้องกับ backtesting, statistical analysis หรือ data work ควบคู่กับ execution

Node.js (นักพัฒนาฟูลสแตก)

Node.js เป็น stack ที่รองลงมาที่ support ดีที่สุด @polymarket/clob-client-v2 เวอร์ชัน 1.0.2 ครอบคลุม endpoints เดียวกับ Python SDK พร้อม TypeScript types ครบถ้วน Async เป็น native และเร็ว; การจัดการ WebSocket ทำได้ดีเยี่ยม

ข้อดี: async story ดีที่สุด, native TypeScript types, ecosystem สำหรับ HTTP + WS ใหญ่, deploy บน Node runtime เดียวกับ web dashboard ได้ง่าย ข้อเสีย: ความแม่นยำของตัวเลขต้องใช้ BigInt หรือจัดการเป็น string สำหรับ token ID ขนาดใหญ่ (ERC-1155 IDs มีขนาด 256-bit), data tools ที่เทียบกับ pandas ยังอ่อนกว่า

แนะนำสำหรับ: ผู้พัฒนาที่ดูแล JavaScript stack อยู่แล้วและต้องการ runtime เดียว รวมถึงคนที่สร้าง dashboard ไปพร้อมกับ bot - การแชร์ types ระหว่าง bot core กับ Next.js dashboard จะช่วยตัด bug ได้หลายประเภท

Rust (เส้นทางร้อนที่ไวต่อความหน่วง)

Rust ไม่มี official โพลีมาร์เก็ต SDK คุณต้องสร้างบน V2 REST และ WebSocket APIs โดยตรงด้วย reqwest (HTTP), tokio-tungstenite (WebSocket), และ ethers-rs หรือ alloy สำหรับการ signing งาน setup ประมาณสองวัน เทียบกับ 30 นาทีใน Python

ข้อดี: EIP-712 signing แบบ native โดยไม่ต้องมี JS subprocess, สร้าง order ได้ระดับ sub-millisecond, memory profile คงที่ภายใต้ load, ไม่มี GC pauses ข้อเสีย: ไม่มี SDK หมายความว่าคุณต้อง implement เองในส่วนที่ผู้ใช้ Python ได้ฟรี เช่น การ parse clobToken ID, การ validate response schema, การจัดการ salt/nonce ความได้เปรียบด้าน latency อยู่ที่ประมาณ 20-100ms เมื่อเทียบกับ Python ที่ปรับจูนแล้ว ซึ่งมีความหมายเฉพาะกับกลยุทธ์ sub-second เท่านั้น

แนะนำสำหรับ: hot path ของ market-making bot หรือส่วนยิงเทรดของ news-arb bot แทบไม่ควรใช้ทั้งบอทเป็น Rust ทั้งหมด

คำสั่งติดตั้งของแต่ละสแตก

คำสั่งขั้นต่ำเพื่อให้ได้ signed order ที่ใช้งานได้กับ mainnet (CLOB v2 endpoint เดียว)

Python:

python -m venv venv && source venv/bin/activate
pip install py-clob-client==0.34.6 web3 python-dotenv
# Set POLYGON_RPC, PRIVATE_KEY, POLY_FUNDER in .env

Node:

npm init -y
npm install @polymarket/[email protected] ethers dotenv
# Set POLYGON_RPC, PRIVATE_KEY, POLY_FUNDER in .env

Rust:

cargo new --bin pmt
cd pmt
cargo add tokio reqwest serde serde_json ethers alloy tungstenite tokio-tungstenite
# Hand-write signer + endpoint client; no SDK shortcut.

Time-to-first-order: ~10 min สำหรับ Python, ~15 min สำหรับ Node, ~4-8 ชั่วโมงสำหรับ Rust

Code skeleton: fetch order book in 3 languages

งานเดียวกัน - ดึง order book สำหรับ โพลีมาร์เก็ต token - ในแต่ละ stack ทั้งสามแบบจะเรียก CLOB v2 REST endpoint เดียวกัน

Python (py-clob-client):

from py_clob_client.client import ClobClient
client = ClobClient(host="https://clob.polymarket.com", chain_id=137)
book = client.get_order_book("<token_id>")
print(book.bids[:3], book.asks[:3])

Node (@polymarket/clob-client-v2):

import { ClobClient } from "@polymarket/clob-client-v2";
const c = new ClobClient({ host: "https://clob.polymarket.com", chain: 137 });
const book = await c.getOrderBook("<token_id>");
console.log(book.bids.slice(0,3), book.asks.slice(0,3));

Rust (direct HTTP):

let url = format!("https://clob.polymarket.com/book?token_id={}", token);
let book: serde_json::Value = reqwest::get(&url).await?.json().await?;
println!("{:?} {:?}", &book["bids"][..3], &book["asks"][..3]);

รูปแบบ response เหมือนกันทั้งสามแบบ ต้นทุนของ Rust อยู่ตรงส่วนอื่นแทบทั้งหมด - signing, order construction, error handling - ไม่ใช่ใน read path

เมื่อไรควรผสมสแตก (ชั้นควบคุม Python + เส้นทางร้อน Rust)

pattern ที่ production bots จำนวนมากลงเอยใช้: Python สำหรับทุกอย่างที่เกี่ยวกับการตัดสินใจ และ Rust สำหรับ leg การ execute ระดับมิลลิวินาที

Architecture: Python process อ่าน market state, รัน strategy logic และเขียน small command file (เช่น {"action":"buy","token":"...","size":10,"price":0.45}) ไปยัง Unix socket Rust daemon จะฟัง socket นั้น, sign order, แล้วส่งไปยัง CLOB Python process อาจช้าได้และใช้งานสะดวก ส่วน Rust daemon จะเร็วและเล็ก

จุดสำคัญคือ handoff: เมื่อแยกขั้นตอน signed-order ออกไปแล้ว ก็ได้ประโยชน์จากการรับมือกับ crash budget ของ Python โดยไม่เสีย latency เราใช้ pattern นี้ใน production bots ของเราเอง - Python ส่ง intention, Node daemon บน /tmp/clob.sock จัดการ signing Node version ของ daemon ใช้ได้ดีสำหรับ sub-100ms; Rust จะคุ้มจริงก็ต่ำกว่า 50ms

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

py-clob-client ใช้งานกับโพลีมาร์เก็ต V2 ได้หรือไม่?
ได้ py-clob-client 0.34.6 (เวอร์ชันที่เราใช้งานใน production บน VPS ของเรา ณ เดือนพฤษภาคม 2026) ใช้กับ V2 ได้ และทำงานร่วมกับ pUSD collateral migration ได้ แพ็กเกจติดตั้งผ่าน "pip install py-clob-client"
official โพลีมาร์เก็ต SDK สำหรับ Node.js คืออะไร?
@polymarket/clob-client-v2 (ปัจจุบัน v1.0.2 ณ เดือนพฤษภาคม 2026) "v2" ในชื่อแพ็กเกจมีความสำคัญ - แพ็กเกจเก่า @polymarket/clob-client เป็น V1 และไม่แนะนำสำหรับโปรเจกต์ใหม่ ติดตั้งผ่าน "npm install @polymarket/clob-client-v2"
มี official โพลีมาร์เก็ต SDK สำหรับ Rust ไหม?
ไม่มี ณ เดือนพฤษภาคม 2026 ยังไม่มี official Rust SDK จากโพลีมาร์เก็ต ผู้ใช้ Rust จะสร้างโดยตรงบน V2 REST และ WebSocket APIs โดยใช้ ethers-rs (สำหรับ EIP-712 signing) และ reqwest หรือ hyper (สำหรับ HTTP/WS) ซึ่งต้องเขียนโค้ดมากกว่า แต่ latency และ concurrency ที่ได้คุ้มสำหรับ market making
ฉันใช้ Go ทำ โพลีมาร์เก็ต bot ได้ไหม?
ได้ ในทางเทคนิค - Go มี HTTP และ Ethereum libraries ที่ดี (go-ethereum) แต่ไม่มี official Go SDK ดังนั้นคุณต้องสร้างบน REST API เอง เราไม่ค่อยเห็น Go ใช้กับโพลีมาร์เก็ต bots บ่อยเท่า Python หรือ Node.js แต่ก็ทำได้เต็มที่
ถ้าฉันรู้ทั้ง Python และ Node.js ควรใช้อะไร?
ใช้ Python ถ้ากลยุทธ์ของคุณเน้น research หนัก (pandas, NumPy, scikit-learn) ใช้ Node.js ถ้ากลยุทธ์ของคุณเป็น real-time / event-driven และคุณต้องการ client กับ server ใช้ภาษาเดียวกัน ทั้งสองแบบเข้าถึง CLOB endpoints เดียวกัน; ทั้งคู่เร็วพอสำหรับทุกกลยุทธ์ที่ไม่ใช่ HFT
ฉันต้องใช้ TypeScript สำหรับ Node SDK ไหม?
ไม่จำเป็น แต่แนะนำ @polymarket/clob-client-v2 มาพร้อม TypeScript types และการจับ type error ตั้งแต่ compile time ช่วยลดการ debug ได้มากเมื่อ EIP-712 signature payload หรือ order types ผิด
โพลีมาร์เก็ต bot ต้องเร็วแค่ไหน?
กลยุทธ์ส่วนใหญ่แค่ระดับ milliseconds ก็เพียงพอ ไม่จำเป็นต้อง microseconds sports microstructure และ market making จะได้ประโยชน์จาก sub-100ms; news arbitrage รับได้ที่ 500-1000ms ใช้ Python สำหรับ logic ของกลยุทธ์ แล้วค่อยเปลี่ยนไป Rust เฉพาะ hot path เมื่อ latency profiling พิสูจน์แล้วว่ามันส่งผลต่อ edge ของคุณจริง