想用 Python 写期货自动交易程序从哪里搭框架

发布时间:2026/6/5 18:27:24

想用 Python 写期货自动交易程序从哪里搭框架 前言“用 Python 写期货自动交易程序”在国内通常指用 Python 连接期货行情与交易接口在螺纹钢、股指、原油等国内期货合约上按你的规则自动下单、跟踪成交、管理持仓。读者可能是交易员转程序化也可能是程序员刚接触期货尚未开户或尚未区分“研究回测”和“实盘循环”。本文不给空泛架构图而是给出能跑通的最小框架基于天勤TqSdk并解释每一块在期货场景里解决什么问题TqApi是什么、get_kline_serial和datetime从哪来、wait_update为何不能省、TargetPosTask与手写报单如何选。你可以先照搬骨架再替换自己的信号。一、五块骨架期货程序化通用模块在期货场景里干什么天勤常见入口环境连模拟或实盘、认证TqApi(TqSim()/TqKq()/TqAccount(...), authTqAuth(...))数据订合约行情、K 线get_quote,get_kline_serial循环等数据更新wait_update()触发何时算信号is_changing(kl.iloc[-1], datetime)等执行/核对下单、对账TargetPosTask或insert_orderget_position期货与日股不同有夜盘、保证金、平今平昨、合约到期换月所以执行与核对模块在国内尤其不能省。二、最小可运行示例带注释说明fromtqsdkimportTqApi,TqAuth,TqSim,tafuncfromtqsdk.libimportTargetPosTask# 1环境TqSim 为进程内模拟适合第一次联调apiTqApi(TqSim(),authTqAuth(快期账户,密码))symbolSHFE.rb2510# 2数据60 秒周期 K 线data_length 要大于均线周期klapi.get_kline_serial(symbol,60,data_length200)taskTargetPosTask(api,symbol)try:whileTrue:api.wait_update()# 3循环收包并更新 kl 表含 datetime 列ifnotapi.is_changing(kl.iloc[-1],datetime):continue# 4触发仅在新 K 线时进入ma5tafunc.ma(kl.close,5)ma20tafunc.ma(kl.close,20)ifma5.iloc[-2]ma20.iloc[-2]:task.set_target_volume(1)# 5执行目标净仓 1 手elifma5.iloc[-2]ma20.iloc[-2]:task.set_target_volume(-1)else:task.set_target_volume(0)exceptKeyboardInterrupt:passfinally:api.close()读这段时请关注datetime来自 K 线表由行情服务更新[-2]是上一根已收盘 barset_target_volume之后循环仍要继续task 才能在后续 wait_update 里发单。三、文件如何随策略变复杂而拆分config.py合约列表、K 线周期秒数、手数、MODEsim/kq/livesignals.py输入kl输出目标手数不要在里面创建 TqApimain.pymake_api() 循环 close()换模拟/实盘只改环境层避免三份策略拷贝。四、第一步建议做什么安装 TqSdk、注册快期账户、跑通上面脚本直到能打印 K 线datetime推进。再改均线参数、加交易时段过滤、换TqKq在 APP 里对持仓。不要第一天就接实盘。五、常见误区没有wait_update就insert_order数据截面可能是旧的没有datetime过滤每个 tick 算均线进程结束不close()下次连接异常总结想用 Python 写国内期货自动交易程序从五块骨架入手环境、订阅、wait_update 循环、按 K 线datetime触发、TargetPosTask 执行与 position 核对。天勤把行情表、交易对象放在同一 API 下适合个人从模拟过渡到实盘。先跑通最小示例再拆文件、加风控比一上来就接 CTP 回调更符合多数人的学习曲线。FAQ1要先学 CTP 吗可先会用天勤 API拒单与规则遇问题再补。2能否只做行情不下单可以只订 quote/kl但自动交易必须接交易单元。3多策略如何部署一策略一进程一 Api同账户避免多进程抢单。4回测TqApi(backtestTqBacktest(...))结束捕获BacktestFinished。风险提示本文用于入门结构说明不构成投资建议。

相关新闻