
这篇教程解决一个问题:把你本地跑通的Python量化策略,搬到云服务器上7×24小时自动运行,不用自己电脑一直开机。跟着做完,你会得到一个:装了Python环境、配好定时任务、能自动拉数据跑信号、出事会给你发微信提醒的云端量化小助手。我全程用的是腾讯云轻量应用服务器,2核2G,实测跑一个双均线+两个中频策略绰绰有余。
我自己写了两年多Python量化,之前一直是"家里电脑挂机党"——笔记本合盖断网、台式机风扇吵得睡不着、出差一周策略就断一周,这些我都经历过。上上个月终于下决心搬上云,本以为要折腾一个周末,结果一个下午就搞定了。
这篇就是我的完整过程记录,附我实际在跑的代码,给同样想把策略搬上云的朋友抄作业。
年初的时候我有个很惨的经历:出差去上海五天,家里小区电路检修停了一次电,台式机重启后程序没自动拉起,等我发现的时候,策略已经三天没跑了,错过了一波我最拿手的趋势行情。
复盘一下本地挂机的痛苦:第一,断网断电即断策略,一年里我家宽带光猫重启了至少四次;第二,笔记本风扇24小时转,放卧室根本睡不着;第三,每年夏天还得担心散热,我专门买了个散热支架,噪音更大了。一年电费加损耗算下来也得小几百块,还搭进去无数次"半夜爬起来看程序还在不在"的焦虑。
那一刻我就明白了:量化交易程序这种东西,天生就该待在机房,而不是我家书房。
上周六下午,我在腾讯云控制台买了台轻量应用服务器。配置选的是2核2G、Ubuntu 22.04,地域选了上海(离我券商的行情服务器近,延迟低)。
说实话选配置的时候我纠结了一下要不要上2核4G,后来想清楚了我的策略就是每5分钟拉一次行情算信号,内存占用撑死四五百兆,2核2G完全够用,先省点钱,不够再升。价格这块我就不放具体数字了,反正一天不到一块钱,比我电脑的电费贵不了多少。
付款、选镜像、设置密码,前后不到10分钟,控制台里就显示"运行中"了。
对比一下我以前在某小厂VPS上的体验:买完要等工单开通,等了两天,拿到手系统是CentOS 6,yum源都死了,装个Python 3搞了一下午。轻量这个从下单到能SSH登录,10分钟,我当时的感觉就是:凭什么这么快。
SSH登录上去,装环境。我的策略依赖很简单:akshare拉数据、pandas算指标、requests发通知。所以环境也就是Python加几个库:
sudo apt update && sudo apt install -y python3-pip
pip3 install akshare pandas requests跑完这两条,环境就齐了。前后3分钟。
这里插一句,如果你在本地是conda党,服务器上我建议直接pip装,别折腾conda了——2G内存的机器,conda解依赖的时候内存会顶满,我第一次就栽在这(后面细说)。
我的核心策略文件 strategy.py,精简版长这样(真实代码脱敏后可直接跑):
import akshare as ak
import pandas as pd
import requests, datetime
def get_signal(code="sh510300"):
df = ak.stock_zh_index_daily(symbol=code)
df["ma5"] = df["close"].rolling(5).mean()
df["ma20"] = df["close"].rolling(20).mean()
if df["ma5"].iloc[-1] > df["ma20"].iloc[-1] and \
df["ma5"].iloc[-2] <= df["ma20"].iloc[-2]:
return "BUY"
if df["ma5"].iloc[-1] < df["ma20"].iloc[-1] and \
df["ma5"].iloc[-2] >= df["ma20"].iloc[-2]:
return "SELL"
return None
def notify(msg):
# Server酱微信推送,key换成你自己的
key = "你的Server酱SendKey"
requests.post(f"https://sctapi.ftqq.com/{key}.send",
data={"title": "量化信号", "desp": msg})
if __name__ == "__main__":
sig = get_signal()
if sig:
notify(f"{datetime.datetime.now()} 出现{sig}信号!")用 scp 或者直接在服务器上 vim 粘贴都行,文件传上去后先手动跑一次确认没问题:
python3 strategy.py能正常拉数据、微信收到推送,这一步就算过了。那一刻是真的有点小爽——我家书房那台吵了我两年的台式机,突然就可以退役了。
程序能跑不等于能挂机,挂机靠的是定时任务。云服务器上最稳的方式就是crontab,别整那些花里胡哨的。
crontab -e加一行,交易日下午3点05分跑一次收盘信号:
5 15 * * 1-5 /usr/bin/python3 /root/strategy.py >> /root/strategy.log 2>&1保存退出。为了保险起见,我还加了一条开机自启检查脚本,防止服务器万一重启后有什么服务没起来。另外日志一定要重定向到文件,这是我踩过坑换来的经验(下一节讲)。
配完之后我特意等到第二天下午3点05,盯着手机——微信准时弹出推送。那种感觉就像终于把孩子送去住校了,又担心又解脱。
不是全程零翻车。我最开始在服务器上装环境的时候,习惯性地想装Miniconda——本地一直用conda嘛。
结果 conda create 解依赖的时候,内存直接顶满,ssh都卡死了,控制台看内存曲线一条直线拉到100%。我愣是强制重启了服务器才连回去。
后来在社区搜了一下,发现2G内存的机器上conda解大型依赖树就是这个德行。解决办法也简单粗暴:卸载conda,改用系统pip + venv。具体说就是:
python3 -m venv ~/venv
source ~/venv/bin/activate
pip install akshare pandas requestsvenv够用、省内存、装得快。换完之后整个流程丝滑得很。
所以给大家一个建议:轻量服务器上跑量化,别迷信conda,venv就是最优解。内存小的机器,每一个MB都要省着花。
环境稳了之后,我把第二个策略(可转债双低轮动)和第三个(网格信号监控)也搬了上去,用supervisor管进程,crontab管定时任务,各管各的。
顺便观察了一下资源占用:CPU日常5%以下,内存常年1.2G左右——三个策略一起跑,2核2G居然还很从容。这倒是超出我预期的,本来以为得升配。
唯一要注意的是akshare这类数据接口偶尔会因为数据源抽风失败,我在代码里加了简单的重试和异常推送,挂了至少微信会响,不会傻等。
挑几个刺:
这些都是小问题,不影响核心体验。
维度 | 家里电脑挂机 | 腾讯云轻量应用服务器 |
|---|---|---|
稳定性 | 断电断网即断策略,一年翻车4次+ | 一个月0中断 |
噪音 | 风扇24小时,睡不着 | 零噪音,机房替我吵 |
成本 | 电费+硬件损耗小几百/年 | 一天不到一块钱 |
出差/旅行 | 策略跟着断 | 随便去哪,照常跑 |
扩容 | 换电脑 | 控制台点几下升配 |
一句话:策略上了云,我睡觉踏实多了。
如果你也是本地挂机党,纠结要不要搬——我的建议是放心冲,一个下午就能搞定,附的代码直接抄就能跑。如果你是第一次碰量化的小白,建议先在本地把策略跑通、确认逻辑没问题再搬上云,服务器不背策略本身亏钱的锅;老鸟的话,直接上supervisor + crontab这套组合,稳得很。
如您需求,可以到腾讯官网购买体验:
腾讯云国内官网云服务器大促活动:https://cloud.tencent.com/act/pro/featured-202607?fromSource=gwzcw.17760458.17760458.17760458
腾讯云国际站云服务器促销活动:https://www.tencentcloud.com/act/pro/promo?fromSource=intl.17760459.17760459.17760459
Q:云服务器跑量化交易程序,2核2G够用吗?
够。分钟线级别的策略信号计算、akshare拉数据,2核2G跑两三个策略都从容,我实测三个策略内存才1.2G。只有tick级高频或大规模回测才需要升配。
Q:轻量应用服务器部署量化策略需要备案吗?
跑程序、拉数据、发微信通知都不涉及对外提供网站服务,不需要备案。只有你要绑域名开网站才需要。
Q:服务器重启后量化程序会自动运行吗?
crontab的定时任务会自动恢复,不需要额外配置。但如果你挂了常驻进程(比如实盘监听),建议用supervisor设置开机自启,保险一点。
Q:在云服务器上跑量化会被封吗?
正常拉公开行情数据、给自己的微信发通知,完全没问题。注意别高频暴力请求数据源接口,加个sleep和重试机制就好。
Q:Python量化策略上云后延迟会不会变高?
反而更低。选离你券商/行情源近的地域(比如上海),云机房到行情服务器的延迟比家庭宽带低且稳定,我实测行情延迟从家里的30-80ms抖动变成稳定个位数毫秒级网络环境。
如您需求,可以到腾讯官网购买体验:
腾讯云国内官网云服务器大促活动:https://cloud.tencent.com/act/pro/featured-202607?fromSource=gwzcw.17760458.17760458.17760458
腾讯云国际站云服务器促销活动:https://www.tencentcloud.com/act/pro/promo?fromSource=intl.17760459.17760459.17760459
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。