三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

5分钟用TqSdk抓取期货实时行情:从安装到自动下单的完整实战指南

5分钟用TqSdk抓取期货实时行情:从安装到自动下单的完整实战指南

5分钟用TqSdk抓取期货实时行情:从安装到自动下单的完整实战指南

【免费下载链接】tqsdk-python天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易项目地址: https://gitcode.com/gh_mirrors/tq/tqsdk-python

小李刚接手公司的期货套利研究,每天的工作从打开行情软件、手动记录十几个合约的报价开始。行情跳动快的时候,抄完螺纹钢再抄铁矿石,价格早就变了。他把需求丢进搜索框:用Python获取期货实时行情数据,跳出来的结果里,出现频率最高的就是天勤量化TqSdk——一个开源免费的Python期货量化开发包,能在几行代码内连上国内四大期货交易所的实时行情,同时支持历史数据、策略回测与实盘交易。

这篇文章会把TqSdk从安装到跑通第一套自动交易策略的完整路径走一遍,全程不用你懂多少金融知识,跟着代码敲就行。

TqSdk到底帮你省了什么

市面上的行情数据方案不少,但TqSdk有几个特点值得单独说:

  • 数据在内存里:行情、K线、账户、持仓都以对象形式存在本地,读取零延迟,不需要你自己维护数据库。
  • 一套代码贯穿全流程:同一份策略代码,改一行参数就能从"模拟交易"切到"历史回测",再切到"实盘交易",学习成本极低。
  • 免费且开源:基础功能完全免费,行情订阅、回测、模拟交易都开放给所有用户,新手可以零成本起步。

快速上手:3步跑通第一份实时行情

在动手之前,先确认两件事:Python版本在3.9以上,以及你有一个快期账户(注册完全免费,这是连接TqSdk服务器的前提,注册时用的手机号或用户名就是登录账号)。

第一步:一键安装

打开终端,输入:

pip install tqsdk -U

国内网络下载慢的话,换清华源秒装:

pip install tqsdk -U -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host=pypi.tuna.tsinghua.edu.cn

第二步:写一个最小行情程序

新建一个monitor.py,贴入以下代码:

from tqsdk import TqApi, TqAuth # 创建API实例,填入你的快期账户 api = TqApi(auth=TqAuth("你的快期账号", "你的密码")) # 订阅上期所镍2607合约的行情 quote = api.get_quote("SHFE.ni2607") while True: api.wait_update() print(quote.datetime, quote.last_price)

这段代码解决的是"持续获取某合约最新价格"的问题。运行后,屏幕上会不断刷新时间和最新价,你可以在终端里实时看到行情跳动。

第三步:看懂三个关键点

为什么这么短的代码就能工作?记住这三句话就够了:

  1. TqApi是连接服务器的总入口,相当于打开了一条行情通道;
  2. get_quote()返回的不是一份拷贝,而是一个永远指向最新行情的引用对象,字段会随行情自动更新;
  3. wait_update()是阻塞函数,程序停在这行等待数据包到达,收到后才继续往下走——TqSdk所有程序都遵循"创建引用→循环wait_update→读字段"这个结构

如果你想把行情看板可视化,可以用TqSdk自带的Web GUI:创建TqApi时加一行web_gui=True,浏览器里就能看到带买卖盘口的实时行情图表。

深度玩法:四个高频场景逐个击破

场景一:批量监控多个合约

小目标:同时盯着螺纹钢不同月份的主力合约,找出价差机会。

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(f"{symbol}: 最新价 {quote.last_price}")

这样写的好处是只维护一条连接、只用一个循环,比逐个get_quote再各开一个循环高效得多,也方便后续做价差计算。

场景二:用K线判断趋势

小目标:获取10秒级K线,价格站上均线就提示。

get_kline_serial()返回的是pandas.DataFrame,你甚至可以把它直接扔进pandas做指标计算:

klines = api.get_kline_serial("SHFE.ni2607", 10) # 10秒K线,默认200根 while True: api.wait_update() if api.is_changing(klines): ma = klines.close.iloc[-20:].mean() print(f"最新收盘 {klines.close.iloc[-1]:.0f}, 20周期均线 {ma:.0f}") if klines.close.iloc[-1] > ma: print("价格站上均线")

这里用到了第二个重要函数is_changing():它判断K线在最近一次wait_update中是否真的更新了,避免每次循环都对没变化的K线做无用计算

场景三:把策略跑起来并下单

小目标:价格高于最近15分钟均价时,自动开仓买入。

行情和交易可以无缝混在同一个循环里。insert_order()负责发委托,委托单状态通过返回的order对象随时可查:

klines = api.get_kline_serial("DCE.m2609", 60) while True: api.wait_update() if api.is_changing(klines): ma = klines.close.iloc[-15:].mean() if klines.close.iloc[-1] > ma: api.insert_order(symbol="DCE.m2609", direction="BUY", offset="OPEN", volume=5) print("最新价大于MA,市价开仓")

注意:insert_order()只是把下单请求放进发送队列,真正报单发生在下一次wait_update()。所以下单后千万别立刻退出程序,继续跑主循环让委托真正发出去。

如果你嫌"自己算手数、自己撤单重挂"太麻烦,还可以用TargetPosTask做目标持仓管理:你只需要告诉它"我想持有空1手近月、多1手远月",它会自动通过一连串下单/撤单把仓位调整到位,非常适合价差套利这类需要双边同时调仓的场景。

场景四:用历史数据回测验证策略

小目标:把上面那套策略放到2018年5月到10月的历史行情里跑一遍,看收益曲线。

回测简单到只改一行——创建TqApi时传入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,报错大多集中在下面几处。对照着查,能省下大量排查时间。

错误做法正确做法原因
下单后马上退出程序下单后继续wait_update()驱动循环insert_order只是入队,要等下一次循环才真正报单
循环里不加判断,每个字段都printapi.is_changing()过滤无效更新很多字段每次循环都会刷一遍,全量打印刷屏且浪费
合约代码随手写"rb2610"写成带交易所前缀的 "SHFE.rb2610"TqSdk的合约代码格式是交易所.品种合约,缺前缀直接报错
直接拿模拟逻辑连实盘先用默认的TqSim临时模拟账号跑通默认创建的就是本地模拟账户,连实盘需要TqAccount并购买专业版

另外要提醒:注册完账户第一次登录如果报连接超时,多数是网络问题,稍后重试即可;不要反复重启程序轰炸登录接口。

答疑与延伸

Q:合约代码怎么认?格式为交易所.品种合约月份,例如SHFE.rb2610是上期所螺纹钢2610合约、DCE.i2609是大商所铁矿石2609合约、CFFEX.IF2406是中金所沪深300股指期货2406合约。四大交易所(SHFE上期所、DCE大商所、CZCE郑商所、CFFEX中金所)全覆盖。

Q:数据延迟高吗?TqSdk对接的是交易所实时行情,延迟在毫秒级,绝大多数量化策略都够用。

Q:历史数据怎么补?行情接口支持任意时间段的历史K线和Tick数据;另外可以用内置下载器把数据一次性导出到本地长期保存。

Q:实盘交易怎么开通?实盘属于TqSdk专业版功能,需要购买或申请试用;也支持在部分合作期货公司开户后免费使用。新手阶段建议先用默认的模拟账户跑通流程。

Q:遇到问题去哪问?天勤官方用户论坛聚集了大量活跃用户和官方人员,搜索关键词大概率能直接找到答案。

延伸学习入口

  • 十分钟快速入门:doc/quickstart.rst
  • 核心API源码(get_quote、wait_update等):tqsdk/api.py
  • 完整示例程序:site-packages/tqsdk/demo/tutorial/下的t10到t96系列,按"行情→K线→下单→回测"编号递进,建议逐个跑一遍
  • 策略示例集:tqsdk/demo/example/

现在就去打开终端吧:安装TqSdk,注册快期账户,把第一份实时行情打印到屏幕上。从拿到第一行报价开始,你就已经站在量化交易的门槛上了——剩下的,交给时间和持续练习。🎉

【免费下载链接】tqsdk-python天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易项目地址: https://gitcode.com/gh_mirrors/tq/tqsdk-python

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表