使用脉动行情对接期货api

脉动数据行情官网地址:http://39.107.99.235:1008/market

 联系QQ: 3132381695

 Telegram(电报1):@mdapi888  (脉动数据客服)

 Telegram(电报2):@dd111333  (火柴)

🔧 第一步:环境准备

在开始之前,请务必完成以下步骤:

  1. 安装Python库pip install requests pandas

📈 第二步:实战接口一 – 获取实时行情(HTTP)

此接口用于获取期货合约最新的报价、买卖盘和成交数据。

核心要点

  • 地址http://39.107.99.235:1008/getQuote.php
  • 方法: GET
  • 性能优化: 务必在请求头中加入 "Accept-Encoding": "gzip" 以启用压缩,加快响应速度并节省流量。

Python实现代码

import requests
import time

def get_realtime_quote(product_code):
    """
    获取合约实时行情数据
    
    Args:
        product_code (str): 产品代码,如 'HX_HST', 'btcusdt'
    
    Returns:
        dict: 解析后的行情数据字典,失败返回None
    """
    url = "http://39.107.99.235:1008/getQuote.php"
    params = {'code': product_code}
    headers = {'Accept-Encoding': 'gzip'}  # 关键:启用gzip压缩
    
    try:
        response = requests.get(url, params=params, headers=headers, timeout=5)
        response.raise_for_status()
        json_data = response.json()
        
        if json_data.get('code') == 200:
            # 核心行情数据在 data -> body 结构中
            return json_data['data']['body']
        else:
            print(f"接口返回错误: {json_data.get('msg')}")
            return None
            
    except requests.exceptions.RequestException as e:
        print(f"网络请求失败: {e}")
        return None
    except ValueError as e:
        print(f"JSON解析失败: {e}")
        return None

# 使用示例:获取恒生指数期货行情
if __name__ == '__main__':
    # 请先通过接口五查询到具体代码
    quote_data = get_realtime_quote('HX_HST')
    
    if quote_data:
        print(f"产品: {quote_data['StockCode']}")
        print(f"时间: {quote_data['Time']}")
        print(f"最新价: {quote_data['Price']} | 涨跌: {quote_data['Diff']} ({quote_data['DiffRate']}%)")
        print(f"买卖盘: 买一 {quote_data['BP1']}({quote_data['BV1']}) | 卖一 {quote_data['SP1']}({quote_data['SV1']})")
        print(f"当日成交量: {quote_data['TotalVol']}")
        
    # 严格遵守频率限制:对同一产品,请求间隔应大于 0.33秒 (1/3)
    time.sleep(0.34)

📊 第三步:实战接口二 – 获取K线数据

此接口用于获取历史K线(蜡烛图)数据,用于分析、回测和指标计算。

核心要点

  • 地址http://39.107.99.235:1008/redis.php
  • 方法: GET
  • 参数说明:
    • code: 产品代码
    • time: K线周期。可选:1m , 5m15m30m1h1d , 1M
    • rows: 获取的K线条数
  • 返回值: 一个二维数组,每条K线数据格式为:[时间戳, 开盘价, 最高价, 最低价, 收盘价, 时间字符串, 成交量]

Python实现代码

import requests
import pandas as pd
from datetime import datetime

def get_kline_data(product_code, period='1m', rows=100):
    """
    获取合约K线历史数据
    
    Args:
        product_code (str): 产品代码
        period (str): K线周期,如 '1m', '1h', '1d'
        rows (int): 获取的条数
    
    Returns:
        pandas.DataFrame: 包含K线数据的DataFrame,失败返回空DataFrame
    """
    url = "http://39.107.99.235:1008/redis.php"
    params = {
        'code': product_code,
        'time': period,
        'rows': rows
    }
    headers = {'Accept-Encoding': 'gzip'}  # 关键:启用gzip压缩
    
    try:
        response = requests.get(url, params=params, headers=headers, timeout=10)
        response.raise_for_status()
        kline_array = response.json()  # 注意:此接口直接返回数组,没有外层code/msg
        
        # 将数据转换为规整的DataFrame
        if kline_array:
            df = pd.DataFrame(
                kline_array,
                columns=['timestamp_ms', 'open', 'high', 'low', 'close', 'time_str', 'volume']
            )
            # 转换数据类型
            df['timestamp'] = pd.to_datetime(df['timestamp_ms'], unit='ms')
            df.set_index('timestamp', inplace=True)
            numeric_cols = ['open', 'high', 'low', 'close', 'volume']
            df[numeric_cols] = df[numeric_cols].apply(pd.to_numeric, errors='coerce')
            
            print(f"成功获取 {len(df)} 条 {period} K线数据")
            return df[['open', 'high', 'low', 'close', 'volume']]  # 返回常用列
        
        return pd.DataFrame()
            
    except requests.exceptions.RequestException as e:
        print(f"K线数据请求失败: {e}")
        return pd.DataFrame()
    except ValueError as e:
        print(f"K线数据解析失败: {e}")
        return pd.DataFrame()

# 使用示例:获取比特币美元期货的1小时K线
if __name__ == '__main__':
    # 获取最近100根1小时K线
    kline_df = get_kline_data('btcusdt', period='1h', rows=100)
    
    if not kline_df.empty:
        print(kline_df.tail())  # 查看最新几条数据
        # 进行简单的移动平均计算
        kline_df['ma5'] = kline_df['close'].rolling(window=5).mean()
        kline_df['ma20'] = kline_df['close'].rolling(window=20).mean()
        print("\n计算移动平均后:")
        print(kline_df[['close', 'ma5', 'ma20']].tail())
    
    # 严格遵守频率限制:对同一产品,K线请求间隔应大于 0.2秒 (1/5)
    time.sleep(0.25)

⚠️ 第四步:重要注意事项与最佳实践

  1. 启用Gzip压缩:所有请求务必在Header中加上 "Accept-Encoding": "gzip",这是提升性能的关键。
  2. 错误处理:网络环境不稳定,务必添加完善的超时和异常处理逻辑。
  3. 产品代码是核心:所有操作都依赖于正确的产品代码,请首先通过接口五(查询产品订阅代码) 确认。
  4. 数据用途:实时行情接口数据最全,包含盘口深度(Depth)和成交明细(BS);K线接口用于历史分析。

按照以上指南,你可以稳定、高效地对接脉动行情的核心数据接口。如果在对接过程中遇到具体问题,可以依据文档联系官方技术支持。 ​

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部