Python WebSocket 实时订阅 NQ(小型纳斯达克指数)完整监听程序

正文

在跨境指数交易、美股联动策略、海外资产风险监控开发中,小纳指 NQ 是高频使用的热门外盘股指品种。多数交易者、开发人员日常习惯称其通用简称 NQ,但对接行情接口时需要使用平台内部专属编码,本文清晰区分市场通用名称与接口订阅代码,完整实现长连接心跳、订阅、实时行情推送、断线自动重连全套逻辑,代码可直接部署服务器 7×24 小时不间断运行,附带完整返回 JSON 结构与全部字段详细解读,同时说明股指类数据独有特征。

一、品种编码对应说明

  1. 市场通用交易简称:NQ(小型纳斯达克指数,俗称小纳指)
  2. 接口订阅专用编码:HX_NQ
  3. WebSocket 统一长连接地址:ws://39.107.99.235/ws

二、长连接通信硬性规范

  1. 链路存活规则:客户端每 10 秒发送 {"ping": 10位Unix秒级时间戳},长期无心跳报文会被服务端主动断开;
  2. 订阅流程:连接成功回调内仅发送一次订阅指令 {"Key":"HX_NQ"},无需重复发送;
  3. 推送机制:仅 NQ 点位、盘口数据发生变动时下发数据包,无行情变动不会产生多余网络流量;
  4. 股指数据特性:无大量逐笔成交数据,买卖五档深度字段为空,核心以点位、日内涨跌数据为主。

三、完整可运行 Python 监听代码

python 复制代码
import websocket
import json
import time
import threading

# 市场通用简称:NQ 小纳指,接口订阅编码
subscribe_code = "HX_NQ"

def heartbeat_task(ws_conn):
    # 独立守护子线程循环发送心跳包,维持链路在线
    while True:
        try:
            timestamp = int(time.time())
            heartbeat_msg = json.dumps({"ping": timestamp})
            ws_conn.send(heartbeat_msg)
        except Exception:
            # 心跳发送失败仅跳过本次,不中断循环
            pass
        time.sleep(10)

def on_open(ws_conn):
    print("长连接创建成功,准备订阅NQ小型纳斯达克指数(接口编码HX_NQ)")
    # 组装订阅报文发送至行情服务
    sub_payload = json.dumps({"Key": subscribe_code})
    ws_conn.send(sub_payload)
    # 启动心跳守护线程
    heartbeat_thread = threading.Thread(target=heartbeat_task, args=(ws_conn,), daemon=True)
    heartbeat_thread.start()

def on_message(ws_conn, msg_text):
    """接收并解析小纳指实时推送行情"""
    try:
        raw_data = json.loads(msg_text)
        if "body" not in raw_data:
            return
        quote = raw_data["body"]
        print("================ NQ 小纳指 实时行情更新 ================")
        print(f"接口内部编码:{quote['StockCode']} | 市场通用简称:NQ(小型纳指)")
        print(f"实时指数点位:{quote['Price']}")
        print(f"当日开盘点位:{quote['Open']}")
        print(f"前一交易日收盘点位:{quote['LastClose']}")
        print(f"日内最高点位:{quote['High']},日内最低点位:{quote['Low']}")
        print(f"当日涨跌点数:{quote['Diff']},涨跌幅百分比:{quote['DiffRate']}%")
        print(f"行情更新标准时间:{quote['Time']},时间戳:{quote['LastTime']}")
        print("注:股指品种无五档盘口、成交量数据")
        print("=========================================================\n")
    except json.JSONDecodeError:
        print("收到非标准格式报文,跳过解析流程")
    except Exception as err:
        print("行情数据解析出现异常:", str(err))

def on_close(ws_conn, close_code, close_info):
    """连接断开后自动延时重连"""
    print(f"NQ小纳指行情链路断开,断开标识{close_code},3秒后执行重连逻辑")
    time.sleep(3)
    start_nq_ws()

def on_error(ws_conn, error_info):
    print("WebSocket底层通信发生异常:", str(error_info))

def start_nq_ws():
    """程序入口,初始化长连接实例"""
    ws_app = websocket.WebSocketApp(
        url="ws://39.107.99.235/ws",
        on_open=on_open,
        on_message=on_message,
        on_close=on_close,
        on_error=on_error
    )
    ws_app.run_forever()

if __name__ == "__main__":
    start_nq_ws()

四、服务端推送完整 JSON 数据包示例

bash 复制代码
{
    "body": {
        "StockCode": "HX_NQ",
        "Price": 19426.75,
        "Open": 19351.00,
        "LastClose": 19338.25,
        "High": 19462.50,
        "Low": 19320.00,
        "Time": "2026-07-10 15:21:46",
        "LastTime": 1783744906,
        "BP1": "",
        "BV1": "",
        "SP1": "",
        "SV1": "",
        "TotalVol": "",
        "Diff": 88.50,
        "DiffRate": 0.46
    }
}

五、全部字段详细业务释义

  1. StockCode:平台内部接口编码 HX_NQ,对外通用交易名称 NQ 小纳指;
  2. Price:指数实时最新点位,是趋势判断核心数值;
  3. Open / LastClose:当日开盘点位、上一交易日收盘基准点位;
  4. High / Low:截至当前交易日的最高、最低波动点位;
  5. Time / LastTime:格式化可读时间、10 位秒级时间戳,用于日志与时序排序;
  6. BP1、SP1、TotalVol:股指类品种无盘口、成交量数据,字段为空字符串;
  7. Diff:当日涨跌绝对点数,DiffRate:标准化涨跌幅百分比。

六、程序线上部署与业务拓展说明

  1. 容错机制:多层异常捕获,畸形数据包、心跳发送失败都不会直接终止整个监听程序,适合后台长期驻留;
  2. 重连逻辑:断连设置 3 秒冷却时间,避免本地断网、服务器波动时高频重复创建连接;
  3. 适用业务:美股联动量化脚本、跨境资产监控后台、网页外盘指数盯盘页面、隔夜风险预警工具;
  4. 拓展方式:如需同时监控德指 DAX、恒指 HSI 等其他股指,仅修改 subscribe_code 参数,多个编码使用英文逗号分隔,数据解析代码无需任何改动;
  5. 时段适配:纳指分美盘、盘前盘后多个交易时段,长连接全天候同步全部时段点位,无需手动启停程序。
相关推荐
【赫兹威客】浩哥2 小时前
基于SpringBoot+Vue3的健身运动管理系统|WebSocket实时消息 健身房毕设项目
spring boot·websocket·课程设计
Amir_zy1 天前
TCP/IP 与 WebSocket 测试实战:从底层原理到场景落地
websocket·网络协议·tcp/ip
名字还没想好☜1 天前
Next.js Route Handler 做 SSE 服务端推送:实时进度条、自动重连与什么时候别用 WebSocket
开发语言·javascript·websocket·react·sse·next.js
胸中有沟壑3 天前
SpringBoot使用WebSocket
spring boot·后端·websocket
海鸥两三3 天前
【websocket合集2】websocket.js源码解析和页面调用示例
javascript·websocket·网络协议
小小龙学IT4 天前
Boost.Beast 深度实战:基于 Asio 的开源 C++ HTTP/WebSocket 协议库
c++·websocket·http
tech讯息4 天前
企业 AI Agent 对接外部服务如何安全集成?—— 多租户业务场景优先选用 WebSocket 方案
人工智能·websocket·安全
RuoyiOffice5 天前
Springboot+WebSocket×场景×渠道:企业统一消息中心编排实战
spring boot·websocket·短信·消息中心·spring boot 3·站内信·场景编排
烟雨江南7855 天前
国产化语音识别如何落地?——灵声智库国产 CPU/OS、GPU/NPU、流式转写与离线私有化部署实践
人工智能·websocket·语音识别·ai客服·企业agent