PolymarketClickHouse Workshops

05 สืบสวนการเคลื่อนไหว

ตอบคำถามเชิงปฏิบัติการเกี่ยวกับตลาดสี่ข้อด้วย ClickHouse SQL ที่เขียนออกมาชัดเจน

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

จุดเริ่มต้น

ตารางข้อมูลดิบและตารางรายหนึ่งนาทีมีข้อมูลปัจจุบันอยู่แล้ว

คำถามที่ 1 — ความน่าจะเป็นปัจจุบันคือเท่าไร

SELECT
    m.token_id,
    m.question,
    m.outcome,
    round(argMax(t.midpoint, t.event_at) * 100, 2) AS probability_percent,
    max(t.event_at) AS last_update
FROM polymarket.price_ticks AS t
INNER JOIN
(
    SELECT token_id, question, outcome
    FROM polymarket.markets FINAL
) AS m ON m.token_id = t.token_id
WHERE t.midpoint > 0
  AND t.event_at >= now() - INTERVAL 30 MINUTE
GROUP BY m.token_id, m.question, m.outcome
ORDER BY m.question, m.outcome;

midpoint คือความน่าจะเป็นเชิงชี้แนะที่คำนวณจาก best bid และ ask ไม่ใช่คำมั่นว่าเป็น ราคาที่เทรดได้

คำถามที่ 2 — ผลลัพธ์ไหนขยับมากที่สุด

WITH now() AS current_time
SELECT
    m.token_id,
    m.question,
    m.outcome,
    round(argMaxIf(t.midpoint, t.event_at, t.event_at > current_time - INTERVAL 1 MINUTE) * 100, 2) AS now_percent,
    round(argMaxIf(t.midpoint, t.event_at, t.event_at <= current_time - INTERVAL 5 MINUTE) * 100, 2) AS five_minutes_ago_percent,
    round(now_percent - five_minutes_ago_percent, 2) AS move_points
FROM polymarket.price_ticks AS t
INNER JOIN
(
    SELECT token_id, question, outcome
    FROM polymarket.markets FINAL
) AS m ON m.token_id = t.token_id
WHERE t.midpoint > 0
  AND t.event_at >= current_time - INTERVAL 15 MINUTE
GROUP BY m.token_id, m.question, m.outcome
HAVING now_percent > 0 AND five_minutes_ago_percent > 0
ORDER BY abs(move_points) DESC;

หากผลลัพธ์ว่างเปล่า แสดงว่าฟีดยังสะสมข้อมูลไม่ครบห้านาที ทำคิวรีถัดไปต่อไป แล้วกลับมาทีหลัง

คำถามที่ 3 — spread กว้างหรือข้อมูลเก่า

SELECT
    m.token_id,
    m.question,
    m.outcome,
    round(argMax(t.best_bid, t.event_at) * 100, 2) AS bid_percent,
    round(argMax(t.best_ask, t.event_at) * 100, 2) AS ask_percent,
    round(ask_percent - bid_percent, 2) AS spread_points,
    dateDiff('second', max(t.event_at), now()) AS age_seconds
FROM polymarket.price_ticks AS t
INNER JOIN
(
    SELECT token_id, question, outcome
    FROM polymarket.markets FINAL
) AS m ON m.token_id = t.token_id
WHERE t.best_bid > 0
  AND t.best_ask > 0
  AND t.event_at >= now() - INTERVAL 30 MINUTE
GROUP BY m.token_id, m.question, m.outcome
ORDER BY spread_points DESC;

การเคลื่อนไหวที่มาพร้อม spread กว้างหรือ quote เก่า ควรได้รับความเชื่อมั่นน้อยกว่าตลาดที่ สดใหม่และ spread แคบ

คำถามที่ 4 — วอลุ่มการเทรดช่วงหลังเร่งขึ้นหรือไม่

SELECT
    condition_id,
    token_id,
    title,
    outcome,
    round(sumIf(price * size, event_at >= now() - INTERVAL 5 MINUTE), 2) AS current_5m_usd,
    round(sumIf(
        price * size,
        event_at >= now() - INTERVAL 10 MINUTE
          AND event_at < now() - INTERVAL 5 MINUTE
    ), 2) AS previous_5m_usd,
    round(current_5m_usd / greatest(previous_5m_usd, 0.01), 2) AS velocity_ratio
FROM polymarket.trades_clean
WHERE event_at >= now() - INTERVAL 10 MINUTE
GROUP BY condition_id, token_id, title, outcome
ORDER BY current_5m_usd DESC;

นี่คือวอลุ่มที่จับคู่สำเร็จแบบสาธารณะ แสดงเป็น price * size เป็นการวิเคราะห์ ไม่ใช่ คำแนะนำ

ถือว่าเสร็จเมื่อ

คิวรีความน่าจะเป็นปัจจุบัน spread/ความสดของข้อมูล และวอลุ่ม คืนผลลัพธ์ได้โดยไม่มี ข้อผิดพลาดเป็นอย่างน้อย หลังผ่านไปห้านาที คิวรีตัวที่ขยับแรงก็ควรคืนแถวออกมาด้วย

ต่อไป: เผยแพร่แดชบอร์ดบน Cloud

ในหน้านี้

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.

TH