当前位置: 首页 > news >正文

量化程序如何同时支持回测、模拟盘和实盘

前言

策略写到一半,最常见的问题是:回测一套代码、模拟又 copy 一份改账户、实盘再改第三份,三周后三份已经对不上。能同时支撑回测、模拟、实盘的程序,核心不是“多写几个 if”,而是把环境差异压在 TqApi 构造层,信号与执行层共用

天勤TqSdk用同一套get_kline_serialwait_updateTargetPosTask接口,通过构造参数切换TqBacktestTqSimTqKqTqAccount。下面给一套可落地的分层方式和切换检查表。

一、三层分离模型

内容是否随环境变化
环境层TqApi(...)的 account、backtest、auth
策略层指标、信号、目标仓
运维层日志路径、告警、配置少量

策略层禁止写死“我是回测”,禁止在信号里读环境变量分支两套均线逻辑。

二、环境层四种构造(对照表)

模式典型构造用途
回测TqApi(backtest=TqBacktest(start_dt=..., end_dt=...), auth=...)历史验证
本地临时模拟TqApi(TqSim(), auth=...)或仅auth(默认进程内 TqSim)本机调试,结束即丢
快期模拟TqApi(TqKq(), auth=...)团队可见、APP 可核对
实盘TqApi(TqAccount(...), auth=...)真资金

回测与实盘不要在同一进程里随意切换构造而不重启;换环境应重启进程并清状态。

三、统一入口示例

importosfromdatetimeimportdatefromtqsdkimportTqApi,TqAuth,TqSim,TqKq,TqAccount,TqBacktest,BacktestFinished MODE=os.getenv("TQ_MODE","sim")# backtest | sim | kq | liveAUTH=TqAuth(os.getenv("TQ_USER"),os.getenv("TQ_PASS"))defmake_api():ifMODE=="backtest":returnTqApi(backtest=TqBacktest(start_dt=date(2024,1,1),end_dt=date(2024,6,1)),auth=AUTH,)ifMODE=="sim":returnTqApi(TqSim(),auth=AUTH)ifMODE=="kq":returnTqApi(TqKq(),auth=AUTH)ifMODE=="live":returnTqApi(TqAccount("期货公司","资金账号","密码"),auth=AUTH)raiseValueError(MODE)api=make_api()

实盘账户参数以你开户信息为准;模拟勿连实盘配置(团队常做环境变量隔离专题)。

四、回测结束与主循环

回测时间走完会抛BacktestFinishedtqsdk.exceptions)。主循环应捕获并关闭 API,导出统计或trade_log

try:run_strategy(api)# 内部 while True: wait_update ...exceptBacktestFinished:passfinally:api.close()

不要在回测结束后继续wait_update,否则逻辑无意义。

五、策略层必须统一的细节

  1. K 线触发:统一is_changing(..., "datetime")+iloc[-2]规则
  2. 手续费与滑点:回测在TqSim/ 回测参数里配置,实盘无法“回测同款理想成交”
  3. 合约代码:回测用具体月份或主连规则要写进 config,换月逻辑三环境共用
  4. TargetPosTask:三环境同一调用方式,set_target_volume后继续wait_update

六、切换环境时的验证清单

  • MODE环境变量与运维文档一致
  • 快期模拟/实盘能在 APP 或柜台核对持仓
  • 回测样本外区间再跑一遍,与模拟方向一致
  • 日志里打印当前MODE和合约列表
  • api.close()在进程退出时执行,避免连接泄漏

七、不要指望“自动一模一样”

三环境共用代码,不等于绩效一致。回测无排队成交、模拟有滑点模拟、实盘还有拒单与流控。设计目标是逻辑一致、可复现,然后在各环境单独做执行质量评估。

总结

同时支持回测、模拟、实盘:环境差异收敛到make_api()一类工厂函数,策略主体只依赖TqApi通用接口。回测用TqBacktest并捕获BacktestFinished;调试可用TqSim;团队模拟用TqKq;实盘用TqAccount

切换环境用配置而非复制策略文件;统一 K 线触发与目标仓逻辑;换模式后按清单验证账户与合约。接受执行层差异,用日志和 trade 记录评估而非强求回测曲线等于实盘。

FAQ

1)能否一个进程先回测再实盘?

不建议;应分进程、分配置,避免状态残留。

2)回测需要 auth 吗?

官方示例通常仍传TqAuth,按你使用的数据权限配置。

3)TqSim 和默认 TqApi(auth) 区别?

不传交易单元时也是进程内临时模拟;显式TqSim()语义更清晰,与TqKq不同。

4)多策略多进程怎么部署?

每进程一个TqApi,注意同一实盘账户别多进程抢单。

风险提示

本文讨论工程实践,不构成投资建议。实盘前请完成模拟验证。

http://www.zskr.cn/news/1463619.html

相关文章:

  • 避坑指南:MATLAB读取MDF和BLF文件时,你可能会遇到的5个常见错误及解决方法
  • 5个实用技巧:用marked.js打造高效Markdown处理方案
  • 别再只盯着CCF了!手把手教你用CORE Ranking和CCF中文期刊目录,精准定位你的投稿目标
  • 训练Mask-RCNN时,那个神秘的events文件怎么用TensorBoard打开看损失曲线?
  • Moneta Markets亿汇:“量子芯片点燃科技预期”
  • 如何免费实现游戏控制器虚拟化:ViGEmBus驱动完整指南
  • 手把手教你用STM32F072C8T6自制一个带串口的J-Link OB(附全套资料)
  • 为什么有些影视网站越用越顺手?一次实际体验后的分析
  • MatAnyone:一键实现专业级视频抠图的终极解决方案
  • 2026年现阶段,四川优质水果基地如何选?这份深度指南为您解析 - 2026年企业资讯
  • Aegisub字幕编辑高效解决方案:4大使用场景的完整技术指南
  • POP3协议抓包实战:从Wireshark过滤器技巧到常见认证失败排查
  • 3分钟掌握Windows窗口置顶技巧:告别频繁切换,工作效率提升50%
  • 终极指南:3分钟用BetterNCM Installer让网易云音乐焕然一新
  • 夹克制作全流程科普:工艺标准、自动化改造与设备科学选型
  • VTJ.PRO 双版本升级:构建企业级 AI 低代码协同开发新范式
  • NVIDIA Profile Inspector深度解析:显卡性能调优实战指南
  • 088、文字检测 YOLO 风格:用 YOLO 做场景文字检测替代 DBNet 的实验
  • 别再只用Measure Inertia了!用CATIA VBA脚本一键生成零件最小材料包络盒(附完整代码)
  • DDD-016:分层架构与 DDD
  • 2026玉溪市权威认证贵金属回收 TOP5+黄金回收白银回收铂金回收门店地址电话推荐
  • 做课件找不到合适BGM?11个优质课件背景音乐站点整理
  • 2026苏州配眼镜推荐:干将东路写字楼里的光学革新与五类方案解析 - 配眼镜新资讯
  • 从汽车悬架到手机防抖:阻尼振动微分方程在工程中的实际应用盘点
  • 怒怼微软后,研究员公开GitHub高危漏洞:一个链接拿下私有仓库权限
  • SAP顾问转型记:当GUI事务码FI12失效,我是如何用Fiori App搞定银行账户管理的
  • 083、无人机航拍小目标检测:VisDrone 数据集上的 YOLO 专项优化实战
  • 别再手动加载数据了!用Simulink Model Properties的回调函数自动搞定(附set_param命令详解)
  • 别只当黑盒用!深入.pyd文件:用dir、help和inspect模块探索其内部接口
  • 005、Zephyr RTOS社区与生态介绍