在跨境外贸结算、离岸资产对冲、人民币汇率趋势分析程序开发场景中,美元离岸人民币 usdcnh 是核心监测货币对。轮询方式会产生固定延迟,采用 WebSocket 长连接能够实时捕捉汇率瞬间波动,完整覆盖心跳保活、断线重连、数据包解析全流程,下文全部代码可直接本地运行,附带完整服务端返回 JSON 结构,便于业务逻辑开发。

一、通信基础规范

1、长连接统一地址:ws://39.107.99.235/ws

2、目标订阅编码:usdcnh

3、心跳强制规则:客户端每 10 秒推送 {"ping": 十位 Unix 时间戳},长时间无心跳会被服务端断开连接

4、订阅报文格式:连接成功后发送 {"Key":"品种编码"},单品种直接填写 usdcnh

5、推送机制:仅价格、盘口产生变动时下发数据包,无重复冗余推送

二、完整可运行 Python 代码

import websocket
import json
import time
import threading

# 配置订阅标的
target_code = "fx_susdcnh"

def heartbeat_task(ws_conn):
    # 独立子线程持续发送心跳
    while True:
        timestamp = int(time.time())
        ws_conn.send(json.dumps({"ping": timestamp}))
        time.sleep(10)

def on_open(ws_conn):
    print("离岸人民币行情长连接建立完成,发起订阅")
    sub_msg = json.dumps({"Key": target_code})
    ws_conn.send(sub_msg)
    # 启动守护心跳线程
    threading.Thread(target=heartbeat_task, args=(ws_conn,), daemon=True).start()

def on_message(ws_conn, msg_text):
    try:
        raw_data = json.loads(msg_text)
        if "body" in raw_data:
            quote_info = raw_data["body"]
            print("==== fx_susdcnh 离岸人民币实时行情 ====")
            print(f"品种编码:{quote_info['StockCode']}")
            print(f"实时汇率:{quote_info['Price']}")
            print(f"当日开盘:{quote_info['Open']}")
            print(f"昨日收盘:{quote_info['LastClose']}")
            print(f"日内高低区间:{quote_info['High']}/{quote_info['Low']}")
            print(f"买一档报价:{quote_info['BP1']},卖一档报价:{quote_info['SP1']}")
            print(f"单日涨跌额:{quote_info['Diff']},涨跌幅:{quote_info['DiffRate']}%")
            print(f"数据更新时间戳:{quote_info['LastTime']}")
            print("========================================\n")
    except Exception as e:
        print("行情数据包解析异常:", str(e))

def on_close(ws_conn, close_code, tips):
    print("离岸人民币行情连接断开,3秒后自动重连")
    time.sleep(3)
    start_ws_service()

def on_error(ws_conn, err_info):
    print("长连接通信异常:", str(err_info))

def start_ws_service():
    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_ws_service()

三、服务端完整返回 JSON 样例

{
    "body": {
        "StockCode": "fx_susdcnh",
        "Price": 7.2468,
        "Open": 7.2312,
        "LastClose": 7.2295,
        "High": 7.2513,
        "Low": 7.2241,
        "Time": "2026-07-09 10:18:32",
        "LastTime": 1783664312,
        "BP1": 7.2462,
        "BV1": 3210,
        "SP1": 7.2468,
        "SV1": 2876,
        "TotalVol": "",
        "Diff": 0.0173,
        "DiffRate": 0.24
    }
}

四、字段详细说明

StockCode:交易品种唯一编码,区分在岸 / 离岸人民币;

Price:实时兑换价格;

Open/LastClose:当日开盘、前一日收盘;

High/Low:日内最高最低汇率;

BP1、SP1:买卖一档挂单价格;

DiffRate:当日涨跌幅;

五、工程落地注意事项

1、程序必须保留自动重连逻辑,本地断网、服务端网络波动均可自动恢复行情接收;

2、心跳线程设置为守护模式,主线程退出同步终止心跳循环;

3、离岸人民币全天具备交易流动性,程序无需设置休眠停机逻辑;

4、解析层增加异常捕获,防止畸形数据包直接导致脚本崩溃。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐