You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地Python脚本连接Polygon.io Stocks WebSocket无数据输出问题

问题排查与修复方案

1. 修正订阅代码(逐秒聚合的正确格式)

你当前订阅的AM.TSLA是分钟级聚合数据的标识,如果需要逐秒聚合数据,应使用A.TSLA(A代表Second Aggregates)作为订阅字符串。

2. 修正run()方法的调用方式

代码中ws_client.run(handle_msg)存在错误,run()方法不需要传入消息处理函数——你已经通过ws_client.on_message = handle_msg绑定了回调,重复传入会导致逻辑冲突。应改为:

ws_client.run()

3. 明确指定市场类型(可选但推荐)

创建WebSocketClient时,显式指定market="stocks",确保连接到正确的股票数据流频道:

ws_client = WebSocketClient(api_key=api_key, market="stocks", subscriptions=["A.TSLA"])

4. 确认测试时段是否为美股交易时段

逐秒聚合数据仅在美股常规交易时段(美东时间9:30-16:00)实时推送,盘前/盘后时段数据频率极低或无数据,非交易时段运行脚本自然不会有数据流输出。

5. 增强日志适配客户端版本

部分版本的Polygon Python客户端中,消息数据的属性可能不是m.json而是m.data,可以修改回调函数兼容两种情况:

def handle_msg(msg):
    print("Received raw message:", msg)
    if isinstance(msg, list):
        for m in msg:
            try:
                print("Parsed data:", m.json)
            except AttributeError:
                print("Parsed data:", m.data)
    else:
        try:
            print("Parsed data:", msg.json)
        except AttributeError:
            print("Parsed data:", msg.data)

修复后的完整代码

import pandas as pd
import sys
import json
sys.path.insert(0, '/wamp64/www/market-data/py/client-python')
from polygon import WebSocketClient
from polygon.websocket.models import WebSocketMessage
from typing import List

def on_open(ws):
    print("WebSocket connection opened.")

def handle_msg(msg):
    print("Received raw message:", msg)
    if isinstance(msg, list):
        for m in msg:
            try:
                print("Parsed message data:", m.json)
            except AttributeError:
                print("Parsed message data:", m.data)
    else:
        try:
            print("Parsed message data:", msg.json)
        except AttributeError:
            print("Parsed message data:", msg.data)

def on_close(ws):
    print("Connection closed")

def on_error(ws, error):
    print("Error:", error)

def main():
    print("Starting WebSocket client...")

    # Polygon API key
    api_key = '####'

    # 创建WebSocket客户端,指定市场类型与正确的订阅
    ws_client = WebSocketClient(api_key=api_key, market="stocks", subscriptions=["A.TSLA"])

    print("获取A.TSLA逐秒聚合数据...")
    
    # 绑定回调函数
    ws_client.on_open = on_open
    ws_client.on_message = handle_msg
    ws_client.on_close = on_close
    ws_client.on_error = on_error
    
    # 启动客户端(无需重复传入回调)
    ws_client.run()

    print("WebSocket客户端运行中...按Enter停止监听。")
    try:
        input()
    finally:
        ws_client.close()
        print("WebSocket连接已关闭。")

if __name__ == "__main__":
    main()

内容的提问来源于stack exchange,提问作者Alexnl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:35:24