前言很多读者学期货量化的路径是先在 Excel 或 Python 里读历史 K 线 CSV算出均线、突破、胜率觉得“策略有了”。下一步想接到真实或模拟交易时不知道程序还要接哪些环节——不是再写一个指标公式而是谁提供实时 K 线、什么时候算一次信号、怎么下单、怎么确认持仓真的变了。本文面向只会用 K 线算信号、还没跑通自动下单的国内期货 Python 学习者用天勤TqSdk把“研究脚本”接到“模拟盘可交易”的最小路径写清楚。会解释TqApi、get_kline_serial、wait_update、datetime、TargetPosTask各是什么角色不默认你已开户或懂 CTP。一、期货自动交易比“算信号”多哪几步可以记成五条缺一条就会出现“能打印价格但从不下单”或“乱下单”账户与环境TqApi 认证 模拟账户如TqSim或TqKq。实时 K 线get_kline_serial(合约, 周期秒数, data_length...)。事件循环while True里api.wait_update()等待行情服务推送并更新内存表。触发时机用 K 线表最后一行的datetime是否变化判断新 bar见专题在iloc[-2]上算你原来的信号。执行与核对TargetPosTask.set_target_volume或insert_order再用get_position/get_trade核对。你原来的ma5 ma20可以几乎原样搬进第 4 步变的是数据来源和触发条件。二、把 CSV 研究换成实时 K 线表fromtqsdkimportTqApi,TqAuth,TqSim,tafunc apiTqApi(TqSim(),authTqAuth(快期账户,密码))symbolSHFE.rb2510# 上期所螺纹钢换成你可交易的合约klapi.get_kline_serial(symbol,60,data_length200)# 60 秒1 分钟线kl是一张随市场更新的表datetime列由行情服务写入表示每根 K 线的时间。研究里df.iloc[-1]若在实盘里直接用于“收盘价突破”往往用的是未收盘的最后一根会导致一分钟内信号闪多次实盘应改为在iloc[-2]上判断并用下一节的datetime触发。三、触发何时算一次信号whileTrue:api.wait_update()ifnotapi.is_changing(kl.iloc[-1],datetime):continuema5tafunc.ma(kl.close,5)ma20tafunc.ma(kl.close,20)long_sigma5.iloc[-2]ma20.iloc[-2]andma5.iloc[-3]ma20.iloc[-3]含义只有在新 1 分钟 K 线此处 duration60开始时才用刚收盘那根的金叉逻辑。wait_update必须放在循环里否则表不更新。四、执行TargetPosTask 表达“目标几手”国内期货程序化里用目标净持仓比逐笔手写报单更不易乱尤其有平今平昨时。天勤TargetPosTask在后续wait_update里撤单、报单fromtqsdk.libimportTargetPosTask taskTargetPosTask(api,symbol)iflong_sig:task.set_target_volume(1)# 循环必须继续 wait_updatetask 才会动作文档要求同一合约不要与insert_order混用。五、核对持仓是否真的变了posapi.get_position(symbol)ifapi.is_changing(pos,pos_long)orapi.is_changing(pos,pos_short):print(symbol,净仓,pos.pos)模拟阶段建议下一笔极小仓位对照成交与持仓团队模拟可用TqKq()在快期 APP 里看仓。六、再往后模拟与实盘跑通TqSim后通常只改TqApi构造如TqKq()、TqAccount(期货公司,...)信号函数一行不改。退出时api.close()避免连接残留。总结只会 K 线算信号的读者接入国内期货交易的下一步是用天勤订实时 serial、用datetime变化控制算信号频率、用[-2]做收盘决策、用TargetPosTask表达目标手数、用position/trade核对。这五步与指标公式无关却是从研究到程序化的分水岭。建议先在模拟环境跑通一周日志再考虑实盘小仓位勿在未核对成交的情况下加大手数。FAQ1想先理解每一笔报单可短期用insert_order学习再加交易时段、资金检查再切 task。2没有快期账户按天勤文档注册模拟也需要TqAuth。3信号一天只有一次循环会空转吗过滤后 CPU 很低空转正常。4回测怎么接加TqBacktest参数捕获BacktestFinished后close()。风险提示本文用于技术入门不构成投资建议。