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

Python 写期货自动交易:行情下单与成交回报怎么组织

前言

我接触过很多刚写期货程序化的同事,行情能打印出来,一到下单和成交回报就各写各的:有的在循环里直接insert_order,有的在回调里改全局变量,跑一晚上对不上账。其实不必一开始就搭微服务,关键是把数据订阅、事件驱动、交易执行、状态核对四层分清,让同一套骨架能从模拟走到实盘。

天勤TqSdk把行情、账户、委托、成交都挂在同一个TqApi上,用wait_update推进;下面按这个模型说明模块怎么拆、各层职责是什么,并给出最小闭环示例。策略逻辑可以换成你自己的,但组织方式建议先固定。

一、四层结构怎么记

层级职责天勤里常见入口
数据层订阅行情、K 线、账户截面get_quoteget_kline_serialget_accountget_position
事件层判断本次更新是否值得处理wait_updateis_changing
执行层把信号变成报单或目标仓insert_orderTargetPosTask.set_target_volume
核对层委托、成交、持仓是否一致get_orderget_trade、position 字段

新手常把执行层和核对层混在一起:下单后不跟踪order.status,成交了也不读get_trade,只靠“我以为成交了”推进策略,实盘很快失控。

二、数据层:先订再算

创建TqApi时选定交易单元(本地调试可用TqSim,团队模拟常用TqKq,实盘用TqAccount)。随后一次性订阅本策略需要的对象:

fromtqsdkimportTqApi,TqAuth,TqSim api=TqApi(TqSim(),auth=TqAuth("快期账户","密码"))symbol="SHFE.rb2510"quote=api.get_quote(symbol)kl=api.get_kline_serial(symbol,60,data_length=200)pos=api.get_position(symbol)acc=api.get_account()

get_kline_serialdata_length要大于指标周期,否则均线等指标前面全是 nan。行情对象在首次wait_update之前可能为空,文档也提醒过:刚订阅后quote.datetime可能还是空字符串。

三、事件层:用 wait_update 当心跳

wait_update是天勤策略的主驱动:阻塞等待业务数据更新,同时把之前发出的订阅、报单真正发到网络,并让TargetPosTask等后台任务有机会下单。官方说明里写得很清楚——不调wait_update,很多指令不会真正出去

whileTrue:api.wait_update()# 下面只在“关心的字段变了”时进逻辑

主循环里避免长时间sleep、大段同步计算或阻塞 IO;这些都会推迟下一次wait_update,行情和回报都会变慢。

四、执行层:手写报单 vs 目标持仓

入门理解链路insert_order:方向、开平、限价一目了然,适合学拒单和挂单规则。

信号驱动调仓TargetPosTask:策略只维护“目标净仓几手”,拆单、撤单改价由 task 在后续每次wait_update时处理。注意文档约束:set_target_volume之后必须继续wait_update;同一合约不要和insert_order混用。

fromtqsdk.libimportTargetPosTask task=TargetPosTask(api,symbol)whileTrue:api.wait_update()ifapi.is_changing(kl.iloc[-1],"datetime"):# 此处算信号,示例:目标多头 1 手task.set_target_volume(1)

五、核对层:成交回报从哪来

天勤没有单独的“回调函数列表”,回报体现在数据截面更新上:

  • 委托:get_order()或指定order_id,看statusvolume_left
  • 成交:get_trade()
  • 持仓:get_position(symbol)pos_longpos_short

wait_update返回后,用is_changing过滤订单、成交、持仓字段,再写结构化日志。模拟盘还可对照TqSimtrade_log做二次校验。

六、模块落地到文件时的建议

单文件 demo 可以全写在一个while True里;策略变复杂后建议拆成:

  1. config:合约、周期、账户构造
  2. data:订阅与指标计算(纯函数,不直接下单)
  3. signal:输入 K 线/行情,输出目标方向或目标仓
  4. execution:只负责TargetPosTaskinsert_order
  5. reconcile:每根 K 线或每分钟对 order/trade/position 做一次快照

这样换模拟、换实盘时,通常只改TqApi构造行和环境变量,信号与执行接口不变。

总结

Python 期货自动交易可按数据订阅 → wait_update 事件驱动 → 执行(insert_order 或 TargetPosTask)→ get_order/get_trade/position 核对四层组织。天勤把行情、账户、委托、成交放在同一TqApi截面里,避免自己维护多套 CTP 回调状态机。

落地时先订合约与 K 线,主循环里短逻辑 + 字段级is_changing;执行层选手写报单或目标持仓二选一;核对层用订单、成交、持仓字段写日志,模拟盘可对照trade_log。策略变复杂后再拆 config、signal、execution、reconcile 模块,换环境只改账户构造。

FAQ

1)必须先有行情才能下单吗?

实盘和模拟都依赖合约信息(最小变动价位、交易状态等)。应先wait_update收到有效quote再报单,否则容易拒单或价格无效。

2)TargetPosTask 和 insert_order 能一起用吗?

官方明确不建议同一合约同时使用,否则 task 与手写报单会冲突。

3)多合约怎么组织?

每个合约一个TargetPosTask实例(同一账户同一合约单例);信号层为每个 symbol 维护独立目标仓,不要共用一个全局“方向变量”。

4)回报要不要单独线程收?

天勤模型下用wait_update统一收包即可;再开线程抢 CTP 回调容易和 API 内部状态打架。

风险提示

本文讨论程序结构与技术实现,不构成投资建议。实盘前请在模拟环境充分验证。

http://www.jsqmd.com/news/952203/

相关文章:

  • Vivado 2019下Xilinx 7系列FPGA PCIe硬核IP配置避坑指南(Base/Advanced模式详解)
  • 5分钟掌握AnuPpuccin:打造你的终极Obsidian笔记美学空间
  • 仅剩237家企业正在测试的下一代收款中枢:LLM+RAG驱动的智能对账引擎(附灰度接入通道)
  • 别再只测网速了!用笔记本网卡抓取Wi-Fi Beacon帧,手把手教你精准测量信号强度
  • 保姆级排错指南:华为AC+AP三层漫游配置后,客户端为啥上不了网?
  • 别再只盯着指纹支付了!聊聊Android手机里那个‘隐形保险箱’TEE的另类玩法
  • 5分钟学会零代码制作专业H5页面的终极指南 [特殊字符]
  • 2026驻马店市权威认证贵金属回收 TOP5+黄金回收白银回收铂金回收门店地址电话推荐
  • 告别卡顿!用STM32F4标准库+DMA+FSMC驱动TFT-LCD,实现LVGL丝滑刷新的保姆级教程
  • 从CT机到你的屏幕:一次DICOM医学影像的完整‘旅程’与格式扮演的角色
  • 河南隔音房定制价格_影响成本的 5 大因素
  • 运筹学实战:用分支定界法搞定项目投资决策,避开这3个常见建模坑
  • AIGS框架落地实操:普通IT团队也能玩转企业Agent
  • 活用醛基特异性反应,CY3.5-CHO 简化蛋白荧光修饰流程
  • 告别手动配置,用快马ai一键生成高效centos7自动化安装脚本
  • 2026年无锡羊绒大衣面料OEM工厂采购趋势与核心供应商价值解析 - 2026年企业资讯
  • 十分钟RAGFlow 知识详解与实践指南:从入门到部署企业级 RAG 知识库
  • APK-Installer:Windows上安装Android应用的终极指南
  • 从Beacon帧到信号地图:Python脚本自动化解析Wi-Fi热点功率与分布
  • 别再为作者署名发愁了!LaTeX IEEE/ACM模板多作者排版保姆级教程(附超链接邮箱配置)
  • 从SolidWorks零件到ROS Gazebo仿真:手把手教你为Innfos机械臂配置物理属性和碰撞模型
  • 告别变砖风险:红米AC2100刷机前,用这个命令先给你的路由器做个“体检”
  • 2026年数字人平台:告别创作内耗,高效锁定专业生产力工具
  • 不止于实验:用Quartus 18.1和ModelSim深入理解加法器的硬件实现与时序
  • 【Springboot毕设全套源码+文档】基于SpringBoot的宠物医院宠物医疗系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 破解流域水文模拟难题,迈向精准水文预报:HEC-HMS模型产汇流模拟及参数优化核心技术揭秘
  • 微机消谐装置的功能介绍!
  • 2026年宁夏软件开发外包公司实力梯队与优选坐标
  • 从Excel数据到发表级热力图:用Python的Pandas+Matplotlib完整复现一篇SCI论文里的图
  • 70㎡,3万人民币的新加坡房租,一年涨幅20%,漂浮的中国伪中产