教程

用 Polygon Python SDK 接入美股数据

接口路径和返回结构与 Polygon 一致,官方 Python SDK 直接可用:创建客户端时换成明海数据的 API Key 和服务地址,其余代码不用改。

适合两类人:已经有基于 Polygon SDK 写好的代码、想换一个国内能直接人民币付款的数据源;或者刚开始写,想用一个成熟的 SDK 而不是自己拼 HTTP 请求。下面的示例都用 polygon-api-client 1.16.3 实际跑通过。

安装

pip install polygon-api-client

创建客户端

和官方用法唯一的区别是多传一个 base:

import os
from polygon import RESTClient

client = RESTClient(
    api_key=os.environ["MH_API_KEY"],   # 你的明海数据 API Key,建议放在环境变量里
    base="https://marilux.dev",
)

已有代码迁移过来,只改创建客户端这一处即可,后面的调用不用动。

股票:K线和上一交易日

bars = client.list_aggs("AAPL", 1, "day", "2026-10-01", "2026-10-16")
for b in bars:
    print(b.timestamp, b.open, b.high, b.low, b.close, b.volume)

prev = client.get_previous_close_agg("AAPL")
print(prev[0].close)

时间粒度把 "day" 换成 "minute" 或 "hour",第二个参数是倍数,比如 5, "minute" 就是 5 分钟K。

自动翻页

SDK 里以 list_ 开头的方法会顺着 next_url 自动翻页,直接 for 循环即可。limit 是每页条数,不是总条数,设大一点请求次数少、速度快:

for t in client.list_tickers(market="stocks", active=True, limit=1000):
    print(t.ticker, t.name)

期权:合约、期权链和单个合约

# 某个到期日的全部看涨合约
contracts = list(client.list_options_contracts(
    underlying_ticker="AAPL", expiration_date="2026-10-23", contract_type="call", limit=1000))

# 整条期权链快照(含希腊值、隐含波动率、未平仓量)
for o in client.list_snapshot_options_chain("AAPL", params={"expiration_date": "2026-10-23", "limit": 250}):
    if o.greeks:  # 部分合约没有希腊值
        print(o.details.ticker, o.greeks.delta, o.implied_volatility, o.open_interest)

# 单个合约
s = client.get_snapshot_option("AAPL", "O:AAPL261023C00345000")
print(s.greeks.delta, s.implied_volatility)

# 期权K线和逐笔成交,用法和股票一样,代码换成期权代码
bars = client.list_aggs("O:AAPL261023C00345000", 1, "day", "2026-10-01", "2026-10-16")
trades = client.list_trades("O:AAPL261023C00345000", timestamp="2026-10-16", limit=50000)

期权数据需要开通期权套餐。期权代码的格式见 美股期权代码格式详解,各字段含义见 用 Python 获取美股期权链和希腊值。

WebSocket 实时推送

SDK 的 WebSocketClient 也能直接用,feed 填服务的域名:

import os
from polygon import WebSocketClient

ws = WebSocketClient(
    api_key=os.environ["MH_API_KEY"],
    feed="marilux.dev",
    market="stocks",
    subscriptions=["T.AAPL", "T.NVDA"],   # T = 逐笔成交,Q = 逐笔报价
)

def handle_msg(msgs):
    for m in msgs:
        print(m.symbol, m.price, m.size)

ws.run(handle_msg=handle_msg)

WebSocket 是高级版套餐的功能,订阅数和连接数上限见 WebSocket 文档。

注意事项

  • 套餐范围:调用套餐外的接口返回 404,查询超出套餐历史范围的数据返回 403,SDK 会抛出异常,不会返回错误数据。各套餐范围见 文档首页。
  • 额度:每次请求都计入每日调用额度,包括 SDK 自动翻页的每一页。用量可以在控制台查看,规则见 响应头与额度。
  • 其他语言:Node.js、Go 等语言的 SDK 或 HTTP 客户端,同样只要把服务地址换成 https://marilux.dev。
开始使用:注册账号后用兑换码激活,API Key 立即生成;股票入门版 ¥39 起,期权套餐 ¥99 起,人民币付款。查看套餐 →