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

前言

用天勤量化(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=...,不记密码。启动成功记 modesymbol 列表即可。

四、.env 与代码仓库

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

五、告警与 JSON 日志 schema

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

六、多账户 TqMultiAccount

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

总结

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

FAQ

1)模拟盘也要脱敏吗?

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

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

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

3)日志已泄露怎么办?

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

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

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

风险提示

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

相关推荐
CC数学建模1 小时前
2026年江西省研究生数学建模竞赛1题:空间数据分析中的过拟合识别完整思路、代码、模型、文章,全网首发高质量分享!
python·算法·数学建模
matlabgoodboy1 小时前
计算机java程序代写python代码编写c/c++代做qt设计php开发matlab
java·c语言·python
不考研当牛马2 小时前
Django 框架 深度学习
python·深度学习·django
databook2 小时前
用SymPy自动求解追及问题的方程
python·数学·动效
测试19982 小时前
Jmeter性能压测:TPS与QPS
自动化测试·软件测试·python·jmeter·测试用例·压力测试·性能测试
AI数据皮皮侠2 小时前
全国高考报名、录取数据(1977-2026)
大数据·数据库·人工智能·python·机器学习·高考
Full Stack Developme2 小时前
Java DFA算法
java·python·算法
留白_2 小时前
pandas文件读取与存储
开发语言·python·pandas
我的xiaodoujiao2 小时前
API 接口自动化测试详细图文教程学习系列25--继续处理testCase中的数据
python·学习·测试工具·pytest