前言

国内期货量化策略上线后,程序 7×24 跑在服务器:天勤 TqApi 主循环里 wait_update() 推进,每根 5 分钟 K 线收盘可能算出「螺纹钢均线金叉」这类交易信号,有人把信号原文直接推到钉钉群;同时柜台还可能回报断线、拒单、成交。若全部即时推送,群消息一分钟几十条「金叉/死叉」,真正重要的「行情停更半小时」「连续资金不足拒单」反而被淹没。

天勤在 tqsdk.lib 提供 TqNotify:在 wait_update 循环里用 get_notifies() 批量取服务器侧通知,适合接连接、柜台类事件。业务交易信号、风控触发则应走自建结构化日志,再按级别限频分流。下面说明怎么拆通道、怎么设冷却时间,让手机只响该响的。

一、TqNotify 做什么

from tqsdk import TqApi, TqAuth, TqKq, TqNotify

api = TqApi(account=TqKq(), auth=TqAuth("账户", "密码"))
notify = TqNotify(api)

while True:
    api.wait_update()
    for n in notify.get_notifies():
        handle_server_notify(n)  # 按 n 的内容分类

get_notifies() 返回自上次调用以来新增的通知列表,无新通知则 []。适合接柜台、连接类事件,不适合每根 K 线都发。

二、三级分流建议

级别 内容 通道 限频
L0 静默 常规信号、心跳 仅写文件 无上限
L1 日报 成交汇总、日终权益 邮件/群摘要 日 1 次
L2 即时 断线、连续拒单、emergency 钉钉/短信 同类型 5 分钟 1 条

业务信号(target 变化)记 jsonl,默认不推送。只有 emergencyrisk_ratio 超阈值才升 L2。

三、限频实现示意

import time

_last_alert = {}

def alert_l2(key, msg, cooldown=300):
    now = time.time()
    if now - _last_alert.get(key, 0) < cooldown:
        return
    _last_alert[key] = now
    send_dingtalk(msg)

TqNotify 解析出的同类断线通知也用 key="disconnect" 限频,避免重连抖动连发。

四、与手写监控的关系

夜盘监控专题里的 quote.datetime stale、volume_left 僵死等,应汇总成 L2,而不是每个 symbol 单独轰炸。成交可用 L0 记全量,L1 只发日累计。

五、测试环境隔离

mode=sim 的 webhook 指向测试群;配置从环境变量读,避免模拟盘告警进生产群(与日志脱敏同一习惯)。

六、业务信号该记什么但不推送

建议在 jsonl 里记:event=signalbar_datetimesymboltargetposreason,默认不调用钉钉。只有 event=emergencyrisk_ratio 超阈值才升 L2。均线金叉一天可能十几次,推送毫无意义;连续三次 last_msg 含资金不足则必须推送。

七、夜盘值守摘要模板

L1 日终一条 Markdown 摘要即可:

  • 当日 balance 起止
  • 成交笔数、手续费
  • 拒单次数 Top3 last_msg
  • 断线次数

由定时任务在夜盘结束触发,不打扰白天。

八、TqNotify 与自建监控的组合

TqNotify 偏柜台与连接;quote.datetime stale、volume_left 僵死等需自建规则。两者都走 handle_notify,用不同 key 限频,避免双通道重复发同一件事。

总结

告警太吵,是因为把研究信号和运维事件混在一个通道里。天勤 TqNotify 负责收服务器通知,适合断线、柜台类事件;均线信号等应写结构化日志并默认静默。给 L2 即时告警加同类冷却时间,日终再用 L1 摘要成交与权益,手机才不会在夜盘被无效消息占满。

FAQ

1)TqNotify 和 get_trade 区别?

Notify 是服务端通知流;成交以 get_trade 为准。

2)能否过滤 notify 内容?

handle_server_notify 里按字段丢弃无关项。

3)信号要不要推送?

看团队习惯;默认建议只记日志。

4)Webhook 怎么接?

alert_l2 里用 requests.post 调钉钉机器人即可,URL 放环境变量,勿写进仓库。


本文基于天勤 TqSdk 公开 API 整理,不构成投资建议。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐