111 lines
3.0 KiB
Python
111 lines
3.0 KiB
Python
"""
|
|
Polymarket 天气市场价格查询
|
|
直接获取 YES/NO 的真实买入价格(Ask)
|
|
"""
|
|
import requests
|
|
|
|
# ============ 配置 ============
|
|
# 替换成你要查的 token_id(从 Gamma API 获取)
|
|
YES_TOKEN_ID = "你的YES_token_id"
|
|
NO_TOKEN_ID = "你的NO_token_id"
|
|
|
|
CLOB_BASE = "https://clob.polymarket.com"
|
|
GAMMA_BASE = "https://gamma-api.polymarket.com"
|
|
# ============ 方法1: 快速查价格 ============
|
|
def get_price(token_id, side="buy"):
|
|
"""获取单个 token 的买入/卖出价格"""
|
|
resp = requests.get(f"{CLOB_BASE}/price", params={
|
|
"token_id": token_id,
|
|
"side": side.upper()
|
|
})
|
|
data = resp.json()
|
|
return float(data.get("price", 0))
|
|
|
|
# ============ 方法2: 查完整盘口 ============
|
|
def get_orderbook(token_id):
|
|
"""获取完整 orderbook,含深度"""
|
|
resp = requests.get(f"{CLOB_BASE}/book", params={
|
|
"token_id": token_id
|
|
})
|
|
return resp.json()
|
|
|
|
# ============ 方法3: 从 Gamma 发现天气市场 ============
|
|
def discover_weather_markets(city="New York"):
|
|
"""自动发现天气市场,获取 token_id"""
|
|
resp = requests.get(f"{GAMMA_BASE}/markets", params={
|
|
"tag": "weather",
|
|
"closed": "false",
|
|
"limit": 50
|
|
})
|
|
markets = resp.json()
|
|
results = []
|
|
for m in markets:
|
|
if city.lower() in m.get("question", "").lower():
|
|
tokens = m.get("tokens", [])
|
|
if len(tokens) >= 2:
|
|
yes_token = None
|
|
no_token = None
|
|
for t in tokens:
|
|
if t.get("outcome") == "Yes":
|
|
yes_token = t["token_id"]
|
|
else:
|
|
no_token = t["token_id"]
|
|
if yes_token and no_token:
|
|
results.append({
|
|
"question": m["question"],
|
|
"yes_token": yes_token,
|
|
"no_token": no_token,
|
|
"slug": m.get("market_slug", "")
|
|
})
|
|
return results
|
|
|
|
|
|
# ============ 主流程 ============
|
|
def main():
|
|
print("📡 正在发现 NYC 天气市场...\n")
|
|
markets = discover_weather_markets("New York")
|
|
if not markets:
|
|
print("❌ 未找到天气市场,检查 Gamma API")
|
|
return
|
|
|
|
print(f"✅ 找到 {len(markets)} 个市场\n")
|
|
print("=" * 55)
|
|
|
|
for m in markets[:10]:
|
|
q = m["question"]
|
|
yes_id = m["yes_token"]
|
|
no_id = m["no_token"]
|
|
|
|
# 获取真实 Ask 价格
|
|
yes_ask = get_price(yes_id, "buy")
|
|
no_ask = get_price(no_id, "buy")
|
|
|
|
# 获取 Bid
|
|
yes_bid = get_price(yes_id, "sell")
|
|
|
|
spread = yes_ask - yes_bid if yes_ask and yes_bid else None
|
|
|
|
# 获取盘口深度
|
|
book = get_orderbook(yes_id)
|
|
ask_depth = sum(float(o.get("size", 0)) for o in book.get("asks", [])[:3])
|
|
bid_depth = sum(float(o.get("size", 0)) for o in book.get("bids", [])[:3])
|
|
|
|
# 流动性判断
|
|
if ask_depth < 50:
|
|
liq = "🔴枯竭"
|
|
elif ask_depth < 500:
|
|
liq = "🟡正常"
|
|
else:
|
|
liq = "🟢充裕"
|
|
|
|
print(f"\n📊 {q}")
|
|
print(f" YES Ask: {yes_ask*100:.1f}¢ | NO Ask: {no_ask*100:.1f}¢")
|
|
print(f" YES Bid: {yes_bid*100:.1f}¢ | Spread: {spread*100:.1f}¢" if spread else " YES Bid: --")
|
|
print(f" 深度: Ask ${ask_depth:.0f} | Bid ${bid_depth:.0f} | {liq}")
|
|
print(f" 🔗 https://polymarket.com/event/{m['slug']}")
|
|
|
|
print("\n" + "=" * 55)
|
|
print("💡 价格单位: Ask = 你买入要付的价格")
|
|
|
|
if __name__ == "__main__":
|
|
main() |