TqApi 构造怎么切环境:同一套双均线策略跑回测和实盘
前言团队里常见一份策略三个文件backtest.py、sim.py、live.py改一个参数要改三处最后谁也不知道实盘跑的是哪版。TqApi是天勤量化TqSdk的入口类构造参数看起来只是几行初始化实际上决定了数据环境、账户类型和交易权限。我的做法是把环境差异压在构造层策略逻辑只保留一份。下面用双均线策略演示如何用配置切换TqBacktest、TqSim和实盘账户以及切换时最容易漏改的地方。一、三环境差异先写清楚环境典型构造策略关注点回测TqBacktest手续费、滑点、区间模拟TqSim执行链路、回报实盘TqAccount 等权限、风控、限仓同一段信号代码应三环境共用差异只在create_api()。我会把环境配置单独放在config/回测区间、合约列表、手续费、是否允许下单。策略文件只读配置不硬编码环境参数。这样新人接手时不容易改错文件却以为在跑模拟。二、统一工厂函数fromtqsdkimportTqApi,TqAuth,TqSim,TqBacktest,TqAccountfromdatetimeimportdateimportos MODEos.getenv(TQ_MODE,sim)# backtest / sim / livedefcreate_api():authTqAuth(os.getenv(TQ_USER),os.getenv(TQ_PASS))ifMODEbacktest:returnTqApi(backtestTqBacktest(start_dtdate(2024,1,1),end_dtdate(2024,6,30)),authauth,)ifMODEsim:returnTqApi(TqSim(),authauth)ifMODElive:returnTqApi(TqAccount(期货公司,资金账号,密码),authauth)raiseValueError(funknown mode:{MODE})apicreate_api()凭证不要写死在代码里用环境变量或本地配置文件且不要提交到仓库。工厂函数里建议对 MODE 做白名单校验非法值直接报错退出。曾经见过把sim写成sm策略静默跑在错误环境上直到实盘才发现逻辑从未在模拟里完整验证。三、双均线策略主体环境无关fromtqsdkimportTargetPosTask SYMBOLSHFE.rb2510klapi.get_kline_serial(SYMBOL,300,data_length200)taskTargetPosTask(api,SYMBOL)defsignal(df):iflen(df)32:return0fdf.close.rolling(10).mean().iloc[-2]sdf.close.rolling(30).mean().iloc[-2]iffs:return1iffs:return-1return0whileTrue:api.wait_update()ifnotapi.is_changing(kl.iloc[-1],datetime):continuetask.set_target_volume(signal(kl))主体里不要出现if MODE live之类分支避免逻辑漂移。如果必须区分环境行为例如实盘多打日志、回测多打绩效也放在外围包装层不要写进信号函数。信号函数一旦带环境分支三个月后基本没人能确认回测和实盘是否真的一致。四、切换时必查清单合约代码是否仍是可交易月份TargetPosTask是否在对应环境可用回测是否设置手续费和滑点实盘是否先只读监控再放开下单日志是否打印当前 MODE 和配置版本print(mode,MODE,symbol,SYMBOL)启动时打一行环境信息能减少一半「连错环境」事故。建议在日志文件名里也带 MODE 和日期例如sim_rb_20260328.log。排障时不用猜看文件名就知道当时跑的是什么环境。五、从回测到实盘的推荐顺序回测验证信号逻辑和参数区间模拟验证执行链路和日志实盘小仓验证权限和风控逐步放量不要跳步每次推进都保留同一 git 版本只改环境变量这样问题可复现。推进时建议写「环境切换记录」本次从 sim 到 live改了哪些配置、验证了什么、还有哪些未验证项。口头交接最容易丢信息书面记录能避免重复踩坑。总结天勤TqApi构造层是策略工程的「环境开关」。把回测、模拟、实盘差异收敛到create_api()策略主体就能长期维持一份代码、三种验证路径。双均线只是示例通道、套利、轮动策略都适用。环境切换做得越干净团队迭代越快实盘事故越少。当环境切换成为标准动作而不是临时技巧策略研发会从「个人经验驱动」转向「流程驱动」。这对小团队尤其重要即使人员变动也能按同一套路径完成验证和上线。FAQ1能否一个进程里同时开回测和模拟不建议。一次运行一种环境结果更清晰。2回测和模拟信号不一致先查 K 线周期、合约、是否用已收盘 bar再查环境参数。3实盘构造最常被忽略什么权限、交易时段、账户是否允许该品种。4环境变量和配置文件哪个好团队统一即可关键是不要写死在策略逻辑里。5换月时要改构造吗通常只改 SYMBOL 配置不必复制策略文件。风险提示本文用于期货量化技术实践讨论不构成任何投资建议。实盘连接涉及资金风险请在充分测试后谨慎操作。