前言回测曲线漂亮、模拟盘还行、实盘一上就开始亏或根本成交不了——这在期货量化里太常见。经验上八成是规则不一致或执行假设过乐观两成才是市场本身变了。排查要分“逻辑偏差”和“执行偏差”不要一上来就改参数拟合。下面按天勤TqSdk常见用法列回测与实盘容易分叉的点并给一份可对勾的自查表。目的是让同一套代码在三环境下的差异可见、可测而不是用回测结果直接预测实盘收益。一、逻辑偏差同一套代码却相当于两个策略问题表现天勤侧对齐办法用未收盘 K 线[-1]算信号回测好看、实盘乱下单统一[-2]datetime触发回测用主连、实盘做具体月价格序列不同明确 KQ.m / 具体合约规则换月未处理回测连续、实盘断档主力切换专题平旧开新顺序指标 data_length 不足回测前期 nan 被忽略显式跳过 nan交易时段未过滤休市误触发quote交易时间或日历过滤这些改一行规则回测曲线就会变说明之前回测量的不是你现在实盘的策略。二、执行偏差逻辑对了成交假设不同问题表现说明回测默认成交过理想滑点、排队未建模在TqSim/回测里设手续费、滑点敏感性限价太远实盘无成交用对价或TargetPosTask的 ACTIVE部分成交仓位半开以get_trade汇总勿假设一次全成平今平昨拒单insert_orderoffset 与 task 的offset_priority资金不足开仓失败get_account可用资金检查天勤回测推进是历史数据重放不会复现极端行情下的流控与排队模拟盘更接近但仍非交易所全真。三、数据与合约差异主力连续 KQ.m回测方便实盘下单要对具体合约复权与分红股票相关期货注意交割、贴水夜盘与白盘订阅合约是否含夜盘过滤要与实盘一致回测区间若全是趋势行情样本外一段常立刻失真这属于样本问题而非 API 问题。四、环境构造混用TqApi(auth)临时TqSim与TqKq记录不互通团队对账应用TqKq模拟误连实盘配置环境变量隔离专题常见做法回测结束未捕获BacktestFinished误以为“策略还在跑”五、天勤对齐检查表建议打印信号触发仅用is_changing(kl.iloc[-1], datetime)信号价格与指标均在iloc[-2]回测、模拟、实盘同一strategy.py执行使用TargetPosTask或insert_order其一不混用set_target_volume后循环继续wait_update限价/对价规则与回测假设一致成本回测配置手续费做过“手续费 ×2”敏感性测试核对模拟盘用get_trade与trade_log对过一天实盘首日小仓位对照 position六、建议的验证顺序回测样本内 样本外TqKq快期模拟跑至少包含一种极端波动周实盘极小仓位对照成交与持仓再放大仓位跳步往往把执行问题误判成“策略失效”。总结回测与实盘不一致优先查 K 线收盘规则、合约与换月、交易时段、执行方式限价/对价/部分成交、手续费滑点、以及 TqSim/TqKq/实盘环境是否混用。天勤允许三环境共用策略代码但必须接受回测成交理想化用模拟和小资金实盘做执行校验。用自查表固定团队规范比每次口头解释 [-1]/[-2] 更省事。样本外与敏感性测试属于研究纪律不能靠调参把回测曲线贴到实盘。FAQ1回测盈利实盘必亏吗无必然关系若逻辑一致而执行变差先查成交与成本再谈市场结构变化。2TargetPosTask 会导致回测实盘差吗task 在回测里同样依赖 wait_update差异主要来自价格假设不是 task 本身。3tick 回测和 K 线回测能一样吗周期不同就是不同策略不要混比。4天勤回测能设滑点吗查阅当前版本TqSim/回测文档中的手续费与成交模型参数做敏感性扫描。风险提示历史回测不代表未来表现本文不构成投资建议。
Python 期货策略回测正常实盘不一样:常见原因与天勤对齐检查
发布时间:2026/6/5 5:54:51
前言回测曲线漂亮、模拟盘还行、实盘一上就开始亏或根本成交不了——这在期货量化里太常见。经验上八成是规则不一致或执行假设过乐观两成才是市场本身变了。排查要分“逻辑偏差”和“执行偏差”不要一上来就改参数拟合。下面按天勤TqSdk常见用法列回测与实盘容易分叉的点并给一份可对勾的自查表。目的是让同一套代码在三环境下的差异可见、可测而不是用回测结果直接预测实盘收益。一、逻辑偏差同一套代码却相当于两个策略问题表现天勤侧对齐办法用未收盘 K 线[-1]算信号回测好看、实盘乱下单统一[-2]datetime触发回测用主连、实盘做具体月价格序列不同明确 KQ.m / 具体合约规则换月未处理回测连续、实盘断档主力切换专题平旧开新顺序指标 data_length 不足回测前期 nan 被忽略显式跳过 nan交易时段未过滤休市误触发quote交易时间或日历过滤这些改一行规则回测曲线就会变说明之前回测量的不是你现在实盘的策略。二、执行偏差逻辑对了成交假设不同问题表现说明回测默认成交过理想滑点、排队未建模在TqSim/回测里设手续费、滑点敏感性限价太远实盘无成交用对价或TargetPosTask的 ACTIVE部分成交仓位半开以get_trade汇总勿假设一次全成平今平昨拒单insert_orderoffset 与 task 的offset_priority资金不足开仓失败get_account可用资金检查天勤回测推进是历史数据重放不会复现极端行情下的流控与排队模拟盘更接近但仍非交易所全真。三、数据与合约差异主力连续 KQ.m回测方便实盘下单要对具体合约复权与分红股票相关期货注意交割、贴水夜盘与白盘订阅合约是否含夜盘过滤要与实盘一致回测区间若全是趋势行情样本外一段常立刻失真这属于样本问题而非 API 问题。四、环境构造混用TqApi(auth)临时TqSim与TqKq记录不互通团队对账应用TqKq模拟误连实盘配置环境变量隔离专题常见做法回测结束未捕获BacktestFinished误以为“策略还在跑”五、天勤对齐检查表建议打印信号触发仅用is_changing(kl.iloc[-1], datetime)信号价格与指标均在iloc[-2]回测、模拟、实盘同一strategy.py执行使用TargetPosTask或insert_order其一不混用set_target_volume后循环继续wait_update限价/对价规则与回测假设一致成本回测配置手续费做过“手续费 ×2”敏感性测试核对模拟盘用get_trade与trade_log对过一天实盘首日小仓位对照 position六、建议的验证顺序回测样本内 样本外TqKq快期模拟跑至少包含一种极端波动周实盘极小仓位对照成交与持仓再放大仓位跳步往往把执行问题误判成“策略失效”。总结回测与实盘不一致优先查 K 线收盘规则、合约与换月、交易时段、执行方式限价/对价/部分成交、手续费滑点、以及 TqSim/TqKq/实盘环境是否混用。天勤允许三环境共用策略代码但必须接受回测成交理想化用模拟和小资金实盘做执行校验。用自查表固定团队规范比每次口头解释 [-1]/[-2] 更省事。样本外与敏感性测试属于研究纪律不能靠调参把回测曲线贴到实盘。FAQ1回测盈利实盘必亏吗无必然关系若逻辑一致而执行变差先查成交与成本再谈市场结构变化。2TargetPosTask 会导致回测实盘差吗task 在回测里同样依赖 wait_update差异主要来自价格假设不是 task 本身。3tick 回测和 K 线回测能一样吗周期不同就是不同策略不要混比。4天勤回测能设滑点吗查阅当前版本TqSim/回测文档中的手续费与成交模型参数做敏感性扫描。风险提示历史回测不代表未来表现本文不构成投资建议。