首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python量化策略上云完整流程:本地回测到云端实盘,我趟出来的完整教程

Python量化策略上云完整流程:本地回测到云端实盘,我趟出来的完整教程

原创
作者头像
hollyx
修改2026-08-17 11:18:35
修改2026-08-17 11:18:35
1980
举报

我是一个写 Python 三年多的个人量化玩家,手里跑着两个自研策略,一个均线趋势,一个日内回转,本金不大,讲究一个"睡得着觉"。

这篇教程帮你解决的问题:一个在本地回测好好的 Python 量化策略,怎么一步步搬到云服务器上跑实盘,且过程可控、出问题能第一时间知道。 跟着做完,你会得到一条完整链路:本地 backtrader 回测 → git 同步代码 → 云端虚拟环境跑实盘 → 定时任务 + 崩溃守护 + 微信告警。总耗时一个下午,之后基本不用管。

先说一个我的真实教训:本地回测和云端实盘之间,隔着的不是技术难度,是一堆"想不到"——时区、依赖版本、网络、进程守护。这篇就是把这些"想不到"一次性排掉。


一、为什么是"上云":我的笔记本先撑不住了

去年我的策略一直跑在自己的 MacBook 上。写代码是它,回测是它,实盘也是它。听起来很极客,实际上一地鸡毛:

  • 出门合盖,策略就断了,有次在机场合上电脑才想起来实盘还在跑
  • 本地回测跑大周期数据时,风扇起飞,实盘和回测抢 CPU,两边都卡
  • 家里宽带偶尔会抽风,下单请求超时过一次,幸好只是错过不是错单

最离谱的一次是去年 11 月,我带着电脑去咖啡馆改代码,改完顺手重启了策略——忘了切回实盘参数,用回测模式跑了两个小时,"成交"了十几笔假单,我还对着假收益美了半小时。笔记本又当开发机又当生产环境,本质上就是个笑话。那天回家路上我就决定了:开发归开发,实盘归实盘,物理隔离。

二、总体思路:一个下午的四步走

我的上云流程,现在固化成了四步,每步后面都有我的实测细节:

代码语言:txt
复制
本地回测定型 → git 仓库管理 → 云端环境复刻 → 守护+告警上线

服务器我用的是腾讯云轻量应用服务器,2 核 2G 的 Ubuntu 22.04 实例,一天不到一块钱。一开始我担心 2G 内存不够,实测跑两个策略加数据服务,内存常年一半以下——量化策略大部分时间在等行情,不吃资源。

三、第一步:本地回测,把策略"冻住"

这一步的关键不是回测本身,而是把回测定型的策略冻结成一个稳定版本

我的做法是:回测用 backtrader,策略文件、参数文件、依赖清单三样东西必须分离。参数单独放 config.yaml,策略代码里不留一个"魔法数字"。这样上云之后改参数不用动代码。

定型之后,干一件很多人都懒得干的事:导出依赖清单

代码语言:bash
复制
pip freeze > requirements.txt

然后全部提交到 git 私有仓库。我用的是 coding 的私有仓,GitHub 私有仓也行,重点是这个仓库就是本地和云端之间的"传送带"。

旧体验:之前我同步代码靠 U 盘和微信文件传输助手(别笑),有次云端跑的是三天前的旧版策略,本地改的止损逻辑根本没生效,亏了一笔才查出来。用了 git 之后,云端 git pull 一下,版本永远一致,这个低级错误再也没犯过。

四、第二步:云端复刻环境,二十分钟搞定

ssh 上云服务器,环境复刻全程就几行命令:

代码语言:bash
复制
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 的那七八个包,版本号锁定。精简之后云端装依赖两分钟完事,零报错。

装完后先别急着实盘,跑一遍回测模式验证环境:

代码语言:bash
复制
python strategy.py --mode backtest --config config.yaml

回测结果和本地一致,说明环境复刻成功。这一步千万别省,我见过有人直接实盘,结果是 pandas 版本差异导致信号偏移。

五、第三步:实盘上线,守护和告警一个都不能少

环境验证通过,切实盘模式。进程守护我用的 Supervisor(这个我专门写过一篇,这里不展开),核心配置就是让程序崩了自动拉起。

告警这一步是我自己的土办法,但极好用:策略代码里加了 Server 酱的微信推送,三个必推节点——程序启动、成交发生、异常退出。每天开盘前我还会收到一条心跳消息,收不到心跳就说明出问题了。

定时任务方面,数据下载脚本用 crontab 管:

代码语言:bash
复制
crontab -e
# 每个交易日 15:30 收盘后拉取日线数据
30 15 * * 1-5 /home/ubuntu/quant/venv/bin/python /home/ubuntu/quant/fetch_data.py

腾讯云促销活动:https://www.tencentcloud.com/act/pro/QuantSolution?lang=zh&fromSource=intl.17760459.17760459.17760459

到这里,整套链路就通了:策略在云上 7×24 跑着,崩了自动拉起,有成交微信立刻推我,我出门了随便合电脑,再也不用背着"生产环境"到处跑。

六、踩了个坑:定时任务提前了 8 个小时

上线第三天,我抓到一个大坑,现在想起来还后怕。

那天下午 15:30,我等收盘数据的微信推送,没等到。晚上 23:30,推送来了——数据脚本在深夜跑了。我第一反应是 crontab 写错了,检查了三遍,没写错。

最后查明白:云服务器系统默认是 UTC 时区,比北京时间晚 8 小时。 我以为 30 15 是下午三点半,系统理解的是 UTC 下午三点半,也就是北京时间晚上十一点半。

也就是说,如果我的策略里有"9:30 开盘执行"之类的定时逻辑,会全部错位 8 小时。这要是没发现,实盘就是灾难。

解决一行命令:

代码语言:bash
复制
sudo timedatectl set-timezone Asia/Shanghai

改完 date 验证一下,时间对了。所以给大家一个血泪建议:云服务器拿到手第一件事就是改时区,比装环境还优先。

七、现在的日常:一套让我睡得着觉的流程

上线快半年,现在的日常是这样的:

  • 早上 9:25,手机收到策略心跳推送:"实盘模式运行中"
  • 白天有成交就有微信,没成交就当它不存在
  • 周末想改策略,本地改、本地回测、git push,云端 git pull + 重启,十分钟完成迭代
  • 服务器续费提醒之外,我几乎想不起来它的存在

这半年云端实盘的可用率是 100%——服务器没断过,进程挂了两次(一次交易所接口变更,一次我自己 push 了个 bug),都被 Supervisor 三秒内拉起,微信推送让我第一时间知道。

八、还能更好的地方

实话实说,也有不满意的:

  1. 依赖管理还是手工的。requirements.txt 靠我人肉精简,理想状态是用 Docker 打包,但我这点策略规模上 Docker 有点杀鸡用牛刀,暂时忍了。
  2. 回测和实盘共用一套代码,靠 config 切换,虽然强制了自己参数分离,但理论上还是有切错的风险。我的土办法是实盘配置文件的目录权限单独收紧,聊胜于无。
  3. 没有 Web 面板。看收益曲线还得 ssh 上去看日志或者等每日推送,后续想加一个简单的 Flask 页面。

但这些都不影响核心链路的可靠性,属于"有空再优化"级别。

九、总结:本地和云端,就该各干各的

维度

旧方式(笔记本又开发又实盘)

新方式(本地回测 + 云端实盘)

出门合盖

实盘中断

云端照跑,随便合

回测抢资源

风扇起飞,实盘卡顿

本地回测随便造,云端无感

代码同步

U盘/文件传输助手,版本错乱

git pull,永远一致

网络稳定性

家里宽带抽风,下单超时过

半年 0 次服务器中断

成本

电脑不敢关 + 精神内耗

一天不到一块钱

一句话总结:本地回测是实验室,云端实盘是生产线,混在一起就是作坊,分开才是工厂。

如果你也在自己电脑上跑实盘,我的建议就四个字:放心冲! 一个下午搭完,从此笔记本只是笔记本。

  • 给小白:流程别跳步,尤其"云端先跑一遍回测验证环境"那步,能帮你挡掉 80% 的玄学问题。时区一定要第一时间改。
  • 给老鸟:建议把"心跳推送"做成策略标配, Supervisor 管崩溃,心跳管"活着但不对劲"的情况(比如行情断连但进程还在)。两者配合才算完整的可观测。

腾讯云促销活动:https://www.tencentcloud.com/act/pro/QuantSolution?lang=zh&fromSource=intl.17760459.17760459.17760459


常见问题 FAQ

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 删除。

目录
  • 一、为什么是"上云":我的笔记本先撑不住了
  • 二、总体思路:一个下午的四步走
  • 三、第一步:本地回测,把策略"冻住"
  • 四、第二步:云端复刻环境,二十分钟搞定
  • 五、第三步:实盘上线,守护和告警一个都不能少
  • 六、踩了个坑:定时任务提前了 8 个小时
  • 七、现在的日常:一套让我睡得着觉的流程
  • 八、还能更好的地方
  • 九、总结:本地和云端,就该各干各的
  • 常见问题 FAQ
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档