第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

Python如何快速接入聚合數(shù)據(jù)行情API

標(biāo)簽:
Java JavaScript Python

聚合数据行情API,指的是一个接口即可提供多个不同交易品种的行情数据查询,这种接口,可以让你同时查询A股、美股、外汇等多种资产的行情数据。无论你需要实时获取某个品种的报价,还是需要获取历史数据,API都能为你提供丰富的资源。今天,我将分享如何用Python来调用infoway API

一、批量查询K线

查询多个交易品种的实时K线数据非常简单。查询的地址结构如下:

https://data.infoway.io/common/batch_kline/{klineType}/{klineNum}/{codes}

其中,URL包含了三个主要部分,分别是klineTypeklineNumcodes。我们来逐个详细解析这些部分的含义。

1.1 klineType(K线时间类型)

klineType表示你想要查询的K线的时间间隔(即每根K线的时间跨度)。不同的时间跨度对应着不同的klineType值,具体说明如下:

类型 描述
1 1分钟k线
2 5分钟k线
3 15分钟k线
4 30分钟k线
5 1小时k线
6 2小时k线
7 4小时k线
8 1日k线
9 1周k线
10 1月k线
11 1季k线
12 1年k线

根据你的需求,选择相应的klineType来指定你想要查询的K线类型。例如,如果你想查询5分钟K线数据,klineType应设置为2

1.2 klineNum(K线数量)

klineNum表示你想要查询的K线数量。该参数允许你指定查询多少根K线,最大支持500根K线。例如,如果你需要获取过去500根1分钟K线数据,klineNum应设置为500

1.3 codes(交易品种代码)

codes部分包含了你需要查询的多个交易品种代码,多个交易品种代码之间通过%2C(逗号的URL编码)进行分隔。每个交易品种代码代表一个资产类别的标识符,如 USDCNY(美元对人民币)、XAUAUD(黄金对澳元)等。

你可以查询多个交易品种的数据,只需要在codes中列出所有品种代码,并使用逗号分隔。例如,查询 USDCNYXAUAUDCN50 三个交易品种的K线数据,codes应设置为 USDCNY%2CXAUAUD%2CCN50

1.4 代码示例:

import requests

# 设置API的URL,查询多个交易品种的实时K线数据
url = "https://data.infoway.io/common/batch_kline/1/10/USDCNY%2CXAUAUD%2CCN50"

# 设置请求头,包含密钥,可以在官网https://infoway.io申请
headers = {
    'User-Agent': 'Mozilla/5.0',
    'Accept': 'application/json',
    'apiKey': 'yourApikey'  # 请替换为你实际的API Key
}

# 发送GET请求
response = requests.get(url, headers=headers)

# 输出HTTP响应状态和返回的内容
print(f"HTTP code: {response.status_code}")
print(f"message: {response.text}")

# 如果请求成功,进一步解析返回的JSON数据
if response.status_code == 200:
    data = response.json()  # 解析JSON响应内容
    for item in data['data']:
        print(f"交易品种: {item['s']}")
        for kline in item['respList']:
            print(f"时间戳: {kline['t']}, 开盘价: {kline['o']}, 最高价: {kline['h']}, 最低价: {kline['l']}, 收盘价: {kline['c']}, 成交量: {kline['v']}, 加权平均价: {kline['vw']}")
else:
    print("请求失败,无法获取数据")

返回结果如下:

{
  "ret": 200,
  "msg": "success",
  "traceId": "43fe7163-abb2-4a59-b6b2-2af4dc8c4141",
  "data": [
    {
      "s": "XAUAUD",
      "respList": [
        {
          "t": "1750177320",
          "h": "5190.07400",
          "o": "5187.17600",
          "l": "5187.17600",
          "c": "5190.07400",
          "v": "7.0",
          "vw": "36324.7220",
          "pc": "0.07%",
          "pca": "3.78600"
        },
        {
          "t": "1750177260",
          "h": "5187.41400",
          "o": "5186.28800",
          "l": "5186.28800",
          "c": "5187.41400",
          "v": "13.0",
          "vw": "67425.1220",
          "pc": "0.01%",
          "pca": "0.52400"
        }
      ]
    },
    {
      "s": "USDCNY",
      "respList": [
        {
          "t": "1750175580",
          "h": "7.18400",
          "o": "7.18400",
          "l": "7.18400",
          "c": "7.18400",
          "v": "1.0",
          "vw": "7.1840",
          "pc": "0.00%",
          "pca": "0.00030"
        },
        {
          "t": "1750175280",
          "h": "7.18370",
          "o": "7.18370",
          "l": "7.18370",
          "c": "7.18370",
          "v": "1.0",
          "vw": "7.18370",
          "pc": "0.00%",
          "pca": "0.00010"
        }
      ]
    },
    {
      "s": "CN50",
      "respList": [
        {
          "t": "1750177320",
          "h": "13441.17000",
          "o": "13441.17000",
          "l": "13440.17000",
          "c": "13440.17000",
          "v": "2.0",
          "vw": "26881.340",
          "pc": "-0.01%",
          "pca": "-2.00000"
        },
        {
          "t": "1750177260",
          "h": "13442.17000",
          "o": "13442.17000",
          "l": "13441.17000",
          "c": "13441.17000",
          "v": "2.0",
          "vw": "26883.340",
          "pc": "-0.01%",
          "pca": "-1.00000"
        }
      ]
    }
  ]
}

二、WebSocket订阅行情数据

除了通过HTTP请求查询行情数据外,还可以使用WebSocket订阅实时行情数据。这种方式适合需要实时数据推送的场景,例如在量化交易系统中,你可以通过WebSocket持续接收市场行情数据,而不需要频繁地发送HTTP请求。

接下来,我们来看一下如何使用WebSocket来连接并订阅行情数据:

import asyncio
import json
import websockets

# WebSocket连接URL,包含API密钥
#密钥请在官网https://infoway.io申请
WS_URL = "wss://data.infoway.io/ws?business=crypto&apikey=yourApikey"

async def connect_and_receive():
    async with websockets.connect(WS_URL) as websocket:
        # 发送初始消息,订阅特定品种(此处是BTCUSDT)
        init_message = {
            "code": 10000,
            "trace": "01213e9d-90a0-426e-a380-ebed633cba7a",
            "data": {"codes": "BTCUSDT"}
        }
        await websocket.send(json.dumps(init_message))

        # 设置ping任务,定期发送ping消息保持连接
        async def send_ping():
            while True:
                await asyncio.sleep(30)  # 每30秒发送一次ping消息
                ping_message = {
                    "code": 10010,
                    "trace": "01213e9d-90a0-426e-a380-ebed633cba7a"
                }
                await websocket.send(json.dumps(ping_message))

        # 启动ping任务
        ping_task = asyncio.create_task(send_ping())
        
        try:
            # 持续接收WebSocket返回的消息
            while True:
                message = await websocket.recv()
                print(f"Message received: {message}")
        except websockets.exceptions.ConnectionClosedOK:
            print("Connection closed normally")
        finally:
            # 取消ping任务
            ping_task.cancel()

# 启动主协程来运行WebSocket连接
asyncio.run(connect_and_receive())

2.1 WebSocket连接URL

WS_URL = "wss://data.infoway.io/ws?business=crypto&apikey=yourApikey"这个URL是WebSocket的连接地址,其中business=crypto表示我们需要订阅加密货币的行情数据(你可以根据实际需求修改这个参数),apikey=yourApikey是你的API密钥,必须替换为你自己的API密钥。

2.2 发送初始订阅消息

我们需要发送一条初始消息来指定需要订阅的品种,在这个例子中我们订阅的是BTCUSDT。消息格式如下:

{
    "code": 10000,
    "trace": "01213e9d-90a0-426e-a380-ebed633cba7a",
    "data": {"codes": "BTCUSDT"}
}

这里的code是消息类型,trace是消息的跟踪ID,data中包含我们需要订阅的品种代码(此处是BTCUSDT)。

2.3 发送ping消息

为了保持WebSocket连接活跃,我们定期发送ping消息。WebSocket连接在不活跃时可能会被关闭,因此我们每隔30秒发送一次ping消息。格式如下:

{
    "code": 10010,
    "trace": "01213e9d-90a0-426e-a380-ebed633cba7a"
}

2.4 接收实时消息

在主循环中,程序通过await websocket.recv()持续接收从WebSocket服务器推送的实时数据。每当接收到数据时,我们会打印出来。可以根据自己的需求处理这些数据,例如提取行情信息、执行交易决策等。

2.5 异常处理与关闭连接

如果连接被正常关闭,websockets.exceptions.ConnectionClosedOK异常会被捕获,程序会输出"Connection closed normally"。

最后,我们取消了ping_task任务,以确保关闭WebSocket连接时能正常清理资源。

2.6 使用asyncio运行

由于WebSocket是异步的,因此我们使用asyncio.run(connect_and_receive())来运行整个协程。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消