行情接口TqApi

行情数据是策略的原料。TqSdk 提供三个核心函数获取不同粒度的行情:get_quote(实时盘口)、get_kline_serial(K 线序列)、get_tick_serial(Tick 序列)。它们返回的都是动态引用对象,随 wait_update() 自动更新。

get_quote:实时盘口行情

获取一个合约的实时盘口行情,包括最新价、买卖五档等:

from tqsdk import TqApi, TqAuth

api = TqApi(auth=TqAuth("快期账户", "账户密码"))
quote = api.get_quote("SHFE.rb2410")

while True:
    api.wait_update()
    if api.is_changing(quote, "last_price"):
        print(quote.datetime, quote.last_price, quote.bid_price1, quote.ask_price1)

Quote 常用字段

字段含义
last_price最新价(未收到时为 NaN)
bid_price1 ~ bid_price5买一到买五价
ask_price1 ~ ask_price5卖一到卖五价
bid_volume1 ~ 5 / ask_volume1 ~ 5买卖五档量
open / high / low / close开高低收
volume成交量
open_interest持仓量
pre_settlement / pre_close昨结算 / 昨收盘
upper_limit / lower_limit涨停 / 跌停价
price_tick最小变动价位
volume_multiple合约乘数

NaN 陷阱:数据未到位时,last_price 等字段为 NaN。比较前必须用 math.isnan() 检查,否则结果不可预测。

get_kline_serial:K 线序列

请求指定合约和周期的 K 线序列,返回 pandas DataFrame:

# 1 分钟线,默认 200 根
klines = api.get_kline_serial("SHFE.rb2410", 60)

# 日线,取 500 根
klines = api.get_kline_serial("SHFE.rb2410", 86400, data_length=500)

while True:
    api.wait_update()
    if api.is_changing(klines.iloc[-1], "datetime"):
        print("收盘价:", klines.close.iloc[-1])

参数说明

参数含义
symbol合约代码,如 "SHFE.rb2410"
duration_secondsK 线周期(秒):60 = 1 分钟,3600 = 1 小时,86400 = 日线
data_length序列长度,默认 200,最大 10000

日线以上的周期必须是 86400 的整数倍,最大 28 天。

DataFrame 列

列名含义
datetimeK 线起点时间(纳秒时间戳)
open / high / low / close开高低收
volume成交量
open_oi / close_oi起始 / 结束持仓量

时间戳转换用 tqsdk.tafunc.time_to_datetime()datetime.fromtimestamp(ns / 1e9)

多合约 K 线对齐

传入合约列表,可以获取按时间对齐的多合约 K 线——非常适合价差分析:

# 期权和标的对齐
klines = api.get_kline_serial(["DCE.m2501-C-3000", "DCE.m2501"], 86400, 30)
# 标的收盘价在 klines.close,期权收盘价在 klines.close1
spread = klines.close1 - klines.close

副合约字段名在原字段后加数字后缀:open1close1high2 等。

注意:不要修改或重命名返回的 DataFrame 列名,否则数据不会更新。

get_tick_serial:Tick 序列

获取 Tick 级别数据,精度比 K 线更高:

serial = api.get_tick_serial("SHFE.rb2410", 200)

while True:
    api.wait_update()
    print(serial.iloc[-1].last_price, serial.iloc[-1].bid_price1, serial.iloc[-1].ask_price1)

Tick 数据包含每笔成交的最新价、买卖一档、当日均量等,适合高频或对冲策略。

其他常用查询函数

函数含义
get_quote_list(symbols)批量获取多个合约的盘口行情
get_trading_status(symbol)获取合约交易状态(集合竞价/连续交易)
query_symbol_info(symbol)查询合约信息(乘数、保证金等)
query_quotes(...)按条件搜索合约
get_trading_calendar(start, end)获取交易日历

is_serial_ready:判断数据是否到位

订阅大量数据时,首次可能需要等待。用 is_serial_ready() 判断是否接收完毕:

klines = api.get_kline_serial("SHFE.rb2410", 60, data_length=3000)
while True:
    api.wait_update()
    if api.is_serial_ready(klines):
        print("数据已到位,共", len(klines), "根")
        break

小结

  • get_quote() 拿实时盘口,get_kline_serial() 拿 K 线,get_tick_serial() 拿 Tick。
  • 所有返回都是动态引用,随 wait_update() 自动更新。
  • is_changing() 判断数据变化,用 is_serial_ready() 判断首次到位。
  • 注意 NaN 陷阱和 DataFrame 列名不可修改。

接下来学习怎么下单交易: 交易接口与下单