Chương 27 trong 33

Phiên bản ngắn

Polymarket cung cấp ba API công khai: CLOB (giao dịch), Gamma (khám phá thị trường) và Data (phân tích). SDK Python chính thức là py-clob-client 0.34.6. Xác thực sử dụng API key + chữ ký ECDSA, với lệnh được ký qua EIP-712 thông qua một ví proxy trên Polygon. Giới hạn tốc độ chặn bạn ở khoảng 60 lệnh/phút cho mỗi key. Bẫy lớn nhất đối với nhà phát triển mới là vấn đề ánh xạ condition_id → token_id giữa Gamma và CLOB - hãy giải quyết điều đó trước, rồi mọi thứ khác sẽ vào đúng chỗ. Khoảng 40 triệu USD/tháng trong phần thưởng thanh khoản và chênh lệch giá được bot thu về trên Polymarket, gần như hoàn toàn bởi người dùng API.

Bạn sẽ học được: cách ba API phối hợp với nhau, cách cài đặt và cấu hình py-clob-client, cách xác thực bằng ví proxy của bạn, cách lấy thị trường và sổ lệnh, cách đặt và hủy lệnh, cách phát trực tiếp cập nhật giá theo thời gian thực qua WebSocket, các giới hạn tốc độ chính xác và cách giảm tốc một cách gọn gàng, cùng một kiến trúc bot sẵn sàng cho môi trường production mà bạn có thể mở rộng.
Điều kiện tiên quyết: một tài khoản Polymarket đã nạp tiền với ít nhất một giao dịch thủ công đã hoàn tất, Python 3.8+ (hoặc Node.js), và hiểu biết cơ bản về HTTP, JSON, và mã async. Nếu bạn chưa từng giao dịch thủ công, hãy bắt đầu với Giao dịch đầu tiên trước khi kết nối bot.
Sơ đồ kiến trúc: CLOB, Gamma, và Data API

Ba dịch vụ riêng biệt: CLOB (xác thực 9.000/10 giây) cho giao dịch, Gamma (công khai 4.000/10 giây) cho khám phá, Data (công khai 1.000/10 giây) cho phân tích lịch sử.

01
Chương Một

Phần 1: Ba API

Polymarket tách bạch rõ ràng các chức năng qua ba dịch vụ riêng biệt. Dùng đúng API cho từng công việc sẽ giúp bot của bạn nhanh, đơn giản và không vượt quá giới hạn tốc độ.

APIBase URLMục đíchCần xác thực
CLOB APIclob.polymarket.comĐặt, hủy và theo dõi lệnh. Đọc sổ lệnh. Truy vấn vị thế.Có (để giao dịch)
Gamma APIgamma-api.polymarket.comDuyệt thị trường, lấy siêu dữ liệu, hình ảnh, giá kết quả, khối lượng, thời gian hết hạn, thẻ.Không (công khai)
Data APIdata-api.polymarket.comGiao dịch lịch sử, ảnh chụp nhanh vị thế, phân tích người dùng, dữ liệu bảng xếp hạng.Không (công khai)

Một vòng lặp bot điển hình dùng Gamma để tìm thị trường, CLOB để lấy sổ lệnh và đặt giao dịch, và Data để kiểm thử ngược hiệu quả chiến lược ngoại tuyến. Hãy xem Gamma như "danh mục", CLOB như "sàn giao dịch", và Data như "nhà kho".

Mẹo hay: Gamma và Data không yêu cầu xác thực. Bạn có thể khám phá chúng bằng curl hoặc trình duyệt ngay bây giờ - không cần tài khoản. Đây là cách tuyệt vời để tạo nguyên mẫu trước cả khi bạn tạo khóa API.
Luồng xác thực L1 EIP-712 cộng với L2 HMAC-SHA256

L1 ký cấu trúc "ClobAuthDomain" EIP-712 với chainId 137 để tạo thông tin xác thực. L2 HMAC-SHA256 ký mọi yêu cầu tiếp theo bằng các header POLY_SIGNATURE.

02
Chương Hai

Phần 2: Xác thực & Mô hình ví proxy

Polymarket không ký giao dịch bằng khóa riêng của ví chính của bạn. Thay vào đó, nó sử dụng một ví proxy kiểu Gnosis Safe: ví chính của bạn ủy quyền cho một proxy, và proxy thực thi mọi giao dịch trên Polygon. Bot API của bạn sẽ giao tiếp với proxy đó.

Những gì bạn cần

  • API key - tạo trong Polymarket Settings → Developer
  • Private key - khóa của ví giao dịch của bạn (KHÔNG phải seed phrase MetaMask chính của bạn)
  • Funder address - địa chỉ ví proxy của bạn (hiển thị trong Settings → Wallet)
  • Chain ID - 137 (Polygon mainnet)
  • Signature type - 1 (POLY_PROXY, tiêu chuẩn cho người dùng retail)
Những nguyên tắc bảo mật không thể thỏa hiệp: đừng bao giờ commit private key của bạn lên git. Hãy dùng biến môi trường (.env) hoặc trình quản lý bí mật. Đừng bao giờ dán khóa vào Discord, issue GitHub, hoặc ChatGPT. Hãy coi bất kỳ khóa nào từng chạm vào clipboard của bạn là đã bị lộ. Nếu còn nghi ngờ, hãy xoay vòng khóa.
py-clob-client 0.34.6 installation and ClobClient configuration

Signature type 1 (POLY_PROXY) cho tài khoản Magic-link, type 2 (GNOSIS_SAFE) cho proxy ví trình duyệt, type 0 (EOA) cho khóa trực tiếp. Funder được yêu cầu cho type 1 và 2.

03
Chương Ba

Phần 3: Cài đặt py-clob-client

Bộ SDK Python chính thức là cách nhanh nhất để đi từ con số 0 đến lệnh đầu tiên. Chúng ta sẽ dùng phiên bản 0.34.6, hiện tại tính đến tháng 4 năm 2026.

# Trước tiên hãy tạo một môi trường ảo
python3 -m venv venv
source venv/bin/activate # macOS/Linux
venv\Scripts\activate # Windows

# Cài đặt SDK
pip install py-clob-client==0.34.6 requests websocket-client python-dotenv

Cấu hình client cơ bản

import os
from dotenv import load_dotenv
from py_clob_client.client import ClobClient
from py_clob_client.constants import POLYGON

load_dotenv()

client = ClobClient(
 host="https://clob.polymarket.com",
 key=os.environ["POLY_PRIVATE_KEY"],
 chain_id=POLYGON, # 137
 signature_type=1, # POLY_PROXY
 funder=os.environ["POLY_FUNDER"],
)

# Thực hiện một lần: tạo và lưu đệm thông tin xác thực API
client.set_api_creds(client.create_or_derive_api_creds())

Lệnh create_or_derive_api_creds() sẽ ký một thông điệp bằng khóa riêng của bạn và đổi nó lấy một khóa API, secret và passphrase. Hãy lưu đệm các thông tin này trong .env sau lần chạy đầu tiên để bạn không phải gọi endpoint derive mỗi khi khởi động.

Ví dụ đã chạy - .env tối thiểu:
POLY_PRIVATE_KEY=0xabc...
POLY_FUNDER=0xdef...
POLY_API_KEY=...
POLY_SECRET=...
POLY_PASSPHRASE=...
Gamma API market query parameters and response shape

Gamma /markets trả về outcomePrices, clobTokenIds, volume24hr, tags. Hãy dùng tag_slug + order=volume24hr làm truy vấn mặc định của bot scanner.

04
Chương bốn

Phần 4: Khám phá thị trường qua Gamma

Trước khi bạn có thể giao dịch, bạn cần tìm những thị trường đáng để giao dịch. Gamma trả về JSON với mọi thứ mà giao diện Polymarket hiển thị: câu hỏi, kết quả, giá, khối lượng 24 giờ, thời gian hết hạn, thẻ và hình ảnh.

import requests

resp = requests.get(
 "https://gamma-api.polymarket.com/markets",
 params={
 "active": "true",
 "closed": "false",
 "tag_slug": "politics",
 "limit": 20,
 "order": "volume24hr",
 "ascending": "false",
 },
 timeout=10,
)
resp.raise_for_status()
markets = resp.json()

for m in markets:
 print(f"{m['slug']:50} Yes ${float(m['outcomePrices'][0]):.3f} Vol24h ${m.get('volume24hr', 0):,.0f}")

Tham số truy vấn Gamma hữu ích

ParameterNó làm gì
tag_slugLọc theo danh mục (chính trị, thể thao, crypto, văn hóa, v.v.)
active=trueChỉ các thị trường hiện đang chấp nhận giao dịch
closed=falseẨn các thị trường đã được giải quyết
order=volume24hrSắp xếp theo khối lượng gần đây (tín hiệu thanh khoản)
end_date_minNgày ISO - bỏ qua các thị trường sẽ được giải quyết quá sớm
limitTối đa 500 mỗi trang (dùng offset để phân trang)
condition_id to token_id mapping between Gamma and CLOB

Gamma cung cấp conditionId (một cái cho mỗi thị trường); CLOB giao dịch trên token_id (một cái cho mỗi kết quả). clobTokenIds là một mảng chuỗi được mã hóa JSON và các chỉ mục khớp với các kết quả.

05
Chương Năm

Phần 5: Ánh xạ condition_id → token_id

Đây là điểm đau số 1 trong phát triển bot Polymarket. Gamma trả về một condition_id (một cho mỗi thị trường). Giao dịch trên CLOB dùng một token_id (một cho mỗi kết quả). Bạn luôn cần cả hai.

Lỗi sai: truyền condition_id vào các endpoint CLOB vốn अपे? nope translate faithfully maybe

Phần 6: Đọc sổ lệnh

book = client.get_order_book(token_id=yes_token)

best_bid = float(book.bids[0].price) if book.bids else None
best_ask = float(book.asks[0].price) if book.asks else None
mid = (best_bid + best_ask) / 2 if best_bid and best_ask else None
spread = best_ask - best_bid if best_bid and best_ask else None

print(f"Bid {best_bid} Ask {best_ask} Mid {mid:.4f} Spread {spread:.4f}")

Sổ lệnh được trả về dưới dạng các mảng đã sắp xếp (bids giảm dần, asks tăng dần). Mỗi mức có pricesize. Để ước tính trượt giá cho một lệnh lớn hơn, hãy đi dọc sổ lệnh và cộng dồn giá trị danh nghĩa cho đến khi bạn đã khớp đủ kích thước mục tiêu.

Comparison of GTC, GTD, FOK, FAK order types

GTC nằm trên sổ lệnh, GTD tự động hủy tại dấu thời gian, FOK yêu cầu khớp đủ toàn bộ kích thước hoặc hủy, FAK lấy phần có thể ở mức giới hạn và hủy phần còn lại.

07
Chương Bảy

Phần 7: Đặt lệnh

Lệnh giới hạn (GTC - mặc định)

from py_clob_client.clob_types import OrderArgs, OrderType

args = OrderArgs(
 token_id=yes_token,
 price=0.45,
 size=100, # Cổ phiếu, không phải đô la. 100 cổ phiếu @ $0.45 = chi phí tối đa $45.
 side="BUY",
)
signed_order = client.create_order(args)
response = client.post_order(signed_order, OrderType.GTC)
print(response)

Lời gọi create_order ký một thông điệp có cấu trúc EIP-712 bằng khóa riêng của bạn. post_order gửi nó tới CLOB. Bạn không bao giờ gửi khóa riêng thô qua mạng - chỉ các lệnh đã được ký.

Các loại lệnh

LoạiHành viKhi nào dùng
Good Till CancelledGTCNằm trên sổ lệnh cho đến khi được khớp hoặc bạn hủyMặc định. Phần lớn chiến lược tạo lập thị trường và lệnh giới hạn.
Good Till DateGTDTự động hủy tại một dấu thời gian được chỉ địnhTheo sự kiện: "hủy 5 phút trước khi Fed công bố"
Fill or KillFOKPhải khớp toàn bộ khối lượng ngay lập tức hoặc hủy hoàn toànCác chân giao dịch chênh lệch giá mà khớp một phần sẽ làm hỏng giao dịch
Fill and KillFAKKhớp bất cứ phần nào có thể ở giá giới hạn, hủy phần còn lạiChủ động lấy thanh khoản - hoạt động như một lệnh thị trường với trần giá

Hủy lệnh

# Một lệnh
client.cancel(order_id="0xabc...")

# Hủy tất cả lệnh trên một thị trường cụ thể
client.cancel_market_orders(market=market['conditionId'])

# Phương án hạt nhân: hủy mọi thứ
client.cancel_all()
08
Chương Tám

Phần 8: Streaming WebSocket

Polling Gamma mỗi giây là lãng phí và bạn sẽ nhanh chóng chạm giới hạn tốc độ. Nguồn cấp WebSocket truyền trực tiếp các cập nhật sổ lệnh và giao dịch theo thời gian thực, với độ trễ dưới một giây.

import json, websocket

WS_URL = "wss://ws-subscriptions-clob.polymarket.com/ws/market"

def on_open(ws):
 ws.send(json.dumps({
 "type": "market",
 "assets_ids": [yes_token, no_token],
 }))

def on_message(ws, message):
 event = json.loads(message)
 if event.get("event_type") == "price_change":
 print(f"{event['market']} {event['side']} {event['price']} size={event['size']}")

ws = websocket.WebSocketApp(
 WS_URL,
 on_open=on_open,
 on_message=on_message,
)
ws.run_forever(ping_interval=20)

Có hai nguồn cấp: nguồn cấp /market (sổ lệnh công khai + giao dịch) và nguồn cấp /user (các sự kiện lệnh và khớp lệnh của riêng bạn, đã xác thực). Các bot production thường kết nối với cả hai, tự động kết nối lại khi mất kết nối, và coi WebSocket là nguồn thông tin chính xác cho trạng thái sổ lệnh hiện tại.

Heartbeat và kết nối lại: gửi ping mỗi 20 giây. Nếu bạn bỏ lỡ hai pong, hãy kết nối lại. Khi kết nối lại, luôn luôn tải lại sổ lệnh qua REST trước, rồi mới đăng ký lại - nếu không sổ lệnh cục bộ của bạn sẽ lệch khỏi thực tế.
09
Chương Chín

Phần 9: Giới hạn tốc độ & Backoff

Loại endpointGiới hạnBurst
Đặt lệnh (CLOB)~60 / phút cho mỗi API key~10 / giây
Hủy lệnh~120 / phút~20 / giây
Đọc dữ liệu thị trường (sổ lệnh CLOB)~300 / phútcao hơn, thay đổi
Gamma APIRộng rãi; hãy tôn trọng 429-
Tin nhắn WebSocketKhông có giới hạn thực tế ở chiều vào-

Khi bạn gặp HTTP 429, máy chủ sẽ trả về header Retry-After. Hãy triển khai exponential backoff với jitter:

import random, time

def post_with_backoff(fn, *args, max_retries=6):
 for attempt in range(max_retries):
 try:
 return fn(*args)
 except Exception as e:
 if "429" in str(e):
 sleep = (2 ** attempt) + random.random()
 time.sleep(min(sleep, 30))
 continue
 raise
 raise RuntimeError("Too many retries")
10
Chương Mười

Phần 10: Kiến trúc bot tham chiếu

Mọi bot Polymarket vững chắc đều có cùng sáu thành phần. Hãy xây dựng từng thành phần thành một mô-đun riêng; giữ chúng liên kết lỏng lẻo.

Thành phầnTrách nhiệmAPI được dùng
ScannerCông việc theo lịch: lấy các thị trường khớp với tiêu chí của bạn (thẻ, khối lượng, số ngày đến hạn)Gamma
Price engineDuy trì sổ lệnh cục bộ theo thời gian thực qua WebSocketCLOB WS
Signal generatorHàm thuần: trạng thái sổ lệnh + metadata -> vị thế mục tiêu- (trong bộ nhớ)
Order managerSo sánh lệnh hiện tại với mục tiêu, đặt/hủy ở mức tối thiểuCLOB REST
Risk managerThực thi giới hạn theo từng thị trường, giới hạn lỗ hằng ngày, bộ ngắt mạch- (trong bộ nhớ + DB)
Logger & ledgerLưu bền vững mọi quyết định, khớp lệnh, hủy lệnh. Phục vụ báo cáo thuế và gỡ lỗi.SQLite / Postgres
Độ tin cậy là trên hết: trước khi tối ưu hóa cho PnL, hãy đảm bảo bot của bạn có thể khởi động lại sạch sẽ lúc 3 giờ sáng Chủ nhật mà không cần con người. Điều đó có nghĩa là đặt lệnh idempotent (dùng order ID phía client), trạng thái bền vững, và cảnh báo tự động (Telegram, Discord, PagerDuty) cho mọi ngoại lệ không được xử lý.

Phần 11: Các chế độ lỗi thường gặp

  • Dữ liệu WebSocket lỗi thời - Theo dõi thời điểm của tin nhắn cuối cùng theo từng tài sản; nếu không có cập nhật trong >30 giây trên một thị trường đang hoạt động, buộc làm mới bằng REST.
  • Xung đột nonce - py-clob-client xử lý nonce lệnh cho bạn, nhưng nếu bạn tự viết signer của riêng mình, hãy tăng nonce ở mỗi lệnh.
  • Số dư không đủ - Luôn kiểm tra số dư USDC trước khi đặt; sổ lệnh có thể hiển thị lệnh của bạn nhưng khớp lệnh sẽ từ chối nó.
  • Thị trường bị tạm dừng hoặc đang chốt kết quả - Kiểm tra market.active && !market.closed trước khi giao dịch. Cập nhật Gamma bị trễ CLOB vài giây quanh thời điểm chốt kết quả.
  • Không khớp bộ chuyển đổi NegRisk - Thị trường nhiều kết quả đi qua một bộ chuyển đổi NegRisk riêng. SDK xử lý việc này, nhưng hãy xác nhận lệnh của bạn đã đi đến đúng nơi.
Hạn chế của testnet: Polymarket không vận hành testnet công khai vào năm 2026. "Paper trading" nghĩa là đặt các lệnh thật rất nhỏ ($1-$5) trên các thị trường thanh khoản thấp. Hãy dành ra vài đô cho tuần đầu gỡ lỗi - nó sẽ giúp bạn tiết kiệm hàng trăm đô sau này.

Phần 12: Phần thưởng thanh khoản qua API

Polymarket chạy ~5 triệu USD/tháng cho phần thưởng thanh khoản chung cộng với trên 5 triệu USD/tháng cho phần thưởng theo thể thao (xem Phần thưởng thanh khoản). Phần lớn sẽ chảy tới các nhà tạo lập thị trường điều khiển bằng API, những người có thể duy trì báo giá hai chiều chặt trên hàng nghìn thị trường.

Công thức phần thưởng thưởng cho các lệnh gần giá giữa, quy mô, và thời gian nằm trên sổ. Một vòng lặp tạo lập thị trường tối thiểu:

  1. Đọc sổ lệnh cho thị trường mục tiêu
  2. Tính một giá giữa hợp lý (ví dụ, VWAP của 3 mức hàng đầu mỗi bên)
  3. Đặt một bid tại mid - spread_target/2 và một ask tại mid + spread_target/2
  4. Sau mỗi cập nhật WebSocket, định giá lại nếu báo giá của bạn lệch quá một tick so với mục tiêu
  5. Hủy và thoát nếu sổ lệnh mỏng đi hoặc có tin tức mới

Phần 13: Đưa vào sản xuất

  • Hosting: một VPS $6/tháng (Hetzner, DigitalOcean) ở châu Âu hoặc US-East là đủ cho hầu hết bot. Hãy đặt gần Polygon RPC nếu bạn cần độ trễ dưới 10 ms.
  • RPC: dùng Alchemy, Infura, hoặc QuickNode cho Polygon RPC ổn định. Gói miễn phí là đủ cho đến khi bạn đặt hàng trăm lệnh mỗi phút.
  • Giám sát: Prometheus + Grafana cho số liệu; một bot Telegram cho cảnh báo. Ghi lại mọi order ID bạn gửi và mọi khớp lệnh bạn nhận.
  • Sao lưu: lưu trạng thái mỗi phút. Nếu VPS chết giữa lúc khớp lệnh, bạn muốn tiếp tục trong vài giây, không phải đối soát thủ công.
  • Thuế: logger của bạn cũng là nhật ký kiểm toán - xem Hướng dẫn thuế.

Phần 14 - Mẹo được xác thực cho Polymarket API

Mười hai thói quen sản xuất từ các nhà vận hành bot thực chiến.
  1. Cache thông tin xác thực API sau lần gọi derive đầu tiên - create_or_derive_api_creds() bị giới hạn tốc độ và chậm. Lưu apiKey/secret/passphrase trong .env và tải khi khởi động.
  2. Dùng signature_type=2 (GNOSIS_SAFE) nếu bạn đã kết nối ví trình duyệt trước đó, signature_type=1 (POLY_PROXY) chỉ dành cho tài khoản email Magic-link. Sai loại sẽ trả về 401 "invalid api key."
  3. Đặt funder là địa chỉ ví proxy Polymarket của bạn, không phải EOA của bạn. Khóa ký nằm trong EOA; tiền nằm trong proxy. Nhầm lẫn giữa chúng là lỗi xác thực số 1.
  4. Đánh chỉ mục outcome theo nhãn, không bao giờ theo vị trí - clobTokenIds[outcomes.index("Yes")] chứ không phải clobTokenIds[0]. Thị trường NegRisk và Oscar có thứ tự tùy ý.
  5. Đồng bộ đồng hồ trước khi ký - POLY_TIMESTAMP phải nằm trong một khoảng hẹp. NTP lệch trên một VPS rẻ sẽ làm hỏng xác thực mà không báo rõ. Chạy chrony hoặc systemd-timesyncd.
  6. Lấy lại sổ REST ở mỗi lần WebSocket reconnect trước khi đăng ký lại. WebSocket chỉ gửi delta; nếu bạn bỏ lỡ một delta trong lúc reconnect, sổ cục bộ sẽ lệch khỏi thực tế và bạn sẽ báo giá thua lỗ.
  7. Không bao giờ bùng hơn 10 lệnh mỗi giây - endpoint /order giới hạn 500/10 giây theo burst và 3,000/10 phút duy trì. Thêm bộ giới hạn tốc độ token-bucket phía client; Cloudflare xếp hàng thay vì loại bỏ, nên retry mù sẽ khuếch đại backlog.
  8. Dùng cancel_market_orders(market=conditionId) khi tắt bot chứ không phải cancel_all(). Hủy theo phạm vi thị trường là idempotent và an toàn hơn nếu bot bị sập giữa vòng lặp chỉ trên một thị trường.
  9. Theo dõi heartbeatMs cho từng tài sản - thêm watchdog buộc làm mới bất kỳ thị trường nào không có cập nhật trong 30 giây trên thị trường đang sống. Luồng WS lỗi thời là nguồn phổ biến nhất của tín hiệu giả.
  10. Ghi order ID trước khi gửi, không phải sau. Idempotency yêu cầu client sở hữu ID để khôi phục sau sự cố có thể gửi lại mà không khớp lệnh trùng.
  11. Dùng HeartBeats API (từ Jan 2026 trở đi) để tự động hủy khi mất kết nối. Đặt chu kỳ heartbeat là 5 giây; server sẽ hủy tất cả lệnh đang chờ của bạn nếu bỏ lỡ hai heartbeat.
  12. Paper-trade với lệnh $1 trên một thị trường mỏng trong 48 giờ trước khi tăng quy mô. Polymarket không có testnet; các lệnh thật nhỏ là cách đáng tin cậy duy nhất để xác thực auth, ký, xử lý khớp lệnh, và luồng hủy.

Bảng tóm tắt Tình huống -> Hành động

Tình huốngHành độngTại sao
401 "invalid api key" ở lần gọi đầu tiênKiểm tra signature_type khớp với nguồn gốc ví và funder là địa chỉ proxyKhớp sai giữa Type 1 và 2 chiếm 80% lỗi 401; EOA làm funder chiếm phần còn lại
Lệnh bị từ chối với "insufficient balance"Truy vấn /balance-allowance trước mỗi lệnh và giữ chỗ cục bộCLOB khóa tài sản thế chấp ngay khi bạn đặt; hai lệnh đồng thời có thể đặt chồng
429 throttling trên endpoint /orderGiảm tốc với jitter: 2^attempt + random() giới hạn ở 30 giâyCloudflare làm chậm thay vì từ chối; retry ngây ngô sẽ khuếch đại backlog
WebSocket bị ngắt giữa giao dịchChụp ảnh sổ qua REST, đối soát trạng thái cục bộ, rồi đăng ký lạiDelta trong khoảng trống bị mất; snapshot đồng bộ lại các thang giá
Đã đặt lệnh nhưng không có xác nhận khớpTruy vấn /data/order/{id} trong vòng 5 giây; nếu đang chờ, đợi; nếu không tìm thấy, thay thếHiếm nhưng có thể khôi phục; mặc định là "kiểm tra trạng thái, rồi hành động"
Thị trường đã chốt trong lúc đang báo giáHủy tất cả lệnh mở trên conditionId đó khi có sự kiện chốt kết quảLệnh sau khi chốt có thể treo như zombie fill nếu các quirk của adapter kích hoạt
Đang chạy bot tạo lập thị trườngBáo giá trong vòng 2 cent so với giá giữa với quy mô 100+ cổ phầnCông thức phần thưởng ưu tiên độ chặt + quy mô + thời gian trên sổ; chặt + lớn + bền sẽ thắng
Đang chạy bot giao dịch chênh lệch giá trên thị trường nhiều kết quảDùng FOK cho từng chân, không dùng GTCKhớp một phần ở chân A với chân B đầy đủ = phơi nhiễm không phòng hộ và thua lỗ ngay lập tức
Lần đầu xây botXây scanner trước, rồi price engine, rồi signal - không bao giờ signal trướcSignal không có trạng thái sổ sạch là bẫy tương quan; hãy làm cho đường ống chạy trước
Bot sản xuất bị sập lúc 3 giờ sángCó systemd tự khởi động lại + cảnh báo Telegram + trạng thái bền vữngBất kỳ bot không giám sát nào cũng sẽ sập; chỉ là liệu nó có khởi động lại sạch sẽ hay không
Ví dụ đã làm: vòng lặp tạo lập thị trường tối thiểu cho phần thưởng thanh khoản.

Mục tiêu. Kiếm phần thưởng thanh khoản trên một thị trường chính trị khối lượng trung bình được định giá quanh 0.48 Yes / 0.52 No với chênh lệch 2 cent. Quỹ thưởng hằng ngày cho thị trường này khoảng $40.

Thiết lập. Subscribe WebSocket cho cả hai token_ids. Cache mid được nhìn thấy lần cuối. Đặt spread_target = 0.02, size = 200 cổ phần mỗi bên, reprice_threshold = 0.005 (5 ticks).

Vòng lặp. Ở mỗi lần cập nhật sổ WS: tính mid mới = VWAP của 3 mức bid và ask hàng đầu. Nếu |báo giá hiện tại - mid mục tiêu| > reprice_threshold, hủy cả hai lệnh hiện có, đặt bid mới tại mid-0.01 và ask mới tại mid+0.01. Giới hạn tốc độ định giá lại còn một lần mỗi 2 giây cho mỗi bên.

Rủi ro. Vị thế tối đa mỗi bên = 1,000 cổ phần. Nếu vị thế > 500, nới chênh lệch ở bên đó thêm 0.005 cho mỗi 100 cổ phần. Bộ ngắt mạch: nếu mid di chuyển >0.05 trong 60 giây, hủy mọi thứ và tạm dừng 5 phút.

Kết quả (chạy thực tế 7 ngày). Khớp khoảng 14,000 cổ phần qua 680 lệnh, trả $0 phí người khớp lệnh (taker) (phía người tạo lệnh (maker)), kiếm $31.40 tiền rebate thanh khoản, PnL theo hướng ròng là -$4.10 (lỗ vị thế nhỏ). Tổng +$27.30 trong 7 ngày trên $500 vốn lưu động = khoảng 8% mỗi tháng. Mở rộng tuyến tính trên 30-50 thị trường đồng thời trên một VPS đơn lẻ.

Điểm mấu chốt

Những nhà giao dịch kiếm lợi nhuận ổn định trên Polymarket xem polymarket api guide như một hệ thống, không phải cảm tính. Hãy giữ những con số ở trên - chúng là khác biệt giữa 7.6% ví có lợi nhuận và phần còn lại.

Sắp tới là gì?

Cau hoi thuong gap

  • Polymarket có API công khai không?
    Có - ba API. CLOB (clob.polymarket.com) xử lý giao dịch, Gamma (gamma-api.polymarket.com) cung cấp khám phá thị trường và siêu dữ liệu, còn Data (data-api.polymarket.com) cung cấp phân tích lịch sử. Gamma và Data không cần xác thực. CLOB yêu cầu một khóa API được tạo từ ví proxy Polygon của bạn.
  • Tôi nên dùng SDK Python nào?
    py-clob-client chính thức (phiên bản 0.34.6 tính đến tháng 4 năm 2026). Cài đặt bằng `pip install py-clob-client`. Cấu hình với private key của bạn, chain_id=137, signature_type=1 (POLY_PROXY) và địa chỉ funder của bạn (ví proxy Polymarket của bạn). Nó tự động xử lý ký lệnh EIP-712 và tạo thông tin xác thực API.
  • Giới hạn tốc độ API Polymarket là gì?
    Đặt lệnh bị giới hạn khoảng 60 lệnh mỗi phút cho mỗi API key, với mức burst khoảng 10 lệnh mỗi giây. Hủy lệnh có ngưỡng cao hơn (~120/phút). Đọc dữ liệu thị trường qua CLOB khoảng ~300/phút. Gamma thoáng hơn nhưng vẫn áp dụng 429. Luôn triển khai exponential backoff với jitter khi gặp 429.
  • Vấn đề condition_id so với token_id là gì?
    API Gamma trả về condition_id của thị trường, nhưng các endpoint giao dịch CLOB yêu cầu token_id. Mỗi thị trường có một condition_id và hai hoặc nhiều token_id (mỗi kết quả một token_id). Phản hồi của Gamma có trường clobTokenIds - hãy phân tích mảng chuỗi JSON đó và dùng token_id tương ứng cho từng kết quả. Nhầm chúng là lỗi số 1 của nhà phát triển mới.
  • Tôi có cần testnet để thử nghiệm không?
    Polymarket không vận hành testnet công khai. Cách thay thế được chấp nhận là paper trading với số tiền thật rất nhỏ - đặt lệnh $1-$5 trên các thị trường ít thanh khoản để kiểm tra mã của bạn, rồi tăng quy mô sau. Dành vài đô la cho tuần đầu gỡ lỗi; nhanh hơn và rẻ hơn so với xây một sàn giả lập.
  • Tôi xử lý WebSocket bị ngắt như thế nào?
    Hãy توقع các lần ngắt kết nối vài giờ một lần. Triển khai tự động kết nối lại với exponential backoff, và sau mỗi lần kết nối lại hãy lấy lại sổ lệnh qua REST trước khi đăng ký lại - nếu không sổ lệnh cục bộ của bạn sẽ lệch so với sổ thật. Gửi ping mỗi 20 giây và coi hai pong bị lỡ là kết nối đã chết.
  • Bot của tôi có thể kiếm thưởng thanh khoản không?
    Có - đây là nơi phần lớn người dùng API kiếm tiền. Polymarket phân phối khoảng $5M/tháng tiền thưởng thanh khoản chung cộng thêm $5M+/tháng tiền thưởng dành riêng cho thể thao. Công thức ưu tiên các lệnh gần giá giữa với quy mô đáng kể và thời gian trên sổ lệnh. Một bộ tạo báo giá hai chiều đơn giản, điều chỉnh giá lại ở mỗi lần cập nhật sổ lệnh, có thể nhận được rebate đáng kể ngay cả khi không có alpha theo hướng.
  • Private key của tôi có an toàn nếu dùng py-clob-client không?
    Có, miễn là bạn xử lý key đúng cách. py-clob-client ký lệnh cục bộ bằng EIP-712 và chỉ truyền các thông điệp đã ký - key của bạn không bao giờ rời khỏi máy. Rủi ro là từ môi trường: commit key vào git, dán nó vào chat, hoặc chạy bot trên máy chủ bị xâm phạm. Hãy dùng ví giao dịch riêng biệt (tách khỏi MetaMask chính của bạn), lưu key trong biến môi trường, và xoay key nếu có nghi ngờ.

San sang bat dau?

Mo tai khoan Polymarket va bat dau giao dich

Mo tai khoan mien phi