期货量化日志别泄露密码:天勤账户凭证脱敏写法

前言

用天勤量化(TqSdk)写国内期货程序化策略时,程序必须持有两类账号信息才能跑起来:一是快期账户(TqAuth 的用户名和密码),用于连接天勤的行情与交易网关,收 tick、收 K 线、把报单请求送出去;二是期货公司资金账户(TqAccount 里的期货公司名、资金账号、交易密码),用于在实盘环境真正把单子下到柜台。这两类凭证只应出现在本机配置文件或环境变量里,绝不能写进长期保存的日志、钉钉告警或截图。

调试时有人习惯用 print 把连接参数、配置字典原样打出来,在笔记本上尚可,策略放到服务器 7×24 跑、日志进采集系统后,密码泄露很难收回。下面说明两类凭证分别是什么、日志里哪些能留、推荐打码写法、.env 和仓库怎么管理。

一、先弄清两个「账号」不是同一个

名称 是什么 在程序里怎么用 日志里怎么处理
TqAuth 快期账户,认证天勤服务 TqApi(..., auth=TqAuth("用户","密码")) 密码永不出现;用户名可省略或打码
TqAccount 你在期货公司的资金户 TqApi(TqAccount("公司","资金账号","密码"), auth=...) 密码永不出现;资金账号可只显示后四位
TqSim / TqKq 模拟账户 学习、回测、影子常用 仍要 TqAuth,模拟不等于不要密码
.env 放敏感配置的文件 os.environ 读取 不进 git,不进日志

只用 TqSim 做模拟时,可以不填 TqAccount,但通常仍要 TqAuth 才能收到期货行情。

二、为什么日志里会出现密码(常见坑)

  1. print(TqAuth(user, pwd)) 或 print(config),config 里含明文密码。
  2. 异常栈:TqAccount("xx公司", "123456", "mypassword") 写在主文件,traceback 全文进日志。
  3. 告警机器人:把「连接失败」和构造参数一起推送。
  4. 把 .env 误提交到 git,或日志里 dump 了 os.environ。

三、禁止与推荐写法

禁止:

python 复制代码
log.info(f"connect {broker} {account} {password}")
print(api._account)  # 若含敏感字段

推荐:

python 复制代码
def mask_account(acc: str) -> str:
    if not acc or len(acc) < 4:
        return "****"
    return "****" + acc[-4:]

log.info("api_start", mode=MODE, account=mask_account(FUND_ACCOUNT), version=VERSION)

认证失败时记:auth_failed, error_type=...,不记密码。启动成功记 mode、symbol 列表即可。

四、.env 与代码仓库

  • 真实密码放在项目根目录 .env,文件名写入 .gitignore。
  • 仓库只提交 .env.example,内容为占位符:
text 复制代码
TQ_USER=你的快期用户
TQ_PASSWORD=请填写
BROKER_ID=期货公司名
FUND_ACCOUNT=资金账号
FUND_PASSWORD=请填写
TQ_MODE=sim
  • 策略交给同事时,文档写明「各自新建 .env,勿传微信明文」。

五、告警与 JSON 日志 schema

钉钉、邮件、短信正文:只带 symbol、order_id、last_msg、pos、时间等业务字段。JSON 日志在 schema 里把 password、fund_password、auth_token 列入禁止字段;日志采集侧可再加一层过滤。Linux 上日志目录权限建议仅运维可读(如 600)。

六、多账户 TqMultiAccount

若一个程序连多个期货公司资金户,每个账号同样打码,勿在一条日志里打印全部明文。

总结

期货量化日志脱敏,是把天勤连接所需的两类凭证关在配置里,而不是带进任何持久化输出。TqAuth 和 TqAccount 的密码绝不能出现在日志和告警里;资金账号若出现也应打码。从第一天就改用结构化日志和 .env,比泄露后找期货公司改密码、改快期密码省事得多,也符合团队交付和合规的基本要求。

FAQ

1)模拟盘也要脱敏吗?

要。TqAuth 仍是真实凭证,习惯应一致。

2)截图发工作群怎么办?

打码账号和合约即可,裁掉配置窗口。

3)日志已泄露怎么办?

尽快改密码,检查 git 历史是否误提交。

4)能否用密钥管理服务?

生产环境可用,原则不变:日志里不出现明文。

风险提示

以上内容用于日志安全参考,不构成投资建议。

相关推荐
代码山河7 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
在世修行7 小时前
智学文枢:题目流水线
python·多线程·状态机·pyside
梯度下降者8 小时前
零基础入门Python 爬虫
爬虫·python·数据分析·入门指南·webcrawler
“AI国潮设计-小江”9 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc
benchmark_cc10 小时前
用 Python 拉 A 股全市场实时快照:Notebook 请求、结果校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
伞伞悦读10 小时前
【第70期】Adam二阶矩不是方差:偏差校正、动量与AdamW完整实验
python
外收内放11 小时前
Python基础语法练习题(73)
java·前端·python
锋行天下11 小时前
Langgraph HITL 中断运行,用户输入后输出打字效果
人工智能·python
时早玖沐12 小时前
给 AstrBot 写一个天气推送插件:12 次提交、6 个坑
python·开源·ai编程
触底反弹12 小时前
🚀 FastAPI 五大重难点深度剖析:从 500 报错到彻底搞懂 Depends、Pydantic 与 SQLAlchemy
python·fastapi