如何使用python调用websocket获取实时期货行情数据
本文介绍了如何使用Python通过WebSocket协议获取实时期货行情数据。首先,确保已安装Python和websocket-client库,并准备好提供实时数据的WebSocket接口。接着,文章提供了一个完整的Python代码示例,展示了如何建立WebSocket连接、订阅数据品种、处理接收到的数据以及发送心跳信息以保持连接。代码中使用了json库解析数据,并通过回调函数处理不同事件,如数据
·
使用Python调用WebSocket获取实时期货行情数据
在金融交易和数据分析领域,实时行情数据的获取是至关重要的。WebSocket作为一种高效的双向通信协议,非常适合用于实时数据传输。本文将介绍如何使用Python调用WebSocket接口,以获取实时期货行情数据。
一、准备工作
在开始之前,我们需要确保以下几点:
- Python环境:确保你的系统中已经安装了Python。建议使用Python 3.x版本。
- WebSocket库:我们将使用
websocket-client
库来建立WebSocket连接。你可以通过以下命令安装它:
pip install websocket-client
- 数据接口:需要一个提供实时期货行情数据的WebSocket接口。本文示例使用的接口地址为
ws://39.107.99.235/ws
,这个接口支持多种金融品种的数据获取,包括外汇、国际期货、国内期货等。 - K线数据接口:http
://39.107.99.235:1008/redis.php
,这个接口支持多种K线格式,如1分钟,5分钟,15分钟,30分钟,1小时,1天,1月等级别的K线数据
二、代码实现
下面是一个完整的Python示例代码,用于通过WebSocket获取实时期货行情数据:
import json
import websocket
try:
import thread
except ImportError:
import _thread as thread
import time
def on_data(ws, message, msg_type, flag):
# 解析接收到的数据
msg = json.loads(message)
if 'body' not in msg or not msg['body']:
return
data = msg['body'];
StockCode = data['StockCode'];
Price = data['Price'];
Open = data['Open'];
LastClose = data['LastClose'];
High = data['High'];
Low = data['Low'];
Diff = data['Diff'];
DiffRate = data['DiffRate'];
BP1 = data['BP1'];
BV1 = data['BV1'];
SP1 = data['SP1'];
SV1 = data['SV1'];
TotalVol = data['TotalVol'];
Time = data['Time'];
LastTime = data['LastTime'];
BS = data['BS'];
Depth = data['Depth'];
#处理业务逻辑.....
print(StockCode);
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
# print("open")
# 建立连接后订阅品种
data = {
'Key': 'btcusdt,ethusdt,fx_sgbpusd'
}
ws.send(json.dumps(data))
# 间隔10秒发送心跳信息
def run(*args):
while(True) :
time.sleep(10)
ping = {
'ping' : int(time.time())
}
ws.send(json.dumps(ping))
thread.start_new_thread(run, ())
if __name__ == "__main__":
# websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://39.107.99.235/ws", on_data = on_data, on_error = on_error, on_close = on_close)
ws.on_open = on_open
ws.run_forever()
二、数据解析
{
"body": {
"StockCode": "btcusdt",
"Price": 27206.02,
"Open": 26689.98,
"LastClose": 27206.02,
"High": 27287.74,
"Low": 26554.35,
"Time": "2023-05-28 15:43:51",
"LastTime": "1685259831",
"BP1": 27206.02,
"BV1": 0.21,
"SP1": 27206.03,
"SV1": 0.78,
"TotalVol": 2293.14,
"Depth": {
"Buy": [
{
"BP1": 27206.02,
"BV1": 0.39
},
{
"BP2": 27204.14,
"BV2": 0
},
{
"BP3": 27204.13,
"BV3": 1.28
},
{
"BP4": 27203.32,
"BV4": 0.64
},
{
"BP5": 27203.3,
"BV5": 0.68
}
],
"Sell": [
{
"SP1": 27206.03,
"SV1": 0.78
},
{
"SP2": 27206.22,
"SV2": 0.04
},
{
"SP3": 27206.96,
"SV3": 0.02
},
{
"SP4": 27208.13,
"SV4": 0.01
},
{
"SP5": 27208.14,
"SV5": 0.07
}
]
},
"BS": [
{
"time": "15:43:51",
"price": 27206.02,
"size": 0.21,
"direction": 2
},
{
"time": "15:43:51",
"price": 27206.03,
"size": 0.78,
"direction": 1
}
],
"Info": [
],
"lastSize": 0.055118,
"Diff": 516.04,
"DiffRate": 1.93
}
}
四、代码解释
- 导入库:
json
:用于解析JSON格式的数据。websocket
:用于建立WebSocket连接。thread
和time
:用于在后台线程中发送心跳信息。
- 定义回调函数:
on_data
:当接收到数据时调用,解析数据并打印关键信息。on_error
:当发生错误时调用,打印错误信息。on_close
:当连接关闭时调用,打印关闭信息。on_open
:当连接打开时调用,订阅所需的数据品种,并启动心跳信息发送线程。
- 创建WebSocket连接:
- 使用
websocket.WebSocketApp
创建WebSocket连接,并传入回调函数。 - 调用
ws.run_forever()
启动连接,并保持运行。
- 使用
五、注意事项
-
订阅品种:在
on_open
函数中,通过发送包含Key
字段的JSON数据来订阅所需的品种。例如,{'Key': 'fx_usdcny'}
表示订阅美元兑人民币汇率。 -
心跳信息:为了保持连接不断开,可以定期发送心跳信息。在示例代码中,通过后台线程每10秒发送一次心跳信息。
-
错误处理:在实际应用中,应该添加更多的错误处理逻辑,以确保程序的稳定性和可靠性。
-
安全性:确保使用的WebSocket接口是安全的,特别是在处理敏感数据时。如果需要,可以使用wss(WebSocket Secure)协议。
通过以上步骤,你可以使用Python调用WebSocket接口获取实时期货行情数据。希望这篇文章对你有所帮助!
更多推荐
所有评论(0)