使用Python调用WebSocket获取实时期货行情数据

在金融交易和数据分析领域,实时行情数据的获取是至关重要的。WebSocket作为一种高效的双向通信协议,非常适合用于实时数据传输。本文将介绍如何使用Python调用WebSocket接口,以获取实时期货行情数据。

一、准备工作

在开始之前,我们需要确保以下几点:

  1. Python环境:确保你的系统中已经安装了Python。建议使用Python 3.x版本。
  2. WebSocket库:我们将使用websocket-client库来建立WebSocket连接。你可以通过以下命令安装它:
pip install websocket-client
  1. 数据接口:需要一个提供实时期货行情数据的WebSocket接口。本文示例使用的接口地址为ws://39.107.99.235/ws,这个接口支持多种金融品种的数据获取,包括外汇、国际期货、国内期货等。
  2. 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
    }
}
四、代码解释
  1. 导入库
    • json:用于解析JSON格式的数据。
    • websocket:用于建立WebSocket连接。
    • threadtime:用于在后台线程中发送心跳信息。
  2. 定义回调函数
    • on_data:当接收到数据时调用,解析数据并打印关键信息。
    • on_error:当发生错误时调用,打印错误信息。
    • on_close:当连接关闭时调用,打印关闭信息。
    • on_open:当连接打开时调用,订阅所需的数据品种,并启动心跳信息发送线程。
  3. 创建WebSocket连接
    • 使用websocket.WebSocketApp创建WebSocket连接,并传入回调函数。
    • 调用ws.run_forever()启动连接,并保持运行。
五、注意事项
  1. 订阅品种:在on_open函数中,通过发送包含Key字段的JSON数据来订阅所需的品种。例如,{'Key': 'fx_usdcny'}表示订阅美元兑人民币汇率。

  2. 心跳信息:为了保持连接不断开,可以定期发送心跳信息。在示例代码中,通过后台线程每10秒发送一次心跳信息。

  3. 错误处理:在实际应用中,应该添加更多的错误处理逻辑,以确保程序的稳定性和可靠性。

  4. 安全性:确保使用的WebSocket接口是安全的,特别是在处理敏感数据时。如果需要,可以使用wss(WebSocket Secure)协议。

通过以上步骤,你可以使用Python调用WebSocket接口获取实时期货行情数据。希望这篇文章对你有所帮助!

Logo

更多推荐