当前位置: 首页 > news >正文

期货量化多品种跑起来 CPU 很高:天勤订阅与 is_changing 精简

前言

国内期货量化,指的是用 Python 等语言写程序,根据行情自动决定买卖多少手、何时调仓,而不是人工盯盘点鼠标。一套程序往往同时关注多个品种:螺纹钢、铁矿石、豆粕各订一份行情,有的还订 1 分钟、5 分钟两套 K 线。天勤量化(TqSdk)是常用的 Python 框架:你创建TqApi,用get_quote订 tick 级行情,用get_kline_serial订 K 线,然后在while True里反复wait_update()收数据、算指标、决定是否set_target_volume调仓。

问题出在:订得太多、算得太勤,服务器 CPU 会在交易时段飙高,风扇响,wait_update变慢,行情反而处理滞后——看起来像「天勤慢」,往往是订阅范围和触发条件写得太宽。回测里历史数据推送节奏和实盘不同,同样代码回测可能很轻快,一上实盘就暴露。下面先说明天勤数据怎样更新,再讲如何用is_changing做字段级过滤、如何精简订阅。

一、先弄清几个名词

名称是什么和 CPU 问题的关系
订阅调用get_quote/get_kline_serial向服务器声明要哪些合约数据订得越多,每次wait_update可能处理的更新越多
wait_update()阻塞等待一批业务包,刷新内存里的行情、委托、持仓主循环核心;两次调用之间若做大计算会拖慢收包
tick每笔成交或盘口跳动,quote.last_price等字段会变每个 tick 都算均线,CPU 会爆
K 线 bar按固定周期合成的开高低收,表里有datetime5 分钟策略应在新 bar 时算一次,不是每个 tick
is_changing(对象, "字段")判断本帧该字段是否刚更新只在该变时进逻辑,避免空转
iloc[-1]/iloc[-2]K 线表最后一行 / 倒数第二行新 bar 看 [-1] 的 datetime 变,信号常在 [-2] 算
set_target_volume设目标净仓,task 在 wait_update 里发单每个 tick 都 set 会频繁撤单,加重负担
trade 列表允许真实下单的 symbol与只观察不交易的 watch 列表应分开

二、天勤程序为何会因「订太多、算太勤」变卡

典型错误写法:

  1. 对 15 个合约各订 quote + 3 套 K 线,共 60 个序列;
  2. 主循环里if api.is_changing(quote):不指定字段,盘口任意字段变都进逻辑;
  3. 每个 tick 对全部合约重算 60 周期均线;
  4. 方向一变就set_target_volume,夜盘产生大量撤单。

正确节奏(以 5 分钟 K 线趋势策略为例):只有is_changing(kl.iloc[-1], "datetime")为真时,才在iloc[-2]上算均线、出信号;tick 级入场另说,也要字段级is_changing(quote, "last_price"),且避免重复 set 相同目标。

三、推荐主循环结构

# 启动时订好,勿在循环里反复 get_kline_serialklines={s:api.get_kline_serial(s,300,data_length=200)forsintrade_symbols}whileTrue:api.wait_update()forsintrade_symbols:kl=klines[s]ifnotapi.is_changing(kl.iloc[-1],"datetime"):continue# 仅在已收盘 bar([-2])上算信号process_signal(s,kl)

process_signal内再决定是否tasks[s].set_target_volume(target);若 target 与上次相同,不要重复 set。

四、订阅精简原则

列表放什么怎么用
trade_symbols真要下单的品种 + 算信号必需的 K 线主循环重点处理
watch_symbols只看基差、不写单仅在 K 线 datetime 变时读一次,或另进程

主连算信号、具体月执行时:执行层只订underlying_symbol对应的具体合约,不必订所有月份。data_length在启动时按最长指标周期估好,循环内不要新建订阅。

五、如何确认是 CPU 问题

在交易时段打日志:每圈wait_update耗时、每秒循环次数。若每秒上百次且每次都做 pandas 大计算,优先改触发条件。若在 Jupyter 里反复运行策略单元格而不api.close(),会叠多个TqApi,内存和 CPU 也会异常——这与订阅无关,但是常见坑。

生产环境若开了天勤 web 绘图(TqWebHelper),也会额外占资源,服务器上常关闭。

总结

订阅太多合约本身就会增加每次 wait_update 的工作量;若再用无字段过滤的 is_changing、在每个 tick 重算指标,CPU 飙高几乎必然。天勤提供字段级 is_changing 和 K 线 datetime 触发,就是让期货量化程序只在「该算的时候」才算一遍。把允许交易的 symbol 和只观察的 symbol 分开、启动时订齐 K 线、热路径上避免重复 set_target_volume,多品种组合也能在普通服务器上长期跑,而不是一味加 CPU 硬扛。

FAQ

1)天勤有订阅数量上限吗?

文档无固定上限,以你的机器和逻辑实测为准。

2)data_length 很大会更卡吗?

主要增加指标计算量和内存,见最长均线周期合理估算即可。

3)多品种能否多进程?

每进程独立TqApi可以,但同一期货公司资金账户不要两个进程同时自动交易。

4)最少要订几个合约?

一个 trade symbol + 一套信号 K 线 +wait_update循环,先跑通再扩展。

风险提示

以上内容用于性能优化参考,不构成投资建议。

http://www.zskr.cn/news/1495503.html

相关文章:

  • 债券市场数据获取:Finnhub Python API在固定收益分析中的实战应用
  • AI产品经理成长之路:从零基础到专家的详细学习路线全解析
  • AtomGit Flutter鸿蒙客户端:Provider状态管理
  • 2026嘉兴AI搜索优化服务商实战选型评测与避坑指南全解析 - 品牌报告
  • 如何快速掌握MPV_lazy播放器:Windows用户的终极配置指南
  • Kinetis K22F I2S/SAI低功耗时序深度解析与音频系统设计指南
  • Path of Building终极指南:5分钟快速掌握流放之路最强Build规划工具
  • CAPL脚本里那些坑:为什么我的变量值总是不对?
  • 5个简单步骤掌握Trelby:免费专业剧本写作软件的完整指南
  • 从Dijkstra到A*:用动画和真实地图数据,彻底搞懂路径规划算法的演进与选型
  • Windows Terminal文件拖放终极指南:3个技巧让命令行效率翻倍
  • 影刀RPA新手教程_变量作用域与生命周期管理
  • 昇腾CANN集合通信库HCCL深度解析:分布式训练性能优化与多机多卡通信实战完整技术指南
  • McAfee Stinger Raptor(迈克菲杀毒软件
  • 企业级AI 知识引擎:01从0到1完整技术蓝图---视频
  • 嵌入式开发时序规范解析:从K60外设接口到PCB设计实战
  • 深圳露点仪厂家排行:多行业适配的专业选型参考 - 起跑123
  • CentOS7上OpenStack Queens版一键部署踩坑实录:从网卡改名到Dashboard访问
  • 小红书视频下载哪个工具好用?2026免费工具全面实测对比推荐 - 科技大爆炸
  • 如何在Windows上使用iperf3进行专业网络性能测试:完整指南
  • HIUI项目架构解析:Monorepo架构与组件化设计思想
  • 高分好文分享 | 内皮GABA调控血管稳态,云克隆助力主动脉夹层机制与诊断研究
  • 2026企业邮箱注册平台实力榜:六家国产服务商在安全加密与智能管理上的核心优势深度解析 - 品牌发掘
  • 掌握量化投资核心武器:JQData SDK的Alpha因子实战指南
  • 2026五大SEO优化公司评测:专业团队赋能企业流量精准高效增长 - GEO优化
  • 海外拍卖直播风控数据上报:跨境网络加密传输方案设计实践
  • 2026吴江钼酸钠专业订购商实力榜:六家本土高纯度供应商的核心技术优势深度解析 - 品牌发掘
  • Navicat Mac版无限试用期重置:3种强力方法实现永久免费使用
  • 从科研绘图到业务地图:如何用ArcGIS为你的坐标点数据快速匹配正确的地理坐标系(WGS-84/GCJ-02详解)
  • 小红书视频怎么无水印保存到手机?2026免费保存高清视频完整教程 - 科技大爆炸