本文将通过两个典型的接入示例(HTTP + WebSocket),教你如何使用 Python 接入量化行情接口,以获取股票、Crypto等实时行情数据。
步骤一:准备工作
在开始之前,确保你已具备以下环境:
-
Python 3.7+
-
已注册行情 API 服务并拿到 API Key
-
安装依赖库:
pip install requests websockets
步骤二:通过 HTTP 请求获取 K 线数据(适合批量拉取)
HTTP 接口适用于低频请求或一次性批量获取,例如日线/分钟线数据等。
import requests
# 获取API Key: www.infoway.io
api_url = 'https://data.infoway.io/stock/batch_kline/1/10/002594.SZ%2C00285.HK%2CTSLA.US'
headers = {
'User-Agent': 'Mozilla/5.0',
'Accept': 'application/json',
'apiKey': 'yourApikey'
}
response = requests.get(api_url, headers=headers)
print(f"HTTP code: {response.status_code}")
print(f"message: {response.text}")
说明:
-
URL 中的
1/10
表示请求周期为1分钟,取10条数据 -
支持多市场混合(如 A 股、港股、美股)
-
返回数据为 JSON,可直接解析成 Pandas DataFrame
步骤三:通过 WebSocket 订阅实时行情(适合高频接收)
WebSocket 更适用于持续接收推送的场景,如行情系统、自动交易等。
import asyncio
import json
import websockets
WS_URL = "wss://data.infoway.io/ws?business=crypto&apikey=yourApikey"
# 获取API Key: www.infoway.io
async def connect_and_receive():
async with websockets.connect(WS_URL) as websocket:
await websocket.send(json.dumps({
"code": 10000,
"trace": "trace-id",
"data": {"codes": "BTCUSDT"}
}))
async def send_ping():
while True:
await asyncio.sleep(30)
await websocket.send(json.dumps({
"code": 10010,
"trace": "trace-id"
}))
asyncio.create_task(send_ping())
while True:
msg = await websocket.recv()
print(f"Message: {msg}")
asyncio.run(connect_and_receive())
说明:
-
初始消息中
code: 10000
用于订阅标的(如 BTCUSDT) -
每 30 秒发送一次 ping 消息,防止连接断开
-
收到的消息格式为 JSON,可实时处理