
这篇教程帮你在腾讯云轻量应用服务器上从零部署 vn.py 量化交易框架并连上实盘行情。跟着做,你会得到一台 7×24 小时运行的云服务器,vn.py 稳定接收 CTP 行情、跑你的策略,全程实测 1 小时跑通,含踩坑和解决方案。
先说背景:我用 vn.py 做 CTA 策略快两年了,之前一直跑在书房的 Windows 台式机上。
上上个月,家里跳了一次闸。
那天正好夜盘,持仓中。等我赶回家重启电脑、重开行情、重新连 CTP,四十分钟过去了。行情走了一大段,策略的信号全乱了。那天晚上我盯着屏幕想了很久:vn.py 这玩意儿,就不该跑在会跳闸、会断电、会被家里人碰的地方。
群里问过一圈,跑 vn.py 实盘的老哥几乎人手一台云服务器。我之前一直拖着没搞,理由很朴素:嫌麻烦,总觉得"又要折腾环境"。
这次断电算是最后一根稻草。周六早上 9 点,我泡了杯咖啡坐下,跟自己说:今天必须搞定。
结果——10 点 05 分,行情 tick 在云服务器上刷刷地滚。 中间还踩了一个坑。全程记录如下。
先说结论:vn.py 实盘,2 核 4G 是底线。
我知道网上有人说 2 核 2G 也能跑,但我自己实测过:vn.py 加上图形界面(哪怕你不用,很多组件也会初始化)、行情接收、策略计算、SQLite 数据库写入,内存轻松吃到 1.5G 以上。2G 的机器稍微多订阅几个合约就开始紧张。
我在腾讯云轻量应用服务器上选的 2 核 4G,Ubuntu 22.04,一天不到一块钱。下单后两分钟拿到 IP 和密码。
对比一下我的旧方案:书房那台台式机,功耗 200W 起步,24 小时开着,光电费一个月就三四十块,还不算跳闸断电、Windows 自动更新重启这些幺蛾子。云服务器一个月的成本比电费还低,稳定性和延迟更是吊打家庭宽带——vn.py 连 CTP 的行情延迟从家里的 30-50ms 降到了个位数毫秒。
系统选择这里多说一句:实盘别用 Windows 镜像。Windows Server 吃内存不说,vn.py 在 Linux 下跑无头(headless)模式才是正解——不开图形界面,纯脚本驱动,资源占用低、稳定性高,适合 7×24 小时挂着。
SSH 连上服务器,开始装环境。9 点 10 分。
sudo apt update && sudo apt install -y python3-pip python3-venv
python3 -m venv ~/vnpy-env
source ~/vnpy-env/bin/activate然后直接 pip 装 vn.py 全家桶:
pip install vnpy vnpy_ctp vnpy_ctastrategy说实话,装之前我做好了编译报错的心理准备——vn.py 早年间的安装体验是有名的劝退,ta-lib、boost、各种 C++ 依赖,Windows 上我当年折腾了一个下午。
结果这次在 Ubuntu 22.04 上,pip 一条命令,全程没有报一个错。官方现在的 wheel 包做得相当成熟,底层依赖都打包好了。9 点 20 分,环境装完。
那种感觉很奇妙:记忆里"装 vn.py = 半天没了"的肌肉记忆还在,手都准备好应对报错了,结果它哗啦啦装完了。就像你约了个以迟到出名的朋友,结果他提前到了。
验证一下安装:
python -c "import vnpy; print(vnpy.__version__)"正常输出版本号,妥了。
在服务器上跑 vn.py,千万别想着装图形界面那一套(VNC 远程桌面什么的,又慢又占资源)。正确姿势是写个 Python 启动脚本,用 vn.py 的无头模式直接拉起 CTA 引擎。
我的 run_cta.py 长这样(脱敏版):
from time import sleep
from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import QtWidgets, create_qapp
from vnpy_ctp import CtpGateway
from vnpy_ctastrategy import CtaStrategyApp, CtaEngine
def main():
event_engine = EventEngine()
main_engine = MainEngine(event_engine)
main_engine.add_gateway(CtpGateway)
cta_engine = main_engine.add_app(CtaStrategyApp)
# 连接CTP(账户信息脱敏,换成你自己的)
ctp_setting = {
"用户名": "你的资金账号",
"密码": "你的密码",
"经纪商代码": "9999",
"交易服务器": "180.168.146.187:10201",
"行情服务器": "180.168.146.187:10211",
"产品名称": "simnow_client_test",
"授权编码": "0000000000000000",
}
main_engine.connect(ctp_setting, "CTP")
sleep(10) # 等连接和合约查询完成
cta_engine.init_engine()
cta_engine.init_all_strategies() # 自动初始化并启动策略
# 保持运行
while True:
sleep(1)
if __name__ == "__main__":
main()先别急着实盘——我用的是 SimNow 仿真环境做的验证(就是上面配置里的 simnow),强烈推荐所有人先走这一步:流程完全一样,但错单不心疼。
9 点 40 分,第一次跑:
python run_cta.py日志滚动,CTP 行情服务器连接成功,合约查询返回,tick 数据进来了。
那一刻真的有点小激动。 这台在云端的机器,正在接收实时行情。
平稳运行了十分钟,我发现不对劲:行情在收,但策略一条日志都没有,像不存在一样。
查了一圈,终于定位到问题——这是个特别典型的坑,必须写清楚:
vn.py 的 CTA 策略需要在 .vntrader/cta_strategy_setting.json 里有配置才会被 init_all_strategies() 加载。我在服务器上是全新部署,.vntrader 目录根本不存在,配置是空的,所以策略压根没被加载。
解决办法:把本地电脑上 .vntrader 目录里的两个配置文件传上来:
# 在本地电脑执行,把配置传到服务器
scp -r ~/.vntrader/cta_strategy_setting.json ubuntu@服务器IP:/home/ubuntu/.vntrader/
scp -r ~/.vntrader/cta_strategy_data.json ubuntu@服务器IP:/home/ubuntu/.vntrader/注意 .vntrader 默认在用户主目录下,Linux 里是 ~/.vntrader/。
传完重启脚本,日志里终于出现了熟悉的 [CtaEngine] 策略 xxx 初始化完成。
10 点 05 分,全部跑通。 从下单买服务器到策略在云服务器上正常运行,1 小时 05 分,包括踩坑排查的时间。
所以给大家的提醒:从本地迁移 vn.py 到云服务器,代码要传,.vntrader 配置目录也要传,不然策略就是个摆设。
跑通之后还有最后一步——现在进程是挂在我的 SSH 会话上的,我一断开它就没了。实盘必须配守护。
老规矩,systemd:
sudo vim /etc/systemd/system/vnpy-cta.service[Unit]
Description=vn.py CTA Strategy
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/vnpy-live
ExecStart=/home/ubuntu/vnpy-env/bin/python run_cta.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now vnpy-cta从此:程序崩了 10 秒后自动拉起,服务器重启自动恢复,SSH 断开它照跑。配合上一篇里讲的断线重连看门狗(我后来在策略层也加了行情心跳),这台云服务器上的 vn.py 就是个全自动的赚钱机器——好吧,能不能赚钱看策略,但至少机器本身不会再掉链子了。
切到实盘到现在两周了,说几个真实感受:
维度 | 家里台式机跑 vn.py | 腾讯云轻量服务器跑 vn.py |
|---|---|---|
断电/跳闸 | 全盘停摆,持仓裸奔 | 不存在这个问题 |
半夜崩溃 | 等我发现 | 10 秒自动拉起 |
行情延迟 | 30-50ms 波动 | 个位数毫秒稳定 |
Windows 更新重启 | 半夜偷袭 | Linux 没这毛病 |
月成本 | 电费三四十+操心 | 一天不到一块钱 |
部署耗时 | —— | 实测 1 小时跑通 |
回头看那天跳闸,反而是个好事——它逼我做了这个早该做的决定。
给不同的朋友:
.vntrader 配置目录要一起迁移,以及实盘前先跑 SimNow 仿真,能帮你避开 90% 的懵圈时刻。放心冲,这可能是你量化生涯里性价比最高的 1 小时。
Q:云服务器跑 vn.py 需要什么配置?
实盘建议 2 核 4G 起步。vn.py 加 CTP 行情加策略引擎,内存轻松吃 1.5G 以上,2G 的机器会很紧张。实测 4G 内存跑 4 个合约的 CTA 策略,内存稳定在 1.8G 左右。
Q:vn.py 在云服务器上没有图形界面怎么用?
用无头(headless)模式:写一个 Python 脚本直接创建 MainEngine、连接 CTP、启动 CTA 引擎,不需要任何图形界面。服务器的正确用法就是纯脚本驱动 + systemd 守护,7×24 小时挂着。
Q:vn.py 从本地迁移到云服务器,为什么策略不启动?
90% 是忘了迁移 .vntrader 配置目录。CTA 策略的参数配置存在 ~/.vntrader/cta_strategy_setting.json 里,新服务器上这个文件不存在,策略就不会被加载。用 scp 把本地的 .vntrader 目录传上去再重启即可。
Q:云服务器上的 vn.py 断线了会自动重连吗?
分两层:进程崩溃由 systemd 的 Restart=always 自动拉起;行情连接断开但进程没死的情况,vn.py 的 CTP 网关本身有断线重连机制,但建议再加一层行情心跳看门狗做兜底,重连逻辑要带退避。
Q:直接上实盘还是先仿真?
强烈建议先用 SimNow 仿真环境跑至少一周。连接流程、配置项、策略加载和实盘完全一样,但错单不产生真实亏损。注意 SimNow 周末经常维护连不上,别误以为是部署问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。