量化程序如何同时支持回测、模拟盘和实盘
前言策略写到一半最常见的问题是回测一套代码、模拟又 copy 一份改账户、实盘再改第三份三周后三份已经对不上。能同时支撑回测、模拟、实盘的程序核心不是“多写几个 if”而是把环境差异压在 TqApi 构造层信号与执行层共用。天勤TqSdk用同一套get_kline_serial、wait_update、TargetPosTask接口通过构造参数切换TqBacktest、TqSim、TqKq、TqAccount。下面给一套可落地的分层方式和切换检查表。一、三层分离模型层内容是否随环境变化环境层TqApi(...)的 account、backtest、auth是策略层指标、信号、目标仓否运维层日志路径、告警、配置少量策略层禁止写死“我是回测”禁止在信号里读环境变量分支两套均线逻辑。二、环境层四种构造对照表模式典型构造用途回测TqApi(backtestTqBacktest(start_dt..., end_dt...), auth...)历史验证本地临时模拟TqApi(TqSim(), auth...)或仅auth默认进程内 TqSim本机调试结束即丢快期模拟TqApi(TqKq(), auth...)团队可见、APP 可核对实盘TqApi(TqAccount(...), auth...)真资金回测与实盘不要在同一进程里随意切换构造而不重启换环境应重启进程并清状态。三、统一入口示例importosfromdatetimeimportdatefromtqsdkimportTqApi,TqAuth,TqSim,TqKq,TqAccount,TqBacktest,BacktestFinished MODEos.getenv(TQ_MODE,sim)# backtest | sim | kq | liveAUTHTqAuth(os.getenv(TQ_USER),os.getenv(TQ_PASS))defmake_api():ifMODEbacktest:returnTqApi(backtestTqBacktest(start_dtdate(2024,1,1),end_dtdate(2024,6,1)),authAUTH,)ifMODEsim:returnTqApi(TqSim(),authAUTH)ifMODEkq:returnTqApi(TqKq(),authAUTH)ifMODElive:returnTqApi(TqAccount(期货公司,资金账号,密码),authAUTH)raiseValueError(MODE)apimake_api()实盘账户参数以你开户信息为准模拟勿连实盘配置团队常做环境变量隔离专题。四、回测结束与主循环回测时间走完会抛BacktestFinishedtqsdk.exceptions。主循环应捕获并关闭 API导出统计或trade_logtry:run_strategy(api)# 内部 while True: wait_update ...exceptBacktestFinished:passfinally:api.close()不要在回测结束后继续wait_update否则逻辑无意义。五、策略层必须统一的细节K 线触发统一is_changing(..., datetime)iloc[-2]规则手续费与滑点回测在TqSim/ 回测参数里配置实盘无法“回测同款理想成交”合约代码回测用具体月份或主连规则要写进 config换月逻辑三环境共用TargetPosTask三环境同一调用方式set_target_volume后继续wait_update六、切换环境时的验证清单MODE环境变量与运维文档一致快期模拟/实盘能在 APP 或柜台核对持仓回测样本外区间再跑一遍与模拟方向一致日志里打印当前MODE和合约列表api.close()在进程退出时执行避免连接泄漏七、不要指望“自动一模一样”三环境共用代码不等于绩效一致。回测无排队成交、模拟有滑点模拟、实盘还有拒单与流控。设计目标是逻辑一致、可复现然后在各环境单独做执行质量评估。总结同时支持回测、模拟、实盘环境差异收敛到make_api()一类工厂函数策略主体只依赖TqApi通用接口。回测用TqBacktest并捕获BacktestFinished调试可用TqSim团队模拟用TqKq实盘用TqAccount。切换环境用配置而非复制策略文件统一 K 线触发与目标仓逻辑换模式后按清单验证账户与合约。接受执行层差异用日志和 trade 记录评估而非强求回测曲线等于实盘。FAQ1能否一个进程先回测再实盘不建议应分进程、分配置避免状态残留。2回测需要 auth 吗官方示例通常仍传TqAuth按你使用的数据权限配置。3TqSim 和默认 TqApi(auth) 区别不传交易单元时也是进程内临时模拟显式TqSim()语义更清晰与TqKq不同。4多策略多进程怎么部署每进程一个TqApi注意同一实盘账户别多进程抢单。风险提示本文讨论工程实践不构成投资建议。实盘前请完成模拟验证。