
这篇教程帮你解决什么问题: 量化策略跑在云服务器上,但每次想看收益、持仓、当日盈亏,都得 SSH 上去翻日志或者开券商 App,又慢又麻烦。跟着这篇做完,你会有一个 7×24 小时在线的 Grafana 监控看板,部署在腾讯云轻量应用服务器上,手机浏览器打开就能看到实时收益曲线、持仓明细和当日成交,出门在外刷一眼手机心里就有数了。
先交代下我的背景:个人量化玩家,玩期货 CTA 和股票 T0 策略快四年了,目前手上跑着三个策略,全在云服务器上挂着。
说实话,"搭监控看板"这件事我拖了快一年。
不是不知道该做,是想到 Grafana、Prometheus、数据源配置这些词就头大——我又不是做运维的,凭啥要学这套互联网公司的玩意儿?每次想看账户情况,SSH 上服务器 tail -f 一下日志,或者打开券商 App 看一眼,不也能活吗?
直到上个月发生一件事,彻底把我整醒了。
那天我在外面吃饭,手机弹出券商的平仓提示短信,但我完全不知道是哪个策略触发的、平了多少、当时整体仓位是什么状态。等我赶回家打开电脑查日志,已经是一个半小时之后了。那一单其实没问题,但那种"我的钱在外面跑,我却两眼一抹黑"的感觉,真的很难受。
第二天周末,我咬咬牙,花了半天时间把监控看板搭了起来。
结果——比我想象的简单太多了,而且用完之后回不去了。
在搭看板之前,我的"监控体系"是这样的:
策略日志打到服务器本地文件里,想看收益就 SSH 上去
grep成交记录,再用眼睛自己加总。持仓变化靠券商 App 推送,但 App 只告诉你"发生了什么",不告诉你"为什么发生"和"整体什么情况"。有次服务器磁盘被日志写满,策略挂了两天我都没发现——因为那两天我没 SSH 上去看。算下来,光是"每天查三次账户状态"这件事,我每天就要花掉 20 多分钟,一个月就是 10 个小时,纯纯的浪费生命。
最让我后怕的是磁盘写满那次。量化交易这行,策略停两天,错过行情不说,仓位状态和数据连续性全断了,恢复起来巨麻烦。
所以我的需求很明确:要一个随时能看的、图形化的、手机上也能打开的监控面板。
方案没什么好纠结的,量化圈里监控看板的主流组合就是 Prometheus + Grafana:策略程序把指标(累计收益、当日盈亏、持仓数量、委托状态)吐给 Prometheus,Grafana 负责画图展示。这套组合开源免费,文档多,踩坑有人兜底。
服务器我直接用的腾讯云轻量应用服务器,2核2G 的 Ubuntu 22.04。选择它的原因很实际:
如果你策略和监控想分开跑,2核2G 也够了——Prometheus 加 Grafana 加起来内存占用不到 800M。我的做法是监控和策略同机,省一份服务器钱。
开完机器,先装 Docker(后面的组件全用 Docker 跑,省得污染环境):
curl -fsSL https://get.docker.com | bash
systemctl enable --now docker周六上午 10 点,泡了杯咖啡开始干活。
先在腾讯云轻量服务器的防火墙里放行两个端口:3000(Grafana)和 9090(Prometheus)。控制台点两下的事。
然后起 Prometheus,配置文件就一个 prometheus.yml,核心是指定抓取目标:
scrape_configs:
- job_name: 'quant'
scrape_interval: 15s
static_configs:
- targets: ['host.docker.internal:8000']这里 8000 是我的策略程序暴露指标的端口,等下会说怎么暴露。
docker run -d --name prometheus -p 9090:9090 \
-v /opt/quant/prometheus.yml:/etc/prometheus/prometheus.yml \
--add-host=host.docker.internal:host-gateway \
prom/prometheus再启 Grafana:
docker run -d --name grafana -p 3000:3000 grafana/grafana两条命令,不到三分钟,浏览器打开 http://服务器IP:3000,Grafana 的登录界面就出来了(默认账号密码 admin/admin,进去会强制改密码)。
对比一下我印象中的"搭监控":之前帮朋友看一个私募小团队的系统,他们是外包做的监控页面,改一个图表要找外包排期,一次小几千。我自己用 Grafana,从安装到出第一张图,总共 40 分钟,一分钱没花。
这一步是唯一需要写点代码的地方,但也就十几行。
我的策略是 Python 写的,用 prometheus_client 这个库暴露指标。核心思路:策略每次成交、每次结算的时候,顺手更新几个全局指标:
from prometheus_client import start_http_server, Gauge
total_pnl = Gauge('quant_total_pnl', '累计盈亏')
today_pnl = Gauge('quant_today_pnl', '当日盈亏')
position_count = Gauge('quant_position_count', '当前持仓数')
# 策略初始化时
start_http_server(8000)
# 成交回调里
def on_trade(trade):
total_pnl.set(account.total_pnl)
today_pnl.set(account.today_pnl)
position_count.set(len(account.positions))加完重启策略,curl http://localhost:8000/metrics 能看到指标在吐,就成了。
回到 Grafana,添加 Prometheus 数据源(地址填 http://localhost:9090,注意容器网络的话填宿主机 IP 或加 host),然后新建 Dashboard,加 Panel,查询语句就写 quant_total_pnl——收益曲线出来了。
那一刻真的有点爽。我又陆续加了当日盈亏、持仓数、委托成功率三个面板,还配了个简单的告警:持仓数连续 5 分钟为 0 且不是收盘时间,就发通知(通知渠道我用的企业微信机器人,这个我另外写过一篇教程,这里不展开)。
中午吃饭的时候,我拿出手机,浏览器打开 http://服务器IP:3000,登录——
收益曲线、当日盈亏、持仓明细,全在手机屏幕上了。Grafana 的页面对移动端适配得不错,不用装任何 App。
现在我每天的状态是:早上刷牙的时候刷一眼隔夜盈亏,中午吃饭看一眼上午的成交情况,晚上收盘看一眼全天曲线。每次不到 30 秒。
那种"我的策略在外面跑,我随时知道它在干嘛"的踏实感,是 SSH 翻日志永远给不了的。
不是全程零问题,我踩了一个挺有迷惑性的坑。
看板搭好的第二天晚上,我发现一个问题:晚上 8 点看当日盈亏曲线,8 点到 9 点之间居然是平的,但日志里明明有成交。我对着日志查了半个多小时,一度怀疑是 Prometheus 抓取丢了数据。
最后发现问题蠢到家了:Grafana 容器默认是 UTC 时区,我的策略吐的时间戳是北京时间,差了 8 个小时。 晚上 8 点之后的成交数据,被画到了"明天"的凌晨 4 点,所以当前时间轴上看就是空的。
解决很简单,起 Grafana 容器时加个环境变量:
docker run -d --name grafana -p 3000:3000 \
-e TZ=Asia/Shanghai \
grafana/grafana重启之后曲线立刻正常了。
所以这里给大家一个建议:凡是云服务器上跑带时间的组件,先把时区统一设成 Asia/Shanghai,能避开一堆灵异问题。 顺便说,腾讯云轻量服务器的系统时区默认一般是对的,但 Docker 容器不继承宿主机时区,这个细节要注意。
用了快一个月,说两个不满意的地方:
但这些都是锦上添花的事,不影响核心体验。
维度 | 旧方式(SSH翻日志+券商App) | 新方式(云服务器+Grafana看板) |
|---|---|---|
查一次收益 | SSH登录+grep,3-5分钟 | 手机浏览器,30秒 |
看持仓状态 | 券商App,只有结果没有上下文 | 曲线+明细,一目了然 |
策略异常感知 | 靠自己想起来去查,曾经挂2天没发现 | 指标异常自动告警 |
移动端体验 | 无(总不能手机SSH吧) | 浏览器直接看 |
成本 | 每天浪费20分钟 | 一天不到一块钱的服务器 |
一句话:看板这东西,没搭之前觉得是花架子,搭完之后觉得之前的日子不是人过的。
如果你是已经在云服务器上跑策略的老玩家,别再靠 SSH 续命了,花半天把 Grafana 搭起来,绝对值回票价。如果你是刚入门的小白,建议策略先在云服务器上跑稳,再回来抄这篇作业——监控是第二层的事,地基先打牢。
Q:量化交易监控看板用2核2G的云服务器够吗?
够用。Prometheus + Grafana 加策略程序,内存占用通常不到 1.5G。只有当你要存一年以上的高频秒级数据时,才需要考虑升配。
Q:Grafana 必须搭配 Prometheus 用吗?
不是。Grafana 支持 MySQL、InfluxDB 等几十种数据源。如果你的策略已经把成交写进了 MySQL,Grafana 可以直接查库画图,连 Prometheus 都省了。
Q:手机上看 Grafana 需要装 App 吗?
不需要,手机浏览器直接访问就能看,Grafana 页面对移动端做了适配。想要类 App 体验可以把网页"添加到主屏幕"。
Q:把监控看板暴露到公网安全吗?
裸 HTTP 暴露不安全。建议至少做三件事:改掉默认 admin 密码、用 Nginx 加 HTTPS、在腾讯云轻量服务器的防火墙里只放行必要端口。更稳妥的做法是配合 VPN 或 IP 白名单访问。
Q:策略是别人写的闭源程序,没法加指标接口怎么办?
可以用折中方案:写个小的 Python 脚本定时解析策略日志或读券商接口,把数据转发给 Prometheus。虽然实时性差一点,但看图没问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。