news 2026/2/11 8:00:10

【期货量化入门】Python获取期货K线数据(TqSdk完整教程)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【期货量化入门】Python获取期货K线数据(TqSdk完整教程)

一、前言

在量化交易中,K线数据是最常用的数据类型。无论是计算技术指标(如均线、MACD、布林带),还是进行策略回测,都离不开K线数据。

本文将详细介绍如何使用**天勤量化(TqSdk)**获取期货K线数据,包括:

  • 获取不同周期的K线(1分钟、5分钟、日线等)
  • 实时更新K线数据
  • 判断新K线生成
  • 使用pandas处理K线数据

二、K线数据基础

2.1 什么是K线?

K线(也叫蜡烛图)是一种常用的价格图表,每根K线包含四个价格:

字段英文说明
开盘价openK线起始价格
最高价highK线期间最高价
最低价lowK线期间最低价
收盘价closeK线结束价格

2.2 K线周期

常见的K线周期:

周期秒数说明
1分钟60短线交易常用
5分钟300日内交易常用
15分钟900波段交易常用
1小时3600中线交易常用
日线86400趋势分析常用

三、获取K线数据(完整代码)

3.1 获取1分钟K线

#!/usr/bin/env python# -*- coding: utf-8 -*-""" 功能:获取期货K线数据 说明:本代码仅供学习参考 """fromtqsdkimportTqApi,TqAuth# 创建API实例api=TqApi(auth=TqAuth("你的快期账户","你的密码"))# 获取螺纹钢2501合约的1分钟K线,最近200根klines=api.get_kline_serial("SHFE.rb2501",duration_seconds=60,data_length=200)# 打印K线数据类型print(f"数据类型:{type(klines)}")print(f"K线数量:{len(klines)}")print("-"*60)# 打印最后5根K线print("最近5根K线:")print(klines.tail())# 关闭APIapi.close()

运行结果示例:

数据类型: <class 'pandas.core.frame.DataFrame'> K线数量: 200 ------------------------------------------------------------ 最近5根K线: datetime open high low close volume 195 2025-01-15 14:55:00+08:00 3350.0 3352.0 3348.0 3351.0 1520 196 2025-01-15 14:56:00+08:00 3351.0 3353.0 3350.0 3352.0 1380 197 2025-01-15 14:57:00+08:00 3352.0 3354.0 3351.0 3353.0 1450 198 2025-01-15 14:58:00+08:00 3353.0 3355.0 3352.0 3354.0 1620 199 2025-01-15 14:59:00+08:00 3354.0 3356.0 3353.0 3355.0 1580

3.2 代码解析

klines=api.get_kline_serial("SHFE.rb2501",duration_seconds=60,data_length=200)
参数说明
"SHFE.rb2501"合约代码
duration_seconds=60K线周期(秒),60秒=1分钟线
data_length=200获取K线数量

常用周期设置:

周期duration_seconds
10秒线10
1分钟线60
5分钟线300
15分钟线900
30分钟线1800
1小时线3600
日线86400 (即246060)

3.3 获取日线数据

fromtqsdkimportTqApi,TqAuth api=TqApi(auth=TqAuth("你的快期账户","你的密码"))# 获取螺纹钢日线,最近60个交易日klines=api.get_kline_serial("SHFE.rb2501",duration_seconds=24*60*60,data_length=60)print("最近5个交易日的日K线:")print(klines[["datetime","open","high","low","close","volume"]].tail())api.close()

四、K线数据字段说明

TqSdk返回的K线数据是一个pandas DataFrame,包含以下字段:

字段说明
datetimeK线起始时间(纳秒时间戳)
open开盘价
high最高价
low最低价
close收盘价
volume成交量
open_oi起始持仓量
close_oi结束持仓量

五、实时更新K线(进阶)

在实际应用中,我们通常需要实时获取K线更新。TqSdk的K线数据会自动更新,我们只需要用wait_update()等待数据刷新即可。

5.1 实时打印最新K线

#!/usr/bin/env python# -*- coding: utf-8 -*-""" 功能:实时监控K线数据 说明:程序会持续运行,按Ctrl+C停止 """fromtqsdkimportTqApi,TqAuthimportdatetime api=TqApi(auth=TqAuth("你的快期账户","你的密码"))# 获取10秒K线klines=api.get_kline_serial("SHFE.rb2501",duration_seconds=10)print("开始监控K线,按Ctrl+C停止...")print("-"*70)whileTrue:api.wait_update()# 判断K线收盘价是否变化ifapi.is_changing(klines.iloc[-1],"close"):# 获取最后一根K线last_kline=klines.iloc[-1]# 转换时间戳为可读格式kline_time=datetime.datetime.fromtimestamp(last_kline["datetime"]/1e9)print(f"时间:{kline_time}| 开:{last_kline['open']:.1f}| "f"高:{last_kline['high']:.1f}| 低:{last_kline['low']:.1f}| "f"收:{last_kline['close']:.1f}| 量:{last_kline['volume']}")

5.2 判断新K线生成

当一根新K线开始时,可能需要执行某些操作(如计算指标、发出信号)。可以通过判断K线时间是否变化来检测新K线:

fromtqsdkimportTqApi,TqAuthimportdatetime api=TqApi(auth=TqAuth("你的快期账户","你的密码"))# 获取1分钟K线klines=api.get_kline_serial("SHFE.rb2501",duration_seconds=60)print("监控新K线生成...")whileTrue:api.wait_update()# 判断是否产生新K线(通过datetime字段变化判断)ifapi.is_changing(klines.iloc[-1],"datetime"):kline_time=datetime.datetime.fromtimestamp(klines.iloc[-1]["datetime"]/1e9)print(f">>> 新K线生成!时间:{kline_time}")# 在这里可以添加你的策略逻辑# 例如:计算均线、判断信号等

六、使用pandas处理K线

TqSdk返回的K线数据是pandas DataFrame,可以直接使用pandas的各种功能:

6.1 计算简单移动平均线

fromtqsdkimportTqApi,TqAuth api=TqApi(auth=TqAuth("你的快期账户","你的密码"))klines=api.get_kline_serial("SHFE.rb2501",duration_seconds=60,data_length=100)# 等待数据准备好api.wait_update()# 计算5周期和20周期移动平均线klines["ma5"]=klines["close"].rolling(5).mean()klines["ma20"]=klines["close"].rolling(20).mean()# 打印最后5行print(klines[["datetime","close","ma5","ma20"]].tail())api.close()

6.2 计算涨跌幅

# 计算涨跌幅(相对于前一根K线)klines["change"]=klines["close"].pct_change()*100# 打印print(klines[["datetime","close","change"]].tail())

七、获取Tick数据(补充)

除了K线,TqSdk还支持获取Tick级别的数据(逐笔成交):

fromtqsdkimportTqApi,TqAuth api=TqApi(auth=TqAuth("你的快期账户","你的密码"))# 获取Tick数据ticks=api.get_tick_serial("SHFE.rb2501")# 等待数据准备好api.wait_update()print("Tick数据示例:")print(ticks.tail())api.close()

八、总结

本文介绍了如何使用TqSdk获取期货K线数据,要点回顾:

功能代码
获取K线api.get_kline_serial(合约, 周期, 数量)
等待更新api.wait_update()
判断变化api.is_changing(klines.iloc[-1], "字段名")
获取Tickapi.get_tick_serial(合约)

K线周期参数(duration_seconds):

  • 1分钟 = 60
  • 5分钟 = 300
  • 日线 = 86400

TqSdk的数据全部存储在内存中,访问速度快,而且会自动更新,非常适合开发量化交易策略。


免责声明:本文仅供学习交流使用,不构成任何投资建议。期货交易有风险,入市需谨慎。

更多资源

  • 天勤量化官网:https://www.shinnytech.com
  • GitHub开源地址:https://github.com/shinnytech/tqsdk-python
  • 官方文档:https://doc.shinnytech.com/tqsdk/latest
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/9 15:42:26

单元测试的10个最佳实践

在软件开发的生命周期中&#xff0c;单元测试是确保代码健壮性和可维护性的基石。随着敏捷开发和持续集成的普及&#xff0c;高效的单元测试已成为测试从业者的必备技能。本文针对软件测试从业者&#xff0c;总结了10个经过验证的最佳实践&#xff0c;涵盖测试设计、执行到维护…

作者头像 李华
网站建设 2026/2/6 16:37:28

MATLAB基础应用精讲-【自动驾驶】SORT目标跟踪算法(附python代码实现)

目录 前言 算法原理 什么是SORT 算法思想 SORT原理 (1)目标检测(Object Detection) (2)卡尔曼滤波(Kalman Filter) (3)匈牙利算法(Hungarian Algorithm) SORT算法实现过程 算法步骤 步骤1:目标检测 步骤2:轨迹预测 步骤3:数据关联 步骤4:状态更新…

作者头像 李华
网站建设 2026/2/7 12:19:49

虫害预警怎样更及时?虫情测报仪夜间自动诱捕拍照,助力植保提前规划

虫害的发生往往具有隐蔽性和突发性&#xff0c;等到田间出现明显为害症状时再防治&#xff0c;有时可能已造成一定影响。如何更早地发现害虫出现迹象&#xff0c;实现植保工作的提前部署&#xff0c;是种植管理中希望改善的环节。虫情测报仪在害虫监测预警方面提供了一种技术手…

作者头像 李华
网站建设 2026/2/8 0:52:48

UML和模式应用:类图建模详解

UML用类图&#xff08;class diagram&#xff09;表示类、接口及其关联。类图用于静态对象建模。 一、概述 类图(class diagram)展现了一组对象、接口、协作和它们之间的关系。在面向对象系统的建模中所建立的最常见的图就是类图。类图给出系统的静态设计视图。包含主动类的类…

作者头像 李华
网站建设 2026/2/8 2:23:00

超声测量距离模块RCWL-1640的评估

目的&#xff1a;学习超声测量距离模块RCWL-1640的使用&#xff0c;对其测量精度进行评估。准备工作&#xff1a;一。1个RCWL-1640模块&#xff0c;模块使用的芯片是RCWL-9610&#xff0c; 外围电路非常简单&#xff0c;只需要设置工作模式即可。二。1个USB TO TTL模块&#xf…

作者头像 李华
网站建设 2026/2/7 9:15:25

锂金属电池锂枝晶沉积溶解过程的三维电化学变形模型研究

锂金属电池锂枝晶溶解—沉积过程的三维变形模型模型为电化学模型&#xff0c;仿真锂金属电池在充放电过程中负极的锂枝晶沉积和溶解行为&#xff0c;可以计算生成锂枝晶浓度&#xff0c;因沉积变形而产生的应力应变和和变形情况等锂金属电池因其高比能和能量密度&#xff0c;被…

作者头像 李华