
这篇教程帮你解决什么问题: 量化策略在云服务器上 7×24 小时跑着,但信号触发、成交回报、程序异常这些事你不可能一直盯着。跟着这篇做完,你的策略每触发一次信号、每成交一笔、每出一次异常,都会秒级推送到你的微信,不用装任何额外 App,个人微信号就能收到。整个搭建过程 30 分钟以内,核心代码不到 30 行。
我玩量化第四年了,策略一直挂在云服务器上跑。但很长一段时间里,"策略给我发消息"这件事我是用最原始的方式解决的:
邮件。
没错,2024 年的时候我的策略报警还在发邮件。说出来都觉得丢人,但当时觉得"能收到就行"。
直到有一天,策略下午 1 点 23 分触发了一个异常——行情连接断了,程序自动重连失败,挂了。报警邮件 1 点 24 分就发出去了,但我到晚上 7 点翻邮箱才看到。一下午策略都是瘫的,仓位裸奔了 5 个多小时。
那天晚上我在量化群里吐槽这事,一个群友回了句:"你还在用邮件告警?企业微信机器人 5 分钟就能搞定,消息直接弹到微信。"
我的第一反应是:企业微信?我又没有企业,跟我有啥关系?
结果人家告诉我,个人就能注册企业微信,一个人也能建群,群里加个机器人就有 webhook 地址,策略往这个地址发个 HTTP 请求,微信里就能收到消息。
我将信将疑试了一下——从注册到收到第一条策略推送,真的没超过 20 分钟。现在我所有告警全走这条路,用了快一年,稳得一批。
我的老方案:策略里用 smtplib 发邮件到 QQ 邮箱,QQ 邮箱绑微信提醒。听起来链路挺完整对吧?实际体验是:邮件经常进垃圾箱、QQ 邮箱的微信提醒有延迟(最长一次晚了 40 分钟)、而且所有报警都是干巴巴的文字,想看上下文还得 SSH 上服务器翻日志。最致命的是,邮件这东西平时没人盯着看,报警发出去等于石沉大海。那次行情断连事故,策略瘫了 5 个多小时,如果当时微信秒推,我 10 分钟内就能远程重启。
量化交易这行,告警的价值 = 信息量 × 及时性。邮件两头都不占。
整个过程不用写一行代码。
第一步,手机应用商店下载"企业微信",用手机号注册。注册时会让你填企业信息——随便填,企业名称我写的就是"我的量化工作室",规模选 1-50 人,不需要任何认证审核,直接过。
第二步,建一个群。我把群名叫"量化告警",群里就我一个人。
第三步,在群里加机器人:群设置 → 群机器人 → 添加,给机器人起个名字(我的叫"小 Quant"),确认后就会得到一个 webhook 地址,长这样:
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx这个地址就是全部的"接口凭证",千万保管好,泄露了别人就能往你群里发消息。
第四步,也是很多人不知道的一步:个人微信怎么收企业微信的消息? 两个办法——我两个都用了:
服务器这边更简单。我的策略跑在腾讯云轻量应用服务器上(2核2G 的 Ubuntu,一天不到一块钱),Python 环境,装个 requests 就行。
我封装了一个极简的发送函数:
import requests
WEBHOOK = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key"
def send_wechat(content):
requests.post(WEBHOOK, json={
"msgtype": "text",
"text": {"content": content}
}, timeout=5)然后在策略的关键节点调用:
# 信号触发
def on_signal(signal):
send_wechat(f"【信号】{signal.symbol} 触发做多,价格 {signal.price}")
# 成交回报
def on_trade(trade):
send_wechat(f"【成交】{trade.symbol} {trade.direction} {trade.volume}手 @ {trade.price}")
# 异常告警(这个最重要)
except Exception as e:
send_wechat(f"【异常】策略报错:{e},请尽快处理!")
raise第一次测试的时候,我在服务器上手动跑了句 send_wechat("测试:机器人上线"),按下回车不到 2 秒,手机"叮"一声,消息到了。
那一刻的感觉怎么说呢——就像给策略装了个嘴,它终于会喊我了。
对比之前的邮件方案:发邮件要连 SMTP 服务器、要授权码、还要处理各种编码问题,代码写了 60 多行还动不动超时。企业微信机器人就一个 HTTP POST,30 行代码还带异常处理,凭什么不早用。
用了一个礼拜之后,我发现一个甜蜜的烦恼:消息太多了。
我三个策略,正常交易日一天能触发几十条信号+成交推送,半夜美股策略再来一波,手机叮叮当当响个不停,老婆都有意见了。
解决办法是告警分级,我把消息分成三级:
实现上就加一个判断:
import datetime
def send_wechat(content, level="P1"):
now = datetime.datetime.now()
# 非异常消息,深夜只记录不推送
if level != "P0" and (now.hour >= 23 or now.hour < 7):
with open("/opt/quant/silent.log", "a") as f:
f.write(f"{now} {content}\n")
return
requests.post(WEBHOOK, json={
"msgtype": "text", "text": {"content": content}
}, timeout=5)改完之后世界清净了。真正要命的事秒级到我手机,鸡毛蒜皮的事早上花 1 分钟看汇总。告警这东西,太多了等于没有——人会对铃声脱敏的。
用了两个月都顺风顺水,直到有一次行情剧烈波动,我的高频策略一分钟内成交了 20 多笔——结果微信里只收到了 7、8 条消息。
我当时以为策略出 bug 了,对着日志数了半天,成交记录明明一条不少。后来查了企业微信的官方文档才发现:每个机器人有频率限制,每分钟最多发 20 条消息,超出的直接丢弃,不报错、不排队。
这个坑挺隐蔽的,因为平时根本不会触发,偏偏在最需要消息的时候(行情剧烈波动)掉链子。
我的解决方案是给发送端加了个简单的队列合并:1 秒内收到的多条消息合并成一条发送,像这样:
【成交汇总】14:32 一分钟内成交 6 笔:
IC2509 卖平 2手 @ 6012.4
IC2509 买开 2手 @ 6008.2
...改动也就十几行代码,用一个带定时 flush 的缓冲列表就行。改完之后再大的行情冲击,消息一条不丢。
所以给大家的建议:如果你的策略可能高频触发消息,从第一天就把消息合并机制加上,别像我一样交学费。
可能有人会说:我策略在家里的电脑上跑,能不能用这套告警?
技术上能,但我不建议。我之前就是家里小主机跑策略的,踩过的坑可以写一本血泪史:
家里宽带晚上高峰期抖一下,行情断线;物业检修停电,策略直接死;最离谱的一次是路由器固件自动升级重启,策略断连 20 分钟,而当时我在外面,连"家里网断了"这件事都不知道——因为告警程序也跟着网一起断了。
这就是本地跑告警的死穴:监控者和被监控者共生死。家里断电断网,策略挂了,告警也挂了,你什么都收不到。
云服务器上跑就没这个问题。腾讯云轻量应用服务器这种,机房供电网络都是企业级的,我挂了一年除了我自己手贱重启,没掉过线。告警程序和策略同机,策略活着告警就活着;策略真挂了,进程守护(我用的 systemd 自动拉起)+ 告警配合,10 秒内我就能收到消息。
成本嘛,一天不到一块钱,还不够一次断线事故损失的零头。
用了快一年,说两个不足:
另外提醒一句:webhook 的 key 别硬编码在开源到 GitHub 的代码里,我见过有人 key 泄露,机器人被发了一堆垃圾广告。放环境变量或者本地配置文件里。
这些都是小事,不影响核心体验。
维度 | 旧方式(邮件告警) | 新方式(企业微信机器人) |
|---|---|---|
触达速度 | 几分钟到几小时(进垃圾箱就无限期) | 2 秒内 |
可靠性 | 会被当垃圾邮件,平时没人看 | 微信直接弹窗 |
接入成本 | SMTP 授权码+60行代码 | 一个 webhook 地址+30行代码 |
费用 | 免费但不可靠 | 免费且可靠 |
依赖 | 策略在哪跑都行但容易共生死 | 配合云服务器,7×24 稳定在线 |
一句话:量化策略不配告警就是裸奔,而企业微信机器人是目前个人玩家成本最低、体验最好的告警方案,没有之一。
如果你是已经在跑策略的老玩家,今晚就花 20 分钟把邮件告警换了吧,睡个好觉比什么都重要。如果你是刚入门的小白,建议从第一天就把告警加上——哪怕策略还在回测阶段,先把"小 Quant"机器人拉进群,养成习惯,以后真上实盘了这就是你的安全带。
Q:企业微信机器人 webhook 怎么创建?
手机下载企业微信 App,手机号注册(企业信息随便填,个人也能注册),建一个群,进「群设置 → 群机器人 → 添加」,创建后就会得到 webhook 地址,全程 5 分钟,不需要企业认证。
Q:个人没有企业,能用企业微信机器人吗?
可以。注册时企业名称随意填写即可,不需要营业执照或任何认证,一个人建群也能加机器人,功能完全够用。
Q:企业微信机器人有发送频率限制吗?
有,每个机器人每分钟最多 20 条消息,超出的部分直接丢弃且不报错。高频策略建议做消息合并,把短时间内的多条消息攒成一条发送。
Q:能不能不装企业微信 App,直接用个人微信收消息?
可以。在企业微信 App 里进「我的企业 → 微信插件」,用个人微信扫码绑定后,群消息会推送到个人微信。但建议还是装企业微信 App,告警和普通聊天分开,不容易漏看。
Q:量化交易告警一定要配云服务器吗?
强烈建议。本地电脑跑策略+告警,家里断电断网时策略和告警会一起挂,你什么消息都收不到。云服务器 7×24 在线,2核2G 的配置一天不到一块钱,告警和策略同机部署,可靠性完全不是一个级别。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。