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. 时段适配:纳指分美盘、盘前盘后多个交易时段,长连接全天候同步全部时段点位,无需手动启停程序。
相关推荐
console.log('npc')3 小时前
AI Agent 前端流式渲染核心技术文档(SSE \+ WebSocket \+ 打字机渲染)
前端·人工智能·websocket
sdghterhd14 小时前
WebSocket 快速入门教程(附示例源码)
网络·websocket·网络协议
宠友信息1 天前
MySQL 租户数据隔离在即时通讯源码后端中的落地方式
java·数据库·spring boot·redis·websocket·mysql
宠友信息1 天前
内容社区源码多端数据协议与 Spring Boot 状态流转实现思路
java·spring boot·websocket·uni-app
奇牙coding1231 天前
OpenAI Realtime API WebSocket 断连 4008/1006 怎么解决?不是 Key 失效,是实时多模态独有的会话超时规则
python·websocket·网络协议·ai
莫生灬灬2 天前
DY联系人聊天Web面板支持获取联系人/聊天记录/发送消息
前端·chrome·websocket·c#
code_std2 天前
java WebSocket 使用
java·开发语言·websocket
宠友信息3 天前
Redis 内容社区源码架构优化与即时通讯数据一致性处理
spring boot·后端·websocket·mysql·uni-app
宠友信息4 天前
资源权限与钱包流水在即时通讯源码后端架构中的设计
java·spring boot·redis·websocket·缓存