news 2026/6/9 16:47:08

期货量化新策略不敢直接实盘:影子模式只记信号不下单

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
期货量化新策略不敢直接实盘:影子模式只记信号不下单

前言

国内期货量化,是用 Python 程序根据行情自动决定买卖方向、目标持仓几手。例如 5 分钟 K 线上算均线:收盘价在均线上方,程序认为该做多,输出「目标净持仓 3 手」——这一输出就叫交易信号(常记成target或目标仓)。程序通过天勤量化(TqSdk)的TargetPosTask.set_target_volume(3)把真实账户里的持仓往 3 手推,期货公司柜台才会收到报单。

策略从回测、模拟到实盘,往往会改代码:均线从 20 改成 30、加一条风控,这叫一版新程序。上线前你会担心:新程序算出来的信号,和现在正在实盘跑的老程序是否一致?若直接切实盘,万一新信号差很多,就会真下单、真亏钱。影子模式(shadow)解决的就是这件事:程序照常连行情、照常算指标、照常算出「该买几手」,也写入日志,但故意不调用set_target_volume、不insert_order,不向交易所报单。等影子跑够一段时间,对比日志确认新信号可靠,再切换成真正下单。

天勤没有名叫「影子模式」的菜单项,需要你在代码里用环境变量或分支切断发单路径。下面说明几种接法、日志怎么记、为何不能两个进程同时登录同一实盘资金户。

一、先弄清几个名词

名称通俗含义在影子模式里干什么
期货量化策略根据行情规则自动算买卖的 Python 程序影子版与实盘版可以是同一份代码
交易信号策略输出,如「rb2510 目标净仓 +3 手」影子模式要记下来,但不执行
目标净仓 / target希望账户持有的净多头或净空头手数影子只 log,不set_target_volume
上线 / live程序连期货公司实盘账户真下单TQ_MODE=live等团队自定
新版 / 旧版改参数或逻辑后的程序版本新版常先 shadow,旧版可能仍在 live
TqApi天勤主连接对象shadow 也要创建,否则没有行情
TqAuth快期账户认证,用于连行情网关收行情通常都需要
TqAccount期货公司资金账户,实盘下单用live 用;shadow 可不连或连但不 set
TqSim/TqKq天勤模拟、快期模拟账户异进程影子常用,绝对不下实盘单
wait_update()推进行情与持仓更新影子也必须调,否则 K 线不更新
bar_datetime触发信号的那根 K 线时间对比新旧版信号是否同一时刻一致
shadow团队自定的模式名只记信号不下单

二、为何「连了 TqAccount」也不会自动下单

常见误解是:一连实盘账户就会交易。天勤里只有你主动调仓才会报单:主要是TargetPosTask.set_target_volume(n),或手写insert_order。主循环若只算均线、print 结果,账户不会有任何变化。影子模式就是利用这一点:在调用set_target_volume之前return或跳过。

三、同进程影子(常用写法)

同一进程连行情(或连TqAccount只读资金),用环境变量区分模式:

importos MODE=os.environ.get("TQ_MODE","live")# live / shadow / simdefon_signal(symbol,target,kl):bar_dt=str(kl.iloc[-2].datetime)log_signal(symbol=symbol,target=target,bar_datetime=bar_dt,mode=MODE)ifMODE=="shadow":return# 影子:到此为止,不向柜台发单tasks[symbol].set_target_volume(target)

说明:

  • iloc[-2]是已收盘 K 线,避免用未收盘 bar 算信号。
  • 影子时仍要api.wait_update(),否则kl和均线不更新。
  • log_signal建议 JSON 行,字段与 live 一致,便于事后 diff。

四、异进程影子(绝对不下实盘单)

进程 A:TqAccount跑老策略、真下单。进程 B:同一套信号代码,但TqApi(TqSim())TqKq(),只写日志。优点:物理隔离,不可能误下单;缺点:模拟无真实滑点,只能对比「同一根 K 线上 target 是否相同」,不能对比成交价。

对比时可算:方向一致率、差异 bar 列表、是否覆盖夜盘和换月。

五、何时从 shadow 切到 live

团队书面规则,例如:shadow 至少两周、包含夜盘、方向一致率高于 95%、无未解释差异。切换时建议停机改环境变量TQ_MODE=live,启动后先wait_updateget_position对账,再允许自动交易。勿在交易高峰瞬间切换且无日志。

六、切勿双进程抢同一资金户

两个 Python 进程各TqApi(TqAccount(同一期货公司, 同一资金账号, ...))同时自动报单,会互相撤单、重复开仓。影子若需连实盘账户类型,应在同一进程用MODE=shadow分支,不要第二个进程再登录同一资金户。

七、日志字段建议

shadow 与 live 用同一套字段:tssymbolbar_datetimetargetmodeversion。live 额外记posorder_id。日后用脚本按bar_datetimesymbol做 join 对比。

总结

影子模式是期货量化上线前的一道保险:在真实行情节奏下,让新程序完整走一遍「算信号」的链路,把目标持仓记下来,但切断通往天勤调仓接口的路径。天勤里没有单独按钮,只要不调用TargetPosTaskinsert_order,用TQ_MODE=shadow或另起TqSim进程即可实现。可以这样理解:信号是「程序想买几手」,下单是「真的去跟期货公司说」;影子只做到前者,确认无误后再做后者。

FAQ

1)shadow 要不要读资金?

可选。读get_account()做风控日志可以,但不要 set 非零目标。

2)shadow 能测滑点吗?

不能,没有真实成交;滑点要用小额 live 或模拟统计。

3)TqBacktest 算影子吗?

回测是用历史数据重放,和「实盘旁路 shadow」不同,可互补。

4)退出程序要做什么?

api.close(),避免连接泄漏。

风险提示

以上内容用于上线验证参考,不构成投资建议。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 16:47:06

i.MX 8ULP GPIO电气特性深度解析与工业物联网设计实战

1. 项目概述与GPIO设计的重要性在嵌入式系统设计的江湖里,处理器与外部世界的每一次“对话”,几乎都离不开通用输入输出接口,也就是我们常说的GPIO。它就像处理器的“手脚”和“感官”,负责电平的读取、信号的输出,连接…

作者头像 李华
网站建设 2026/6/9 16:45:09

5分钟终极指南:用G-Helper释放华硕笔记本全部性能潜力

5分钟终极指南:用G-Helper释放华硕笔记本全部性能潜力 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Ex…

作者头像 李华
网站建设 2026/6/9 16:45:05

终极指南:5分钟快速上手BilibiliDown免费B站视频下载神器

终极指南:5分钟快速上手BilibiliDown免费B站视频下载神器 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirror…

作者头像 李华
网站建设 2026/6/9 16:43:52

NXP Kinetis K64 MCU深度解析:从Cortex-M4内核到低功耗物联网设计实战

1. 项目概述:为什么选择Kinetis K64?在嵌入式项目里选型,就像给一个复杂的系统挑选心脏。这颗“心脏”不仅要动力足、反应快,还得省电、功能多,最好还能自带“保镖”和“翻译官”,能直接跟各种传感器、执行…

作者头像 李华