量化脚本准备实盘了吗?TqSdk 上线前工程检查

一个脚本能连接行情、算出信号并在模拟账户成交,只能证明顺利路径基本跑通。实盘前还要确认账户环境不可误选、数据异常会阻止新动作、信号不会重复、订单与持仓能对账、重启可以恢复、日志足以定位问题。任何一项说不清,都应继续停留在模拟阶段。

启动入口必须拒绝模糊配置

程序启动时显式选择行情、模拟或实盘环境,缺少必要参数就失败。不能因为实盘字段为空而自动使用模拟,也不能因为模拟账号不可用就回退到实盘。

复制代码
import os

mode = os.environ.get("TRADING_MODE")
allowed = {"MARKET_DATA", "SIM", "LIVE"}
if mode not in allowed:
    raise RuntimeError("TRADING_MODE 必须明确设置")

if mode == "LIVE" and os.environ.get("LIVE_APPROVED") != "YES":
    raise RuntimeError("实盘启动缺少独立确认")

这只是启动门槛,不代表设置一个变量就获得实盘授权。真实系统还需要账户权限、部署审批和风险限制。代码重点是没有安全默认值,环境不清楚时直接停止。

启动摘要记录程序版本、配置指纹、环境、合约与时间,不记录密码。API 创建后先读取账户、持仓和活动委托,发现未知状态则进入人工确认,不立刻运行策略。

数据与时间要能证明当前可用

每个订阅对象都要完成初始化,所需字段有效,行情时间按预期推进。策略使用多个合约或周期时,检查它们的时间关系,不把旧数据与新数据组合。

程序要知道交易时段、休市和异常断流的差别。超过预期没有更新时,安全行为是暂停新增动作并报告最后有效时间,而不是继续用旧价格。

历史数据、回测数据和实时数据的粒度与字段定义要记录。使用主连生成信号时,执行合约映射和换月单独验证;主连不能直接下单。

系统时间、行情时间和日志时间各有用途。延迟监控可以同时记录,但信号对齐必须使用明确时间源。时钟漂移或时区错误应在启动检查中暴露。

信号和目标需要可重复验证

每个信号都能从固定输入重算,使用的是已完成数据,没有未来信息。触发频率与规则一致,新 K 线策略不会因当前线每次变化而重复判断。

信号转换为目标仓位时,风险预算、手数上限和当前账户状态都参与。风险拒绝返回明确原因;拒绝不是零目标,不能意外触发平仓。

参数变化保留版本和原因。上线版本固定参数,运行中不接受未审计的临时修改。若需要动态参数,也要记录生效时间和回滚方式。

抽取一组真实历史事件与实时模拟事件,逐条核对输入、指标、信号和目标。只看总体收益无法证明每个判断正确。

订单、成交和持仓必须闭环

同一合约只有一个交易入口。使用 TargetPosTask 时不再并行手工下单;手工订单管理则统一跟踪创建、撤销、部分成交和结束状态。

任何新订单前检查活动委托、当前持仓、账户资金和交易时段。订单创建后持续观察,成交价格只来自成交回报,不用行情价格代替。

撤单后等待最终状态并重新计算剩余目标。部分成交不能按原始手数重发。持仓达到目标时仍要确认没有可能改变结果的活动委托。

程序启动、正常退出和异常重启都执行账户对账。保存的内部目标只用于解释,账户订单、成交与持仓才是恢复依据。

风控与故障处理要先于自动重试

明确不可新增风险的条件:账户状态未知、关键行情失效、活动委托无法解释、持仓超限、日志不可写或策略计算异常。每个条件都能在模拟环境触发和验证。

重试只覆盖确定的临时连接或数据故障,次数有限。认证、配置和业务断言失败不自动重试。恢复后重新初始化订阅并核对账户,不从中断位置盲目继续。

风险上限不仅有单合约手数,还应包含账户总保证金、总体暴露和相关合约组合。初始版本宁可保守,也不要在没有验证的公式中自动放宽。

报警信息包含运行标识、合约、错误代码和待处理状态,但不含秘密。报警送达失败也要有替代记录,不能因为通知通道异常就让程序继续承担未知风险。

日志、部署与人工接管要能落地

日志覆盖启动、数据准备、信号、目标、风险拒绝、订单、成交、持仓、异常和退出。字段固定、时间统一、敏感信息过滤,保存期限与权限明确。

部署机器使用固定 Python 与依赖版本,升级前在独立环境回放测试。系统重启后服务不会未经账户核对就自动恢复下单。磁盘、网络和进程健康有监控。

人工接管入口要清楚:如何停止新信号、如何查看活动委托和持仓、如何安全退出、谁能决定恢复。没有人能在告警后找到运行机器和账户,就不算具备接管能力。

上线采用小规模、有限品种和有限时段,逐步扩大。模拟结果不能证明真实撮合,第一轮实盘的目标仍是验证执行与恢复,不是追求收益。

扩大范围必须基于明确记录,而不是"运行几天没出事"。先确认已覆盖的行情场景、订单状态、异常演练和人工接管,再一次只增加一个维度,例如资金、品种或运行时长。出现问题能够快速退回上一组已验证配置。

任何上线变更都准备回滚方法。依赖升级、参数修改和部署脚本变化分别记录;回滚后仍需核对账户事实,不能只把代码版本切回去就宣告恢复。

上线前最终检查清单

  • 环境、账户、合约和程序版本明确,实盘没有安全默认值。
  • 行情有效且时间对齐,主连研究与具体合约执行分开。
  • 信号可复算,目标经过风险检查,同一业务意图不重复下单。
  • 订单、成交、持仓和资金完成对账,重启能从账户事实恢复。
  • 异常会停止新增风险,有限重试、日志、报警与人工接管均已演练。
  • 模拟和受控小资金验证逐级进行,不把历史收益当成实盘承诺。

是否可以实盘,不由"代码跑了多久"决定,而由每一个状态能否被解释、每一种失败能否被限制决定。把这些检查做成启动和运行中的固定门槛,实盘才是一次受控验证,而不是把未知问题交给真实资金发现。

相关推荐
回眸&啤酒鸭4 天前
【回眸】Minicart 电商购物车核心功能落地指南
人工智能
一隅论数智4 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
默_笙4 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
AI的探索之旅4 天前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
AlbertZein4 天前
Step-5-Preview 上手实测:3D 游戏、金融分析、网页设计一次跑完
人工智能·aigc
LaughingZhu4 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
qq_426003964 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk