尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

零基础10分钟上手天勤量化TqSdk:从期货实时行情到自动盯盘报警工具

零基础10分钟上手天勤量化TqSdk:从期货实时行情到自动盯盘报警工具 零基础10分钟上手天勤量化TqSdk从期货实时行情到自动盯盘报警工具【免费下载链接】tqsdk-python天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易项目地址: https://gitcode.com/gh_mirrors/tq/tqsdk-python做期货的人多少都被盯盘这件事折磨过——行情稍有风吹草动就得切窗口、刷报价生怕错过买卖点。而天勤量化TqSdk正是信易科技开源的一款Python量化开发包它把期货实时行情、历史数据、策略回测、模拟盘与实盘交易打包成一套简洁的API几行代码就能读到交易所的实时报价。这篇文章我们不聊抽象概念直接动手搭一个自动盯盘报警小工具行情异动、价差超限程序替你看盘你只管在价格到位时出手。 全文所有代码都基于真实场景编写复制即可运行。跟着步骤走10分钟后你就拥有一台属于自己的行情管家。一、开工前的三件准备装库、开户、看懂合约代码动手之前把三样东西准备好每一步都是必须的。第 1 步安装 TqSdk。一条命令搞定前提是你有 Python 3.9 及以上的环境。pip install tqsdk -U国内网络下载慢的话可以换清华镜像源速度快很多pip install tqsdk -U -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-hostpypi.tuna.tsinghua.edu.cn第 2 步注册一个快期账户。行情服务器需要凭据才能登录这是连接前的必要环节。去天勤量化官网免费注册拿到账户名和密码后面写代码时会用到。第 3 步看懂合约代码的格式。TqSdk 里所有品种统一使用交易所代码.合约代码的写法常见的有SHFE.rb2610—— 上期所螺纹钢 2610 合约DCE.i2609—— 大商所铁矿石 2609 合约CZCE.SR605—— 郑商所白糖 605 合约CFFEX.IF2506—— 中金所沪深300股指期货 2506 合约记不住没关系代码风格是固定的SHFE、DCE、CZCE、CFFEX、INE、GFEX这些交易所前缀配合品种代码和合约月份即可。二、跑通第一条通路三行代码把实时价格接进来万事俱备来写第一个脚本。目标是让行情服务器把某一合约的实时价格持续推到我们面前from tqsdk import TqApi, TqAuth api TqApi(authTqAuth(你的快期账户, 账户密码)) quote api.get_quote(SHFE.rb2610) while True: api.wait_update() # 等待服务器推送新数据 print(quote.datetime, quote.last_price)运行之后终端会像下图的 demo 示例一样不停滚动输出时间 最新价这就说明你与行情服务器之间的通路已经打通了。这里有两个核心点新手容易卡壳先讲透wait_update()是心跳不是摆设。TqSdk 把数据放在本地内存里网络只负责推送增量。wait_update()的作用就是阻塞等待下一次数据更新更新一到就返回我们趁机读取最新行情。整个程序就是等待 → 读数据 → 处理 → 再等待的循环理解了这个节奏后面所有代码都好写了。get_quote()返回的不是快照是引用。它返回一个行情对象之后每次wait_update()返回这个对象里的字段都会自动刷新为最新值。所以我们只管在循环里读它不用重新订阅。三、行情对象里藏着哪些宝贝报警要用的字段就这几个get_quote()返回的行情对象字段很丰富但做盯盘报警重点记住下面这些就够用了字段含义典型用途last_price最新成交价价格判断、价差计算datetime行情时间记录报警发生时刻volume当日累计成交量判断活跃度open_interest持仓量观察多空分歧bid_price1/ask_price1买一价 / 卖一价估测盘口深度average当日均价与现价对比看强弱⚠️ 这里有个新手必踩的坑在服务器还没推送第一笔数据前行情字段是NaN直接拿去做比较运算会得到错误结果。所以正式代码里一定要先判断数值是否有效再处理我们后面的报警器就会演示这个写法。四、第一版报警器单合约价格异动第一时间喊你环境跑通了字段认识了现在进入正题——写报警器。第一版目标很简单盯着螺纹钢 2610 合约价格相对上一次记录变动超过 0.5%就打印一条报警。from tqsdk import TqApi, TqAuth api TqApi(authTqAuth(你的快期账户, 账户密码)) quote api.get_quote(SHFE.rb2610) last_price None while True: api.wait_update() price quote.last_price if price ! price: # NaN 保护第一笔数据到来前跳过 continue if last_price is None: last_price price # 首次记录基准价 continue change (price - last_price) / last_price * 100 if abs(change) 0.5: print(f[报警] {quote.datetime} 螺纹2610 较上次变动 {change:.2f}% - {price}) last_price price到这里你的第一个盯盘程序已经能干活了。跑起来之后可以挂机价格一有风吹草动终端就会蹦出报警信息。五、第二版报警器同时盯多个合约跨期价差也一起算单合约报警只是热身。实际交易里我们经常要同时观察几个合约的关系。TqSdk 提供了get_quote_list()一次订阅一整批合约循环里逐个读取即可from tqsdk import TqApi, TqAuth api TqApi(authTqAuth(你的快期账户, 账户密码)) symbols [SHFE.rb2610, SHFE.rb2701, DCE.i2609] quotes api.get_quote_list(symbols) while True: api.wait_update() for q in quotes: if q.last_price ! q.last_price: # 同样做 NaN 保护 continue print(f{q.symbol} 最新价 {q.last_price} 持仓量 {q.open_interest})再进一步我们做一个跨期价差报警——螺纹钢 2610 和 2701 两个合约价差超过 250 个点就提示可能的高抛低吸机会from tqsdk import TqApi, TqAuth api TqApi(authTqAuth(你的快期账户, 账户密码)) rb_10 api.get_quote(SHFE.rb2610) rb_01 api.get_quote(SHFE.rb2701) while True: api.wait_update() if rb_10.last_price ! rb_10.last_price or rb_01.last_price ! rb_01.last_price: continue spread rb_10.last_price - rb_01.last_price if spread 250: print(f[价差报警] {rb_10.datetime} RB2610-2701 价差 {spread:.0f}偏大) elif spread 200: print(f[价差报警] {rb_10.datetime} RB2610-2701 价差 {spread:.0f}偏小)把第一版和第二版拼在一起就是一个能同时监控单合约异动 跨期价差的多面手报警器了。批量订阅还有一个隐性好处订阅的合约越多网络与本地内存的复用效率越高性能上明显优于一次只盯一个。六、给报警器穿上盔甲日志落盘与断线自愈程序能跑只是及格扛得住真实环境才算合格。两个问题必须解决问题一报警信息刷屏即失过后想复盘没数据。解决办法是加一个日志器把行情快照攒批写入文件既不影响性能又能留痕import json from tqsdk import TqApi, TqAuth class TickLogger: def __init__(self, pathtick.log): self.path path self.buffer [] def write(self, quote): self.buffer.append({ time: str(quote.datetime), symbol: quote.symbol, last_price: quote.last_price, volume: quote.volume, }) if len(self.buffer) 50: # 攒够50条再落盘减少IO with open(self.path, a, encodingutf-8) as f: for row in self.buffer: f.write(json.dumps(row, ensure_asciiFalse) \n) self.buffer.clear() logger TickLogger() api TqApi(authTqAuth(你的快期账户, 账户密码)) quote api.get_quote(DCE.i2609) while True: try: api.wait_update() logger.write(quote) except Exception as e: print(出现异常TqSdk 会自动重连并补发数据, e)问题二担心半夜断网、程序掉线。这里可以放心TqSdk 内置了完善的重连机制源码里由ReconnectTimer和重连处理器负责管理 WebSocket 连接断线后会自动重连并在恢复后补发断线期间错过的数据。我们只需在wait_update()外层做好异常兜底即可无需自己写复杂的断线重连逻辑。七、还想再进一步K线数据与进阶路线图报警器能看实时行情了但很多时候我们还想回看走势、验证信号。这时候轮到get_kline_serial()登场——它能拉取任意周期的K线序列周期以秒为单位60 是一分钟线3600 是一小时线86400 是日线from tqsdk import TqApi, TqAuth api TqApi(authTqAuth(你的快期账户, 账户密码)) klines api.get_kline_serial(SHFE.rb2610, duration_seconds60, data_length200) while True: api.wait_update() if api.is_changing(klines.iloc[-1]): # 最新一根K线有更新时 last klines.iloc[-1] print(f{last.datetime} 开{last.open} 高{last.high} 低{last.low} 收{last.close})至此从单合约报价到多合约价差再到K线序列你已经摸清了 TqSdk 数据侧的完整脉络。如果你想继续往下走官方的进阶路线很清晰策略回测把报警逻辑升级为完整的买卖信号用历史数据验证有效性详见 doc/usage/backtest.rst 和 doc/advanced/backtest.rst模拟盘交易用TargetPosTask让策略真正下单先在模拟环境跑熟实盘接入连接真实账户前建议通读 doc/usage/trade.rst把风控规则理清楚参考源码核心 API 定义都在 tqsdk/api.py入门示例在 tqsdk/demo/遇到疑问直接查源码是最快的学习路径。写在最后回过头看我们其实只做了一件事用 TqSdk 的get_quote、get_quote_list、get_kline_serial三个接口加上一个wait_update()循环就搭出了一个能自动盯盘、跨合约算价差、断线自愈、落盘留痕的行情管家。整个过程没有一行难懂的代码也没有复杂的配置。量化交易的第一步永远是先把行情数据牢牢握在手里。现在你的工具箱里已经有了这件趁手的兵器接下来无论做信号研究还是写交易策略都只是在这个地基上继续盖楼的事。从模拟盘开始一步步验证你的想法天勤量化TqSdk 会让这条路比想象中平坦很多。去跑通你的第一份实时行情吧剩下的交给时间。【免费下载链接】tqsdk-python天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易项目地址: https://gitcode.com/gh_mirrors/tq/tqsdk-python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表