PolymarketClickHouse Workshops

07 Chuyên gia phân tích thị trường AI

Đưa các bảng thị trường trực tiếp của bạn cho một ClickHouse Agent, để nó tự phát hiện và điều tra một biến động, rồi phân xử câu trả lời của nó bằng SQL tất định.

Your computer
macOS terminal: Run workshop commands in Terminal using zsh or bash.

Điểm khởi đầu

Collector đang healthy ở chế độ live, degraded hoặc fixture, các truy vấn của Module 05 đều trả về kết quả, và bạn đã đăng nhập vào tổ chức sở hữu polymarket-workshop. Không cần API key mới hay tiến trình cục bộ nào: ClickHouse Agents chạy trên Cloud dưới danh tính bạn đã tạo ở Module 00.

Tại sao

Module 05 đã trả lời bốn câu hỏi mà bạn viết ra sẵn. Thị trường không chờ danh sách câu hỏi của bạn. Hình dung hữu ích là một chuyên gia phân tích trực ca: nhận ra một biến động, đặt giả thuyết, viết các truy vấn để kiểm chứng nó, và báo cáo một kết luận kèm bằng chứng. Vòng lặp đó cũng có thể thất bại một cách âm thầm, nên hai bước cuối sẽ phân xử agent thay vì tin nó.

Bước 1 — Mở ClickHouse Agents và kết nối service này

open 'https://ai.clickhouse.cloud'

Console của Cloud dẫn tới cùng nơi đó: service của bạn, rồi ClickHouse agents.

Tạo một agent tên Polymarket analyst, thêm tool ClickHouse, trỏ nó vào polymarket-workshop, và xác nhận nó báo Connected. Không có tool được kết nối, agent sẽ đoán schema của bạn. Dán đoạn sau làm chỉ dẫn cho nó; mỗi dòng đều có lý do vì agent thường làm sai nếu thiếu nó:

You answer questions about live public prediction-market data in the polymarket database
of this service. Rules:
- Probability is the quote midpoint: polymarket.price_ticks where midpoint > 0, or the
  merged close of polymarket.market_midpoints_1m. A last_trade_price tick is not one.
- market_midpoints_1m holds AggregateFunction states. Read them only through
  argMinMerge(open), maxMerge(high), minMerge(low), argMaxMerge(close) and
  countMerge(updates), grouped by minute, token_id.
- Metadata comes from polymarket.markets FINAL, trades from polymarket.trades_clean.
- One condition_id per market, one token_id per outcome. A Yes move and its No
  counterpart are one event, not two findings.
- Timestamps are UTC and the newest minute is usually still filling.
- Show the SQL you ran and the age of the data behind every number.
- Public-data analysis only. Never give trading advice.

Bước 2 — Lượt một: để nó tự tìm ra biến động

Using the ClickHouse tool, find the largest midpoint move in the last 30 minutes of
polymarket.market_midpoints_1m. For each token_id compare the merged close of the most
recent complete minute with the merged close five minutes earlier. Report the question,
the outcome, the token_id, both probabilities in percent, the move in percentage points,
and the two minutes you compared. Show the SQL.

Mong đợi: một kết quả được nêu tên, một mức biến động có dấu tính theo điểm, và SQL có merge các aggregate state thay vì select trực tiếp các cột state thô.

Bước 3 — Lượt hai: buộc nó điều tra chính phát hiện của mình

Investigate that move before you believe it. From polymarket.price_ticks report the
latest best_bid, best_ask, spread in percentage points, and quote age in seconds for that
token_id. From polymarket.trades_clean compare matched volume as price * size over the
five minutes covering the move against the previous five minutes. Then give a verdict of
corroborated, weakly corroborated, or likely artifact, and name the evidence behind it.

Bạn chưa bao giờ nói ba tín hiệu đó kết hợp với nhau ra sao. Việc tự chọn cách kết hợp là điều biến nó thành một agent thay vì một hộp text-to-SQL.

Bước 4 — Lượt ba: buộc nó tấn công kết luận của chính nó

List every assumption in that verdict that could be wrong, and for each one the single
query that would falsify it. Run the two you consider most likely to be wrong, then tell
me whether the verdict survives.

Một câu trả lời hữu ích sẽ nêu ra phút mới nhất còn chưa đầy đủ, độ tuổi của quote, và việc một phút mỏng dữ liệu chỉ dựa trên rất ít bản cập nhật. Hãy ghi lại kết luận có đứng vững hay không.

Bước 5 — Phân xử agent bằng SQL tất định

Chạy đoạn này trong SQL console của Cloud. Nó trả lời Bước 2 mà không cần agent, nên dòng đầu tiên của nó là mốc tham chiếu của bạn:

WITH per_minute AS
(
    SELECT
        token_id,
        minute,
        argMaxMerge(close) AS close_midpoint
    FROM polymarket.market_midpoints_1m
    WHERE minute >= now() - INTERVAL 30 MINUTE
      AND minute < toStartOfMinute(now())
    GROUP BY token_id, minute
)
SELECT
    m.question,
    m.outcome,
    p.token_id,
    round(argMax(p.close_midpoint, p.minute) * 100, 2) AS latest_percent,
    round(argMin(p.close_midpoint, p.minute) * 100, 2) AS oldest_percent,
    round(latest_percent - oldest_percent, 2) AS move_points,
    min(p.minute) AS window_start,
    max(p.minute) AS window_end
FROM per_minute AS p
INNER JOIN
(
    SELECT token_id, question, outcome
    FROM polymarket.markets FINAL
) AS m ON m.token_id = p.token_id
GROUP BY m.question, m.outcome, p.token_id
ORDER BY abs(move_points) DESC
LIMIT 5;

Các cửa sổ thời gian khác nhau là có chủ ý: truy vấn này trải từ phút hoàn chỉnh cũ nhất đến mới nhất hiện có, trong khi agent được yêu cầu dùng bước năm phút. Hãy so sánh token_id, dấu của move_points, và độ lớn, chứ không phải các số thập phân. Sau đó kiểm tra các con số củng cố của agent đối chiếu với các truy vấn Spread and freshness và Volume velocity đã lưu ở Module 06.

Bước 6 — Viết ra những gì agent làm sai

Thường có ít nhất một trong các lỗi sau. Hãy tìm lỗi của bạn trong bản ghi hội thoại:

  • select close hoặc high từ market_midpoints_1m mà không dùng hàm Merge, rồi giải thích bất cứ thứ gì trả về với vẻ hoàn toàn tự tin;
  • coi phút mới nhất còn đang được điền là đã hoàn chỉnh, khiến đoạn cuối bị phóng đại;
  • báo cáo một token Yes và token No của nó như hai biến động độc lập;
  • bỏ FINAL khỏi polymarket.markets, làm một thị trường được khám phá lại bị join hai lần;
  • gọi midpoint là giá có thể giao dịch được, hoặc dẫn ra một biến động mà không kèm độ tuổi của nó.

Nếu các con số của nó khớp chính xác với truy vấn phân xử, hãy kiểm tra trực tiếp vấn đề phút chưa đầy đủ: hỏi xem phút mới nhất của nó có hoàn chỉnh không, rồi so sánh max(minute) trong polymarket.market_midpoints_1m với toStartOfMinute(now()). Hai giá trị bằng nhau nghĩa là nó chưa hoàn chỉnh, và một agent nói ngược lại đã phát biểu điều sai về dữ liệu trực tiếp.

Hoàn thành khi

  • SQL phát hiện của agent đọc market_midpoints_1m qua các hàm Merge;
  • kết luận của nó dẫn ra spread, độ tuổi quote và khối lượng giao dịch, chứ không chỉ giá;
  • dòng đầu tiên của truy vấn phân xử đồng thuận với agent về token và hướng biến động, hoặc bạn có thể giải thích được sự khác biệt; và
  • bạn đã viết ra một điều mà agent làm sai hoặc nói quá.

Tiếp theo: tổng kết và dọn dẹp.

Trên trang này

Track your progress?

Optional. We email a link to confirm your address; progress records once you open it.

Please use your work email address, not a personal one.

Progress tracking also requires accepting the current Terms of Service in Privacy settings.

VI