前言国内期货量化是用 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_MODElive等团队自定新版 / 旧版改参数或逻辑后的程序版本新版常先 shadow旧版可能仍在 liveTqApi天勤主连接对象shadow 也要创建否则没有行情TqAuth快期账户认证用于连行情网关收行情通常都需要TqAccount期货公司资金账户实盘下单用live 用shadow 可不连或连但不 setTqSim/TqKq天勤模拟、快期模拟账户异进程影子常用绝对不下实盘单wait_update()推进行情与持仓更新影子也必须调否则 K 线不更新bar_datetime触发信号的那根 K 线时间对比新旧版信号是否同一时刻一致shadow团队自定的模式名只记信号不下单二、为何「连了 TqAccount」也不会自动下单常见误解是一连实盘账户就会交易。天勤里只有你主动调仓才会报单主要是TargetPosTask.set_target_volume(n)或手写insert_order。主循环若只算均线、print 结果账户不会有任何变化。影子模式就是利用这一点在调用set_target_volume之前return或跳过。三、同进程影子常用写法同一进程连行情或连TqAccount只读资金用环境变量区分模式importos MODEos.environ.get(TQ_MODE,live)# live / shadow / simdefon_signal(symbol,target,kl):bar_dtstr(kl.iloc[-2].datetime)log_signal(symbolsymbol,targettarget,bar_datetimebar_dt,modeMODE)ifMODEshadow:return# 影子到此为止不向柜台发单tasks[symbol].set_target_volume(target)说明iloc[-2]是已收盘 K 线避免用未收盘 bar 算信号。影子时仍要api.wait_update()否则kl和均线不更新。log_signal建议 JSON 行字段与 live 一致便于事后 diff。四、异进程影子绝对不下实盘单进程 ATqAccount跑老策略、真下单。进程 B同一套信号代码但TqApi(TqSim())或TqKq()只写日志。优点物理隔离不可能误下单缺点模拟无真实滑点只能对比「同一根 K 线上 target 是否相同」不能对比成交价。对比时可算方向一致率、差异 bar 列表、是否覆盖夜盘和换月。五、何时从 shadow 切到 live团队书面规则例如shadow 至少两周、包含夜盘、方向一致率高于 95%、无未解释差异。切换时建议停机改环境变量TQ_MODElive启动后先wait_update读get_position对账再允许自动交易。勿在交易高峰瞬间切换且无日志。六、切勿双进程抢同一资金户两个 Python 进程各TqApi(TqAccount(同一期货公司, 同一资金账号, ...))同时自动报单会互相撤单、重复开仓。影子若需连实盘账户类型应在同一进程用MODEshadow分支不要第二个进程再登录同一资金户。七、日志字段建议shadow 与 live 用同一套字段ts、symbol、bar_datetime、target、mode、version。live 额外记pos、order_id。日后用脚本按bar_datetime和symbol做 join 对比。总结影子模式是期货量化上线前的一道保险在真实行情节奏下让新程序完整走一遍「算信号」的链路把目标持仓记下来但切断通往天勤调仓接口的路径。天勤里没有单独按钮只要不调用TargetPosTask和insert_order用TQ_MODEshadow或另起TqSim进程即可实现。可以这样理解信号是「程序想买几手」下单是「真的去跟期货公司说」影子只做到前者确认无误后再做后者。FAQ1shadow 要不要读资金可选。读get_account()做风控日志可以但不要 set 非零目标。2shadow 能测滑点吗不能没有真实成交滑点要用小额 live 或模拟统计。3TqBacktest 算影子吗回测是用历史数据重放和「实盘旁路 shadow」不同可互补。4退出程序要做什么api.close()避免连接泄漏。风险提示以上内容用于上线验证参考不构成投资建议。