实时行情数据是量化交易、可视化看盘和金融决策的基础。本文从技术角度解析 WebSocket API 的核心价值,并通过实战示例展示如何用免费 API 一站式获取股票、外汇与贵金属的实时价格推送。
什么是 WebSocket API
WebSocket API 基于 WebSocket 协议,在客户端与服务器之间建立一条持久的全双工通信通道。连接一旦建立,服务器就可以随时主动向客户端发送数据,无需客户端反复发起请求。在金融行情领域,这一特性使其天然适合实时价格推送,比如毫秒级的成交更新、深度报价等。
WebSocket API 与 REST API 的对比
传统的 REST API 采用“请求-响应”模式,获取实时数据通常依赖客户端轮询,存在明显劣势:
| 维度 | REST API(轮询) | WebSocket API |
|---|---|---|
| 数据推送方式 | 客户端必须定时请求,服务端被动响应 | 服务端主动推送,数据变即送达 |
| 延迟 | 取决于轮询频率,过高造成延迟,过密则加重负载 | 毫秒级实时推送,无轮询间隔 |
| 带宽与开销 | 每次请求都携带完整的 HTTP 头部,高频下浪费严重 | 一次握手后头部开销极小,持续传输 |
| 服务器压力 | 大量客户端频繁轮询易导致资源飙升 | 长连接模型下,资源占用平稳可控 |
| 适用场景 | 历史数据查询、非实时操作 | 逐笔成交、报价、深度等实时行情 |
对于需要持续追踪价格变化的应用,WebSocket API 在实时性、效率和吞吐量上都有质的提升。因此,现代金融数据服务几乎都将 WebSocket 作为实时推送的主流通道。
实战接入:订阅实时行情数据
以下用 Python 演示如何通过 WebSocket 分别订阅股票、外汇和贵金属实时行情。示例中的行情 API 提供 7 天全功能免费试用,期间可访问全球全市场数据并进行 WebSocket 压力测试,非常适合开发评估。
示例依赖
websocket-client,请先安装:
pip install websocket-client
1. 订阅股票实时行情
以美股 AAPL 为例,建立 WebSocket 连接并订阅其最新成交价。代码完成连接、认证、订阅和消息接收。
import websocket
import json
API_KEY = "YOUR_TRIAL_API_KEY" # 试用期 API Key
WS_URL = f"wss://api.alltick.io/ws/v1?apikey={API_KEY}"
def on_message(ws, message):
data = json.loads(message)
# 订阅确认或心跳忽略打印;行情数据包含 price 字段
if data.get("method") == "update" and "price" in data.get("params", {}):
p = data["params"]
print(f"[股票] {p['symbol']} 最新价: {p['price']} 时间: {p.get('timestamp')}")
def on_open(ws):
# 订阅美股 AAPL
sub = {
"method": "subscribe",
"params": {"symbols": ["AAPL.US"]},
"id": 1
}
ws.send(json.dumps(sub))
print("已发送股票订阅: AAPL.US")
def on_error(ws, error):
print(f"连接错误: {error}")
def on_close(ws, close_status_code, close_msg):
print("连接关闭")
ws = websocket.WebSocketApp(WS_URL,
on_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.run_forever()
运行后,控制台会持续输出类似:
已发送股票订阅: AAPL.US
[股票] AAPL.US 最新价: 187.32 时间: 2026-06-11T10:28:15.123Z
[股票] AAPL.US 最新价: 187.35 时间: 2026-06-11T10:28:16.010Z
只需替换 symbols 数组,即可订阅任意市场股票(如 700.HK 港股、600519.SH A 股等),试用期内全市场均无限制。
2. 订阅外汇实时行情
外汇数据同样使用同一 WebSocket 端点,仅需修改品种代码。以下演示订阅 EUR/USD 现汇实时报价。
import websocket
import json
API_KEY = "YOUR_TRIAL_API_KEY"
WS_URL = f"wss://api.alltick.io/ws/v1?apikey={API_KEY}"
def on_message(ws, message):
data = json.loads(message)
if data.get("method") == "update" and "price" in data.get("params", {}):
p = data["params"]
print(f"[外汇] {p['symbol']} 最新价: {p['price']} 时间: {p.get('timestamp')}")
def on_open(ws):
# 订阅欧元/美元
sub = {
"method": "subscribe",
"params": {"symbols": ["EUR/USD"]},
"id": 2
}
ws.send(json.dumps(sub))
print("已发送外汇订阅: EUR/USD")
def on_error(ws, error):
print(f"连接错误: {error}")
def on_close(ws, close_status_code, close_msg):
print("连接关闭")
ws = websocket.WebSocketApp(WS_URL,
on_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.run_forever()
输出效果:
已发送外汇订阅: EUR/USD
[外汇] EUR/USD 最新价: 1.07842 时间: 2026-06-11T10:29:21.543Z
[外汇] EUR/USD 最新价: 1.07844 时间: 2026-06-11T10:29:21.978Z
3. 订阅贵金属实时行情
用 XAU/USD 获取黄金现货的实时价格,代码结构与股票、外汇完全一致。
import websocket
import json
API_KEY = "YOUR_TRIAL_API_KEY"
WS_URL = f"wss://api.alltick.io/ws/v1?apikey={API_KEY}"
def on_message(ws, message):
data = json.loads(message)
if data.get("method") == "update" and "price" in data.get("params", {}):
p = data["params"]
print(f"[贵金属] {p['symbol']} 最新价: {p['price']} 时间: {p.get('timestamp')}")
def on_open(ws):
# 订阅黄金现货
sub = {
"method": "subscribe",
"params": {"symbols": ["XAU/USD"]},
"id": 3
}
ws.send(json.dumps(sub))
print("已发送贵金属订阅: XAU/USD")
def on_error(ws, error):
print(f"连接错误: {error}")
def on_close(ws, close_status_code, close_msg):
print("连接关闭")
ws = websocket.WebSocketApp(WS_URL,
on_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.run_forever()
推送示例:
已发送贵金属订阅: XAU/USD
[贵金属] XAU/USD 最新价: 2345.67 时间: 2026-06-11T10:30:05.112Z
[贵金属] XAU/USD 最新价: 2345.72 时间: 2026-06-11T10:30:05.437Z
三次示例清晰地说明:同一套 WebSocket 接口只需改变品种参数,即可覆盖股票、外汇、贵金属等多种资产类别。实际开发时,可以把它们合并到一个连接中,一次性订阅多个品种以降低连接开销。
总结
WebSocket API 凭借服务端主动推送、低延迟和低资源消耗的优势,已经成为实时行情接入的标准方案。通过统一接口订阅不同资产,可以大幅降低系统复杂度与维护成本。
本文示例中的 AllTick API 为新用户提供 7 天全功能免费试用,期间无限制访问全球股票、外汇、贵金属等全市场行情,且明确支持 WebSocket 压测,方便在正式接入前验证稳定性与吞吐量。对于正在评估实时数据源的团队或个人开发者,这是一个务实且低风险的选择。
GitHub:https://github.com/alltick/alltick-realtime-forex-crypto-stock-tick-finance-websocket-api
