别再手动盯盘了:用天勤TqSdk 5分钟搞定期货实时行情数据获取
【免费下载链接】tqsdk-python天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易项目地址: https://gitcode.com/gh_mirrors/tq/tqsdk-python
期货实时行情数据获取,听起来是量化机构的专属活,其实一个开源库就能让你在几分钟内做到。这篇文章不按"介绍—安装—FAQ"的老套路写,而是陪你走一遍真实场景:从"错过行情"的痛点出发,用天勤量化TqSdk亲手做出一个会提醒你的行情监控程序,再顺手把它升级成能自动交易的最小策略。文中所有代码都取自项目自带的官方示例,你只需要一个 Python 环境和 5 分钟耐心。
一、那个下午,他错过了螺纹钢的一波急涨
朋友老周做螺纹钢现货贸易,平时看盘靠手机行情软件。那天午休起来,螺纹钢主力合约已经拉了一根大阳线,他愣是没赶上高位出货的窗口。他跟我抱怨:盯盘不是技术问题,是时间问题——人不能一直盯着屏幕,而行情不会等人。
他试过两个替代方案,都失败了:
- 写爬虫抓网站数据:页面改版就失效,延迟高,还随时可能被反爬封 IP。
- 买商业行情接口:稳定是稳定,一年大几千块,个人玩玩实在肉疼。
他真正需要的,是一个能"替人盯盘"的程序:价格突破阈值就报警,数据稳定不折腾,还最好免费。顺着这个需求,他找到了天勤量化TqSdk。如果你也有同样的困扰,下面这套流程可以直接照抄。
二、先认识一下:TqSdk 凭什么"顺便"解决这个难题
天勤量化TqSdk 是信易科技开源的 Python 量化交易开发包,覆盖了历史数据 → 实时行情 → 策略回测 → 模拟交易 → 实盘交易的完整链路。它处理盯盘这件事,靠的是三个关键设计:
| 设计 | 作用 | 直观感受 |
|---|---|---|
| 内存数据库 | 行情与交易数据全在内存中存取 | 无访问延迟,不用自己建库 |
| 引用对象 | get_quote()返回一个自动更新的行情对象 | 拿到手,数据自己"长" |
| 事件循环 | wait_update()统一驱动数据刷新 | 一套结构走遍所有功能 |
它的底层架构也很清晰:行情网关负责推送实时行情与历史数据,交易中继网关负责对接期货公司交易系统,两者以 Diff 协议统一对外服务。用户侧你几乎感知不到这些,只需记住四句口诀:
创建 TqApi 实例 → 用
get_quote()等函数拿数据引用 → 在循环里wait_update()等待数据包 → 从引用对象读取最新值。
这也正是项目doc/quickstart.rst十分钟快速入门里反复强调的核心结构。下面这句过渡很关键:理解它,后面所有功能都不再是新东西。
三、5分钟动手:做一个"螺纹钢价格提醒器"
光说不练假把式。这一节我们用三步,把"盯盘"这个需求真正跑通。
第 1 步:安装 TqSdk 并注册快期账户
TqSdk 要求Python 3.9 及以上,Windows 7+/macOS/Linux 均可。安装就一条命令:
pip install tqsdk -U下载慢的话,换清华源一行搞定:
pip install tqsdk -U -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host=pypi.tuna.tsinghua.edu.cn装完后,去天勤官网注册一个快期账户(手机号、用户名或邮箱均可登录)。它是连接行情服务器的通行证,注册免费,属于所有 TqSdk 程序的前置条件。
第 2 步:跑通最小行情示例
安装好后,先不要急着写大程序,而是把官方教程里最小示例(对应tqsdk/demo/tutorial/t10.py)跑通。代码不到十行:
from tqsdk import TqApi, TqAuth # 创建 API 实例,传入自己的快期账户 api = TqApi(auth=TqAuth("快期账户", "账户密码")) # 订阅上期所镍 2607 合约行情,quote 会随行情自动更新 quote = api.get_quote("SHFE.ni2607") while True: api.wait_update() # 阻塞等待行情数据包 print(quote.datetime, quote.last_price) # 打印最新行情时间与最新价如果它能稳定打印出时间和价格,说明安装、账户、行情链路全部打通,你可以继续往下走了。
第 3 步:升级成会提醒的监控程序
行情对象quote里其实塞满了料,常用字段长这样:
| 字段 | 含义 |
|---|---|
last_price | 最新价 |
datetime | 最新行情时间 |
volume | 当日成交量 |
open_interest | 持仓量 |
bid_price1/ask_price1 | 买一价 / 卖一价 |
有了这些字段,提醒器的逻辑就很简单:最新价突破上轨或跌破下轨就报警。
from tqsdk import TqApi, TqAuth api = TqApi(auth=TqAuth("快期账户", "账户密码")) quote = api.get_quote("SHFE.rb2610") # 订阅螺纹钢 2610 合约 upper, lower = 3500, 3300 # 设定提醒的价格区间 while True: api.wait_update() price = quote.last_price if price > upper: print(f"【提醒】价格 {price} 突破上轨 {upper},注意追高风险!") upper = price # 上轨跟随上移,避免重复报警 elif price < lower: print(f"【提醒】价格 {price} 跌破下轨 {lower},留意支撑位!") lower = price把这段脚本挂在一台常开的电脑上,你就拥有了一个 7×24 小时的"行情哨兵"。从"人盯盘"变成"程序盯盘",体验的差别是质变的——这也正是get_quote()引用对象 +wait_update()事件循环这套设计带来的红利:你只管设规则,数据自己会送上门。
四、从"看行情"到"会交易":进阶四招
提醒器只是起点。顺着同一套结构,你可以一路滑向"自动化"。下面四招由浅入深,全部基于官方文档与示例(tqsdk/demo/tutorial/下都有完整版本)。
招式一:多合约同时监控
做跨品种或跨月价差,需要同时盯多个合约。用get_quote_list()一次订阅一批:
symbols = ["SHFE.rb2610", "SHFE.rb2701", "DCE.i2609"] quotes = api.get_quote_list(symbols) # 一次订阅多个合约 while True: api.wait_update() for symbol, quote in zip(symbols, quotes): print(symbol, quote.last_price)招式二:K线 + 均线信号
K 线序列是 pandas 的 DataFrame,天然适合算指标。比如 60 秒 K 线,突破 15 根均线就提示开仓信号:
klines = api.get_kline_serial("SHFE.rb2610", 60) # 60 秒 K 线 while True: api.wait_update() if api.is_changing(klines): # 仅在 K 线更新时才处理 ma = sum(klines.close.iloc[-15:]) / 15 # 最近 15 根收盘价均值 if klines.close.iloc[-1] > ma: print("最新价上穿 MA,出现买入信号")注意这里多了一个api.is_changing(),用来判断到底是哪个对象在本次更新中变化了,避免每次循环都重复触发逻辑。
招式三:让 TargetPosTask 自动调仓
手动下单撤单很繁琐,TqSdk 提供了TargetPosTask:你只需声明"我要持有几手",它自动帮你把单子拆好、发出去。经典价差策略只需十几行:
from tqsdk import TqApi, TqAuth, TargetPosTask api = TqApi(auth=TqAuth("快期账户", "账户密码")) q_near = api.get_quote("SHFE.rb2610") q_far = api.get_quote("SHFE.rb2701") t_near = TargetPosTask(api, "SHFE.rb2610") # 近月调仓工具 t_far = TargetPosTask(api, "SHFE.rb2701") # 远月调仓工具 while True: api.wait_update() spread = q_near.last_price - q_far.last_price if spread > 250: t_near.set_target_volume(-1) # 空近月 1 手 t_far.set_target_volume(1) # 多远月 1 手 elif spread < 200: t_near.set_target_volume(0) # 价差回归,全部清仓 t_far.set_target_volume(0)招式四:回测、模拟、实盘一条龙
程序写好,先别直接上真金白银。TqSdk 让验证成本降到最低:
- 策略回测:创建 API 时传入
TqBacktest,就能在指定历史区间内跑完整策略:
from datetime import date from tqsdk import TqApi, TqAuth, TqBacktest api = TqApi(backtest=TqBacktest(start_dt=date(2018, 5, 1), end_dt=date(2018, 10, 1)), auth=TqAuth("快期账户", "账户密码"))- 模拟交易:不传账户时 TqSdk 会自动创建临时模拟账号(
TqSim);想长期保存资金与持仓,可用TqKq()登录快期模拟账户,模拟结果在快期客户端里互通可见。 - 实盘交易:传入
TqAccount("期货公司", "账号", "密码")即可连接实盘账户,这是专业版功能,支持市场绝大多数期货公司,以及 CTP 直连等多种柜台。
五、写给新手的避坑清单
按上面流程走,大概率一路绿灯。但有几个坑,提前知道能省半天时间:
- 合约代码有格式:一律是
交易所.合约,比如SHFE.rb2610(上期所螺纹钢)、DCE.i2609(大商所铁矿石)、CFFEX.IF2406(中金所沪深300)。写错一个字母,数据就静默拿不到。 - 循环必须由
wait_update()驱动:千万别自己写time.sleep()空转,行情推送全靠这个阻塞函数。 - 下单后别立刻退出程序:
insert_order()只是把指令放入发送队列,真正的报单发生在下一次wait_update()时,指令没发出去就退出,单子就丢了。 - 先用模拟盘练手:回测通过只是第一步,上模拟盘跑几天,确认报单、持仓、风控都符合预期,再考虑实盘。
- 想看更多示例:项目源码
tqsdk/demo/tutorial/下有从 t10 到 t96 的系列教程代码,每一个对应一个知识点,边跑边改是最好的学习方式。
六、下一步,就等你这一行代码
回头看,老周的问题其实不复杂:他需要的不是更努力地盯盘,而是更聪明的工具。今天你已经拿到了完整的路径——装好 TqSdk、跑通最小示例、把提醒器改造成自己的版本,然后再决定要不要滑向多合约、信号、自动交易那一端。每一步都有官方示例兜底,成本几乎为零。
我的建议很简单:别收藏这篇文章就完了。现在打开终端,敲下pip install tqsdk -U,把上文第 2 步的代码跑起来,看到第一行"时间 + 价格"打印出来的瞬间,你的量化之旅就正式开始了。若中途卡壳,项目文档doc/quickstart.rst和示例目录都在等着你,用户交流群 611806823 里也有一群同路人。
盯盘这件小事,从今天起,交给程序就好。
【免费下载链接】tqsdk-python天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易项目地址: https://gitcode.com/gh_mirrors/tq/tqsdk-python
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考