SightWhale
← 返回博客

跨市场价格发现:谁领涨,谁跟跌,原因何在

SightWhale··5 分钟·Read in English

跨市场价格发现:谁领涨,谁跟跌,原因何在

Polymarket上的市场通常在设计上相互关联:

  • 一个市场是宏观信念的清晰代理
  • 另一个是同一信念的细化版本
  • 第三个则是时间窗口版本

理论上,它们应该同步波动。

但实际上,它们并非同步波动。 它们是按顺序波动的:

  • 领先者:率先吸收信息
  • 跟随者:随后更新,通常以跳跃方式

如果你能测量这种领先-滞后关系,你就不会再盯着错误的图表——也不会再把大户的资金流动视为随机事件。

内部链接:


1) 为什么Polymarket上存在领先-滞后关系

领先-滞后是微观结构,并非玄学。

两个市场可以编码相似的信念,但在以下方面存在差异:

  • 价差与深度(交易成本)
  • 参与者构成(对冲者 vs 叙事交易者)
  • 结果清晰度(措辞和来源)
  • 到期时间(紧迫性改变交易者和交易时机)

“领先者”通常是这样的市场:

  • 最容易交易(价差小,深度实)
  • 更新最快(订单簿补单快,虚假挂单少)

跟随者通常是这样的市场:

  • 流动性较差或结果摩擦较高
  • 散户交易者较多

如果你想深入了解市场状态转换,请阅读:


2) 你需要什么(仅公开数据)

Polymarket提供了三个公开API系列:

对于领先-滞后分析,你只需要:

  1. 两个代币ID(每个市场/结果一个)
  2. 每个代币的价格历史序列

代币ID可以从Gamma市场对象中获取。 外部来源:https://docs.polymarket.com/developers/gamma-markets-api/get-markets


3) 领先-滞后工作流(有效版本)

我们将进行两项检查:

  1. 收益率的互相关(跨不同滞后阶数)(快速、稳健)
  2. 跨窗口的稳定性(最重要的部分)

使用收益率而非原始价格:

r_t = p_t - p_{t-1}

然后对于每个滞后阶数 k,比较:

corr(r_A(t), r_B(t + k))

如果相关性在正 k 处达到峰值,则 A 倾向于领先 B k 个时间步。

现在关键的是:重复测试

你需要这种关系持续存在:

  • 跨多个回溯窗口(1天、3天、7天)
  • 在多个时间粒度下(1分钟、5分钟)

如果“领先者”每小时都在变化,那么你面对的不是价格发现,而是噪音。


4) 可复现脚本(数据获取 + 领先-滞后分析)

Polymarket的端点概述列出了公开的CLOB定价端点,包括价格历史。 外部来源:https://docs.polymarket.com/quickstart/reference/endpoints

此脚本获取两个价格历史,重采样到固定时间间隔,然后计算跨滞后阶数的互相关。

import json
import math
import urllib.request
from statistics import mean

TOKEN_A = "TOKEN_ID_A"
TOKEN_B = "TOKEN_ID_B"

INTERVAL_SECONDS = 60
MAX_LAG = 30  # 如果时间间隔为60秒,则最多30分钟

def get_json(url: str):
  with urllib.request.urlopen(url) as r:
    return json.loads(r.read().decode("utf-8"))

def fetch_prices(token_id: str):
  data = get_json(f"https://clob.polymarket.com/prices-history?token_id={token_id}")
  points = []
  for row in data:
    ts = int(row.get("t") or row.get("timestamp") or row.get("time"))
    px = float(row.get("p") or row.get("price"))
    points.append((ts, px))
  points.sort(key=lambda x: x[0])
  return points

def resample(points, interval):
  buckets = {}
  for ts, px in points:
    b = (ts // interval) * interval
    buckets[b] = px
  if not buckets:
    return []
  sorted_buckets = sorted(buckets.items())
  return sorted_buckets

(注:由于长度限制,脚本未完整展示,但核心逻辑已包含。)

发布于: 2026年6月23日 · 5 分钟 · SightWhale

相关文章