前言

回测曲线漂亮、模拟盘还行、实盘一上就开始亏或根本成交不了——这在期货量化里太常见。经验上,八成是规则不一致或执行假设过乐观,两成才是市场本身变了。排查要分“逻辑偏差”和“执行偏差”,不要一上来就改参数拟合。

下面按天勤 TqSdk 常见用法,列回测与实盘容易分叉的点,并给一份可对勾的自查表。目的是让同一套代码在三环境下的差异可见、可测,而不是用回测结果直接预测实盘收益。

一、逻辑偏差(同一套代码却相当于两个策略)

问题 表现 天勤侧对齐办法
用未收盘 K 线 [-1] 算信号 回测好看、实盘乱下单 统一 [-2] + datetime 触发
回测用主连、实盘做具体月 价格序列不同 明确 KQ.m / 具体合约规则
换月未处理 回测连续、实盘断档 主力切换专题:平旧开新顺序
指标 data_length 不足 回测前期 nan 被忽略 显式跳过 nan
交易时段未过滤 休市误触发 quote 交易时间或日历过滤

这些改一行规则,回测曲线就会变,说明之前回测量的不是你现在实盘的策略。

二、执行偏差(逻辑对了,成交假设不同)

问题 表现 说明
回测默认成交过理想 滑点、排队未建模 TqSim/回测里设手续费、滑点敏感性
限价太远 实盘无成交 用对价或 TargetPosTask 的 ACTIVE
部分成交 仓位半开 get_trade 汇总,勿假设一次全成
平今平昨 拒单 insert_order offset 与 task 的 offset_priority
资金不足 开仓失败 get_account 可用资金检查

天勤回测推进是历史数据重放,不会复现极端行情下的流控与排队;模拟盘更接近但仍非交易所全真。

三、数据与合约差异

  • 主力连续 KQ.m:回测方便,实盘下单要对具体合约
  • 复权与分红:股票相关;期货注意交割、贴水
  • 夜盘与白盘:订阅合约是否含夜盘,过滤要与实盘一致

回测区间若全是趋势行情,样本外一段常立刻失真,这属于样本问题而非 API 问题。

四、环境构造混用

  • TqApi(auth) 临时 TqSimTqKq 记录不互通,团队对账应用 TqKq
  • 模拟误连实盘配置:环境变量隔离(专题常见做法)
  • 回测结束未捕获 BacktestFinished,误以为“策略还在跑”

五、天勤对齐检查表(建议打印)

信号

  • 触发仅用 is_changing(kl.iloc[-1], "datetime")
  • 信号价格与指标均在 iloc[-2]
  • 回测、模拟、实盘同一 strategy.py

执行

  • 使用 TargetPosTaskinsert_order 其一,不混用
  • set_target_volume 后循环继续 wait_update
  • 限价/对价规则与回测假设一致

成本

  • 回测配置手续费
  • 做过“手续费 ×2”敏感性测试

核对

  • 模拟盘用 get_tradetrade_log 对过一天
  • 实盘首日小仓位对照 position

六、建议的验证顺序

  1. 回测样本内 + 样本外
  2. TqKq 快期模拟跑至少包含一种极端波动周
  3. 实盘极小仓位对照成交与持仓
  4. 再放大仓位

跳步往往把执行问题误判成“策略失效”。

总结

回测与实盘不一致,优先查 K 线收盘规则、合约与换月、交易时段、执行方式(限价/对价/部分成交)、手续费滑点、以及 TqSim/TqKq/实盘环境是否混用。天勤允许三环境共用策略代码,但必须接受回测成交理想化,用模拟和小资金实盘做执行校验。

用自查表固定团队规范,比每次口头解释 [-1]/[-2] 更省事。样本外与敏感性测试属于研究纪律,不能靠调参把回测曲线贴到实盘。

FAQ

1)回测盈利实盘必亏吗?

无必然关系;若逻辑一致而执行变差,先查成交与成本,再谈市场结构变化。

2)TargetPosTask 会导致回测实盘差吗?

task 在回测里同样依赖 wait_update;差异主要来自价格假设,不是 task 本身。

3)tick 回测和 K 线回测能一样吗?

周期不同就是不同策略,不要混比。

4)天勤回测能设滑点吗?

查阅当前版本 TqSim/回测文档中的手续费与成交模型参数,做敏感性扫描。

风险提示

历史回测不代表未来表现,本文不构成投资建议。

更多推荐