TqSdk-Python 数据获取与使用指南:合约、行情与历史数据详解
tqsdk-python 天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易 项目地址: https://gitcode.com/gh_mirrors/tq/tqsdk-python
一、合约代码规范与平台支持
TqSdk-Python 作为专业的量化交易工具,采用标准化的合约代码格式:平台代码.平台内品种代码
。这种格式设计既保证了唯一性,又便于开发者理解和使用。
1.1 平台代码对照表
| 平台代码 | 对应平台名称 | 备注 | |------------|----------------------|--------------------------| | SHFE | 上海期货平台 | 包含铜、铝等金属期货 | | DCE | 大连商品平台 | 包含豆粕、玉米等农产品 | | CZCE | 郑州商品平台 | 包含棉花、白糖等品种 | | CFFEX | 中国金融平台 | 包含股指期货、国债期货 | | INE | 上海国际能源交易中心 | 原油等国际化品种 | | GFEX | 广州期货平台 | 工业硅等新品种 | | SSE | 上海证券平台 | 股票、ETF等 | | SZSE | 深圳证券平台 | 股票、ETF等 |
1.2 合约代码示例解析
期货合约示例:
SHFE.cu1901
:上期所铜1901合约DCE.m1901
:大商所豆粕1901合约CZCE.SR901
:郑商所白糖901合约(注意郑商所采用3位数字)
期权合约示例:
DCE.m1807-C-2450
:大商所豆粕看涨期权CFFEX.IO2002-C-3550
:中金所沪深300股指看涨期权
特殊合约:
KQ.m@CFFEX.IF
:中金所IF品种主连合约KQ.i@SHFE.bu
:上期所bu品种指数SSWE.CUH
:上期所铜仓单数据
二、实时行情数据获取
2.1 获取实时行情
使用get_quote()
方法可获取合约的实时行情数据:
quote = api.get_quote("SHFE.cu2201")
2.2 行情数据结构详解
返回的行情数据包含丰富的信息,主要分为以下几类:
-
价格信息:
last_price
:最新价ask_price1
~ask_price5
:卖一至卖五价bid_price1
~bid_price5
:买一至买五价
-
成交量信息:
volume
:当日成交量amount
:当日成交额
-
持仓信息:
open_interest
:当前持仓量pre_open_interest
:昨持仓量
-
合约基本信息:
price_tick
:最小变动价位volume_multiple
:合约乘数trading_time
:交易时间段
2.3 实时监控行情变化
quote = api.get_quote("SHFE.cu1812")
while api.wait_update():
if api.is_changing(quote):
print(f"最新价变化: {quote.last_price}")
三、K线数据获取与分析
3.1 获取K线数据
# 获取10秒K线
klines = api.get_kline_serial("SHFE.cu1812", 10)
# 获取多合约对齐K线
klines = api.get_kline_serial(["SHFE.au1912", "SHFE.au2006"], 5)
3.2 K线数据结构
返回的DataFrame包含以下关键列:
datetime
:K线起始时间(纳秒级时间戳)open
/high
/low
/close
:开高低收价格volume
:成交量open_oi
/close_oi
:持仓量
3.3 K线周期说明
TqSdk支持灵活的K线周期设置:
api.get_kline_serial("SHFE.cu1901", 60) # 1分钟线
api.get_kline_serial("SHFE.cu1901", 300) # 5分钟线
api.get_kline_serial("SHFE.cu1901", 86400) # 日线
3.4 K线更新监控
klines = api.get_kline_serial("SHFE.cu1812", 60)
while api.wait_update():
if api.is_changing(klines.iloc[-1], "datetime"):
print("新K线生成:", klines.iloc[-1])
四、Tick数据获取
4.1 获取Tick数据
ticks = api.get_tick_serial("SHFE.cu1812")
4.2 Tick数据结构
Tick数据包含每一笔成交的详细信息,包括:
- 买卖盘价格和量
- 最新成交价和量
- 持仓量变化等
五、实战技巧与常见问题
5.1 多合约监控技巧
# 同时监控多个合约
quotes = [api.get_quote(symbol) for symbol in ["SHFE.cu1901", "SHFE.cu1902"]]
klines = [api.get_kline_serial(symbol, 60) for symbol in ["SHFE.cu1901", "SHFE.cu1902"]]
while api.wait_update():
for i, q in enumerate(quotes):
if api.is_changing(q):
print(f"合约{i+1}行情变化:", q.last_price)
5.2 数据更新机制理解
TqSdk采用推送机制,当调用wait_update()
时会阻塞等待,直到有新的数据到达。开发者应理解:
- 每次
wait_update()
可能包含多个合约的数据更新 - 使用
is_changing()
可以精确判断哪个数据发生了变化 - 对于高频策略,建议合并处理多个更新以提高效率
5.3 主连合约处理
主连合约(如KQ.m@CFFEX.IF
)会自动切换主力合约,开发者需要注意:
- 主力切换通常发生在持仓量和成交量最大的合约变化时
- 切换后不会再切回之前的合约
- 回测时需要特别处理合约切换点
六、性能优化建议
- 合理选择数据粒度:根据策略需求选择适当的数据频率
- 限制数据请求量:避免同时请求过多不必要的数据
- 利用缓存机制:重复使用的数据应本地缓存
- 批量处理更新:合并处理多个数据更新事件
通过本文的详细讲解,开发者可以全面掌握TqSdk-Python中合约、行情和历史数据的使用方法,为量化交易策略开发打下坚实基础。
tqsdk-python 天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易 项目地址: https://gitcode.com/gh_mirrors/tq/tqsdk-python
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考