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

期货量化模拟误连实盘:天勤配置与环境变量分离

前言

最怕的事之一,是本地调试脚本连上了实盘账户;或者 Git 里提交了带密码的配置,同事 clone 下来直接跑。我习惯把「环境(模拟/实盘)」和「密钥」都从代码里拆出去,用配置文件加环境变量,启动时打印当前模式,人为确认一眼再跑。

天勤TqSdk构造TqApi时传入TqSimTqKqTqAccount,改一行就能换环境,若写死在策略深处就容易改漏。下面给一套个人和小团队能落地的分离方式。

一、不要把密码写进仓库

禁止:

auth=TqAuth("真实账号","真实密码")# 提交到 Git

应改为从环境变量或本地不提交的secrets.yaml读取:

importosfromtqsdkimportTqAuth user=os.environ["TQ_USER"]pwd=os.environ["TQ_PASSWORD"]auth=TqAuth(user,pwd)

secrets.yaml加入.gitignore。CI 机器用密钥管理服务注入环境变量。

二、用配置区分 sim / kq / live

config.yaml示例(不含密码):

mode:sim# sim | kq | livesymbol:SHFE.rb2510

启动脚本读取 mode,创建对应交易单元:

importosimportyamlfromtqsdkimportTqApi,TqAuth,TqSim,TqAccountdefload_cfg():withopen("config.yaml",encoding="utf-8")asf:returnyaml.safe_load(f)defcreate_api(cfg):auth=TqAuth(os.environ["TQ_USER"],os.environ["TQ_PASSWORD"])mode=cfg["mode"]ifmode=="sim":returnTqApi(TqSim(),auth=auth)ifmode=="kq":fromtqsdkimportTqKqreturnTqApi(TqKq(),auth=auth)ifmode=="live":returnTqApi(TqAccount("期货公司","资金账号","密码"),auth=auth)raiseValueError("unknown mode")cfg=load_cfg()print(">>> 当前模式:",cfg["mode"],"<<< 确认后 3 秒内继续")api=create_api(cfg)

实盘模式前增加人工确认或二次环境变量ALLOW_LIVE=1,防止误点。

三、目录与路径分离

模拟日志、状态文件放data/sim/,实盘放data/live/,避免读错持久化状态(策略状态文件也应分目录存放)。云主机部署时用绝对路径环境变量TQ_DATA_DIR

四、团队规范建议

做法
密钥仅环境变量或密钥库
模式config.yaml 的 mode,启动打印
实盘单独分支或单独启动脚本
代码评审禁止合并含密码的 diff

五、和 Jupyter、多脚本的关系

Notebook 里不要硬编码TqAccount;用同一create_api(cfg)入口。多个策略文件import同一配置模块,避免某文件漏改仍连实盘。

总结

模拟误连实盘,多数是配置和密钥没分离。天勤切换环境靠构造参数,策略层应集中创建TqApi,用 mode + 环境变量双保险,启动时显性打印当前模式。

建议今天就把仓库里的明文密码清掉、轮换一次快期密码,并加上config.example.yaml供同事复制。

FAQ

1)config.yaml 能放账号吗?

最好不要;只放 mode、合约等非敏感项。

2)Docker 怎么注入?

docker run -e TQ_USER=... -e TQ_PASSWORD=...

3)多账户?

多个环境变量前缀,如TQ_USER_A

4)误连后如何自查?

查启动日志 mode、查api._account类型(调试用),对照客户端成交。

风险提示

本文用于工程安全实践,不构成投资建议。实盘操作务必双人复核或权限隔离。

http://www.rkmt.cn/news/1458620.html

相关文章:

  • AI落地物流的三个真实切口:从订单自动化到计费智能化
  • 庆阳市2026年最新黄金回收白银回收铂金回收门店排行榜+联系方式电话推荐 - 大熊猫898989
  • League Akari:基于LCU API的微内核插件化架构深度解析与实战指南
  • 宁波市2026年最新黄金回收白银回收铂金回收门店排行榜+联系方式电话推荐 - 大熊猫898989
  • 环境变量DESTDIR和INSTALL_ROOT详解
  • 曲靖市2026年最新黄金回收白银回收铂金回收门店排行榜+联系方式电话推荐 - 大熊猫898989
  • 计算机大数据毕设实战-基于Python的新疆特产推荐系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 白城市2026年最新黄金回收白银回收铂金回收门店排行榜及联系方式电话推荐 - 盛世金银回收
  • 055、角度环与角速度环的串级PID实现
  • 别再只怪指针了!C++项目里0xC0000005访问冲突,试试先检查内存对齐
  • SpringBoot+Vue宾馆客房管理系统源码+论文
  • 手机出国没信号?一文搞懂LTE/5G的PLMN自动选网与漫游机制(附23.122协议R9解读)
  • DeepSeek V4技术解析:1.6T参数+1M上下文的工程落地逻辑
  • AI应用出海增长新解法:一文拆透AI SaaS联盟营销落地成功案例
  • DDD-015:领域事件(Domain Event
  • 百色市2026年最新黄金回收白银回收铂金回收门店排行榜及联系方式电话推荐 - 盛世金银回收
  • 13000黄大年茶思屋榜文第130期——珠峰会战第七期:五大技术难题全量整理
  • 用MiniMax M2.7替代BI工程师:真实业务场景下的低代码数据查询实践
  • Claude 3.7 vs GPT-4o真实数据管道实战对比
  • SRAM加速LLM推理:LUT-GEMV算法与硬件架构设计
  • SpringBoot+Vue大学生英语学习平台源码+论文
  • 保姆级教程:手把手教你修改FFmpeg源码,让ffplay也能播H265的RTMP直播流
  • 莫瑶教育AI全域课程:重构AI时代竞争力,从职场提效到商业变现的系统化成长方案 - 全国职业学校推荐官
  • 从 ChatMemory 到 Mem0:我终于理解了 Agent 里的“记忆”到底是什么
  • 通达信缠论插件:3分钟掌握专业级K线分析技术
  • 摆脱无效内卷,做好项目管理的实用思路
  • 华为AI眼镜深度解析:31克无感终端与豆包AI引擎的技术突破
  • 告别重复造轮子:用快马高效生成unet变体,加速你的图像分割模型迭代
  • QQ空间历史说说一键导出终极指南:免费获取你的青春回忆
  • Halcon 23.11实战:用自带果汁瓶图片5分钟搞定你的第一个深度学习缺陷检测模型