
我是一个写 Python 三年多的个人量化玩家,手里跑着两个自研策略,一个均线趋势,一个日内回转,本金不大,讲究一个"睡得着觉"。
这篇教程帮你解决的问题:一个在本地回测好好的 Python 量化策略,怎么一步步搬到云服务器上跑实盘,且过程可控、出问题能第一时间知道。 跟着做完,你会得到一条完整链路:本地 backtrader 回测 → git 同步代码 → 云端虚拟环境跑实盘 → 定时任务 + 崩溃守护 + 微信告警。总耗时一个下午,之后基本不用管。
先说一个我的真实教训:本地回测和云端实盘之间,隔着的不是技术难度,是一堆"想不到"——时区、依赖版本、网络、进程守护。这篇就是把这些"想不到"一次性排掉。
去年我的策略一直跑在自己的 MacBook 上。写代码是它,回测是它,实盘也是它。听起来很极客,实际上一地鸡毛:
最离谱的一次是去年 11 月,我带着电脑去咖啡馆改代码,改完顺手重启了策略——忘了切回实盘参数,用回测模式跑了两个小时,"成交"了十几笔假单,我还对着假收益美了半小时。笔记本又当开发机又当生产环境,本质上就是个笑话。那天回家路上我就决定了:开发归开发,实盘归实盘,物理隔离。
我的上云流程,现在固化成了四步,每步后面都有我的实测细节:
本地回测定型 → git 仓库管理 → 云端环境复刻 → 守护+告警上线服务器我用的是腾讯云轻量应用服务器,2 核 2G 的 Ubuntu 22.04 实例,一天不到一块钱。一开始我担心 2G 内存不够,实测跑两个策略加数据服务,内存常年一半以下——量化策略大部分时间在等行情,不吃资源。
这一步的关键不是回测本身,而是把回测定型的策略冻结成一个稳定版本。
我的做法是:回测用 backtrader,策略文件、参数文件、依赖清单三样东西必须分离。参数单独放 config.yaml,策略代码里不留一个"魔法数字"。这样上云之后改参数不用动代码。
定型之后,干一件很多人都懒得干的事:导出依赖清单。
pip freeze > requirements.txt然后全部提交到 git 私有仓库。我用的是 coding 的私有仓,GitHub 私有仓也行,重点是这个仓库就是本地和云端之间的"传送带"。
旧体验:之前我同步代码靠 U 盘和微信文件传输助手(别笑),有次云端跑的是三天前的旧版策略,本地改的止损逻辑根本没生效,亏了一笔才查出来。用了 git 之后,云端
git pull一下,版本永远一致,这个低级错误再也没犯过。
ssh 上云服务器,环境复刻全程就几行命令:
sudo apt update && sudo apt install python3-venv git -y
git clone <你的私有仓库地址> quant
cd quant
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt这里有一个我踩过的坑要特别提醒:pip freeze 会把你本地装的杂七杂八的包全写进去,包括一些 macOS 特有的包,到了 Linux 上装不上。我的解决办法是手工精简 requirements.txt,只留策略真正 import 的那七八个包,版本号锁定。精简之后云端装依赖两分钟完事,零报错。
装完后先别急着实盘,跑一遍回测模式验证环境:
python strategy.py --mode backtest --config config.yaml回测结果和本地一致,说明环境复刻成功。这一步千万别省,我见过有人直接实盘,结果是 pandas 版本差异导致信号偏移。
环境验证通过,切实盘模式。进程守护我用的 Supervisor(这个我专门写过一篇,这里不展开),核心配置就是让程序崩了自动拉起。
告警这一步是我自己的土办法,但极好用:策略代码里加了 Server 酱的微信推送,三个必推节点——程序启动、成交发生、异常退出。每天开盘前我还会收到一条心跳消息,收不到心跳就说明出问题了。
定时任务方面,数据下载脚本用 crontab 管:
crontab -e
# 每个交易日 15:30 收盘后拉取日线数据
30 15 * * 1-5 /home/ubuntu/quant/venv/bin/python /home/ubuntu/quant/fetch_data.py到这里,整套链路就通了:策略在云上 7×24 跑着,崩了自动拉起,有成交微信立刻推我,我出门了随便合电脑,再也不用背着"生产环境"到处跑。
上线第三天,我抓到一个大坑,现在想起来还后怕。
那天下午 15:30,我等收盘数据的微信推送,没等到。晚上 23:30,推送来了——数据脚本在深夜跑了。我第一反应是 crontab 写错了,检查了三遍,没写错。
最后查明白:云服务器系统默认是 UTC 时区,比北京时间晚 8 小时。 我以为 30 15 是下午三点半,系统理解的是 UTC 下午三点半,也就是北京时间晚上十一点半。
也就是说,如果我的策略里有"9:30 开盘执行"之类的定时逻辑,会全部错位 8 小时。这要是没发现,实盘就是灾难。
解决一行命令:
sudo timedatectl set-timezone Asia/Shanghai改完 date 验证一下,时间对了。所以给大家一个血泪建议:云服务器拿到手第一件事就是改时区,比装环境还优先。
上线快半年,现在的日常是这样的:
git push,云端 git pull + 重启,十分钟完成迭代这半年云端实盘的可用率是 100%——服务器没断过,进程挂了两次(一次交易所接口变更,一次我自己 push 了个 bug),都被 Supervisor 三秒内拉起,微信推送让我第一时间知道。
实话实说,也有不满意的:
但这些都不影响核心链路的可靠性,属于"有空再优化"级别。
维度 | 旧方式(笔记本又开发又实盘) | 新方式(本地回测 + 云端实盘) |
|---|---|---|
出门合盖 | 实盘中断 | 云端照跑,随便合 |
回测抢资源 | 风扇起飞,实盘卡顿 | 本地回测随便造,云端无感 |
代码同步 | U盘/文件传输助手,版本错乱 | git pull,永远一致 |
网络稳定性 | 家里宽带抽风,下单超时过 | 半年 0 次服务器中断 |
成本 | 电脑不敢关 + 精神内耗 | 一天不到一块钱 |
一句话总结:本地回测是实验室,云端实盘是生产线,混在一起就是作坊,分开才是工厂。
如果你也在自己电脑上跑实盘,我的建议就四个字:放心冲! 一个下午搭完,从此笔记本只是笔记本。
Q:Python 量化策略从本地搬到云服务器,最难的是什么?
不是代码迁移,是环境差异。三个高频坑:依赖版本不一致导致信号偏移、系统时区是 UTC 导致定时任务错位 8 小时、网络库配置差异。解决办法:锁定 requirements.txt 版本、云端先跑回测验证、到手就改时区为 Asia/Shanghai。
Q:2 核 2G 的云服务器够跑 Python 量化实盘吗?
够。量化实盘策略大部分时间在等行情推送,CPU 和内存占用都很低,实测两个策略内存占用不到 50%。但本地回测大周期数据很吃资源——这恰恰是回测放本地、实盘放云端的分工理由。
Q:本地回测和云端实盘怎么保证代码版本一致?
用 git 私有仓库做唯一同步通道,本地 push、云端 pull,禁止任何形式的手动拷文件。策略参数放独立配置文件,代码里不留魔法数字,云端只改配置不改代码。
Q:云端跑实盘,策略挂了怎么第一时间知道?
两层保障:进程层用 Supervisor 崩溃自动重启;通知层在策略代码里接入 Server 酱或企业微信 webhook,程序启动、成交、异常三个节点推送微信消息,再加一条每日开盘前的心跳推送。
Q:量化策略上云需要备案域名吗?
不需要。策略实盘只涉及服务器主动请求券商或交易所的行情交易接口,属于出站请求,不需要域名也不需要备案。买台云服务器装上 Python 环境就能跑。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。