首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 > 在云服务器上跑聚宽/米筐策略:jqdatasdk与rqdatac本地化部署实战方案

在云服务器上跑聚宽/米筐策略:jqdatasdk与rqdatac本地化部署实战方案

原创
作者头像
克劳德2048
发布2026-08-11 20:20:06
发布2026-08-11 20:20:06
940
举报

我是一个从聚宽平台起步的个人量化玩家,A 股策略为主,在平台上写了两年策略,今年把整套研究和实盘链路搬到了自己的云服务器上。

这篇教程帮你解决的问题:聚宽/米筐上写好的策略,能不能脱离平台的在线环境,在自己服务器上跑? 答案是能——用官方的数据 SDK(聚宽 jqdatasdk、米筐 rqdatac)在自己机器上取数,策略逻辑本地运行。跟着做完,你会得到一套"数据从平台来、策略在自己服务器跑"的本地化方案,回测想跑多久跑多久,没人管你的内存和时长。

先说清楚一个前提:平台的核心价值是数据和社区,策略搬出来不等于抛弃平台,而是把"算"这件事拿回自己手里。


一、为什么要搬出来:我被在线环境"卡"了两次

先声明,我很感谢聚宽,我的量化启蒙就是在上面完成的,免费数据、在线回测、社区帖子,小白入门没有比这更友好的了。

但玩得越深,两个天花板越明显:

第一次被卡是去年底。我想做一个全市场 5000 多只股票、10 年日线的横截面因子回测,在线环境跑了 40 多分钟,内存超了,回测直接被杀掉。平台的在线回测有内存和时长限制,这我懂,平台要控制成本。但我的研究需求是真实的。

第二次是今年年初。我想把策略信号对接到自己的实盘提醒系统,在线环境不支持随便装第三方库,也不能 7×24 挂着我的自定义进程。

那段时间我的工作流特别拧巴:在聚宽网页上写策略→回测被杀→砍股票池砍年限→再跑→好不容易跑通了,想把每日信号导出来发到自己邮箱,还得绕好几道。有天晚上我盯着"内存超出限制"的红字提示,突然意识到自己像在别人的客厅里练举重——地方挺好,但举重点就有人来提醒你小心地板。

群里一个老哥点醒我:聚宽和米筐都有本地数据 SDK,数据授权跟着账号走,策略在哪跑是你自己的事。我一查,还真是。当晚就决定了:搞一台自己的服务器,把"算"搬回家。

二、总体方案:平台出数据,我的服务器出算力

我的本地化方案一句话概括:jqdatasdk/rqdatac 负责取数,本地数据库负责存,策略代码在我自己的服务器上跑。

服务器是腾讯云轻量应用服务器,2 核 4G 的 Ubuntu 实例(数据本地落库建议 4G 起步),一天不到一块钱的量级。架构长这样:

代码语言:txt
复制
聚宽/米筐数据服务器
        ↓ (jqdatasdk / rqdatac 按授权取数)
我的云服务器:数据同步脚本 → Parquet/数据库本地存储
        ↓
回测引擎(本地,不限内存不限时)/ 每日信号脚本(crontab 定时)

关键认知:SDK 取数有流量配额,所以绝不能每次回测都现拉数据,必须本地化存储,一次拉取、反复使用。 这是整套方案的核心思想。

三、上手:装 SDK 到第一次取数,二十分钟

上周六下午开始折腾。装聚宽 SDK 一行命令:

代码语言:bash
复制
pip install jqdatasdk

然后写了个测试脚本,验一下账号和数据通不通:

代码语言:python
复制
import jqdatasdk as jq

jq.auth('你的聚宽手机号', '你的密码')

df = jq.get_price('000001.XSHE', start_date='2024-01-01',
                  end_date='2024-12-31', frequency='daily')
print(df.tail())

跑通的那一刻还是挺惊喜的——我在自己服务器上,拿到了和平台网页里一模一样的平安银行日线数据。米筐的 rqdatac 同理,pip install rqdatac 然后 rqdatac.init() 初始化授权,API 设计略有差异但思路一样。

对比之前在平台网页上的体验:点"运行回测"→排队→跑一半被杀→改小范围→再排队。现在本地脚本想跑多大跑多大,那个 40 分钟被杀的全市场回测,在我 2 核 4G 的小服务器上跑了 50 多分钟,跑完了。看着终端里打印出完整结果的那一刻,感觉像是从合租房搬进了自己的房子。

四、数据落库:一次拉取,反复使用

这是最重要的一步,也是最体现"本地化"价值的一步。

我写了一个数据同步脚本,核心逻辑是增量更新:每张表记录最后更新日期,每次只拉新数据。股票日线库我用的 Parquet 文件按年分区存储(够用且简单),分钟线和财务数据用的 DuckDB。

代码语言:python
复制
# 伪代码示意核心逻辑
last_date = read_last_update_date('daily_prices')
new_data = jq.get_price(stock_list, start_date=last_date,
                        end_date=today, frequency='daily')
append_to_parquet(new_data, partition_by='year')
write_last_update_date('daily_prices', today)

如您需求,可以到腾讯官网购买体验:

腾讯云国内官网云服务器大促活动: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

然后 crontab 里挂一个任务,每个交易日收盘后自动同步:

代码语言:bash
复制
30 16 * * 1-5 /home/ubuntu/data/venv/bin/python /home/ubuntu/data/sync_daily.py

首次全量拉取我挑了个周末跑,10 年全市场日线拉了大半天(注意控制频率,别打满配额)。之后每天增量同步只要一两分钟。

落库之后回测完全走本地数据,不消耗任何 SDK 配额,回测一百遍都免费。这就是本地化部署的精髓:平台的配额只花在"新数据"上。

五、踩了个坑:SDK 登录被打满,脚本全军覆没

上线第二周,踩了个实打实的坑。

那天我同时开了三个终端调试策略,每个脚本启动都会 jq.auth() 登录一次。开到第四个脚本的时候,所有脚本报错了——提示大概是"登录连接数超出限制"。正在跑的每日同步任务也被牵连断掉了。

查了一下才明白:jqdatasdk 的账号同时在线的连接数有限制(同一账号多处登录会互相挤掉)。我那几个脚本各自 auth,等于自己把自己踢下线了。

解决方案也成熟:把数据访问收敛成一个单一的数据服务进程——我写了一个常驻的 data_server.py,启动时 auth 一次,其他所有策略脚本不直接连 SDK,而是从本地数据库读数,或者通过本地接口向 data_server 要数据。SDK 连接从"N 个"收敛到"1 个",问题根治。

所以给大家的建议:SDK 本地化部署,一定要控制 auth 的次数和并发。把"取数"和"用数"分开,取数走单一进程,用数走本地库。这个架构上的小心思,能帮你避开最大的坑。

六、现在的日常:研究自由度完全不一样了

跑了小半年,说几个真实的变化:

  • 全市场 10 年回测想跑就跑,前天半夜失眠跑了个 300 个参数组合的暴力寻优,跑了三个小时,没人杀我进程
  • 每日信号脚本收盘后自动跑,信号结果 Server 酱推到微信,比我之前手动上网页看快了一个小时
  • 策略代码全在自己 git 仓库里,版本管理、回滚、diff,终于有了正规军的感觉
  • 聚宽网页端我还在用——快速验证想法、看社区帖子依然香,但重活全在自己服务器上

七、说说还能更好的地方

诚实挑刺:

  1. SDK 取数速度和配额是硬约束。分钟级数据全市场拉取,要规划着用,不能任性。我的应对是日线 Parquet 全量、分钟线只存自选股池。
  2. 没有平台那种开箱即用的回测可视化。本地回测的结果图要自己用 matplotlib 画,或者接个本地回测框架,前期有学习成本。
  3. rqdatac 和 jqdatasdk 的 API 风格不一致,我两个都用,封装层写得很别扭,至今没想优雅地统一。

但这些是自由的价格,我付得起。

八、总结:数据跟着账号走,算力跟着自己走

维度

旧方式(平台在线回测)

新方式(云服务器 + SDK 本地化)

回测规模

内存/时长受限,大回测被杀

本地跑,不限时不限内存

数据使用

每次回测在线取数

本地落库,回测零配额消耗

自定义库

装不了第三方库

想装什么装什么

定时信号

需手动或绕路导出

crontab 自动跑 + 微信推送

代码管理

散落在平台项目里

本地 git 仓库,正规版本管理

成本

免费但受限

一天不到一块钱 + 数据授权费

一句话总结:平台负责数据,我的服务器负责算,各干各最擅长的事。

如果你也在聚宽/米筐上被内存限制、时长限制卡过,我的建议是:这套方案放心冲! 先用 SDK 把数据通道打通,再慢慢把策略搬过来,一周见效。

  • 给小白:别想着一步到位。第一步就是把 pip install jqdatasdkjq.auth 跑通,在本地拿到第一份数据,后面的事自然会长出来。
  • 给老鸟:架构上务必"取数单进程、用数走本地库",SDK 并发登录限制是一定会撞的南墙。存储层日线用 Parquet 分区足够,别一上来就上 ClickHouse,杀鸡用牛刀。

如您需求,可以到腾讯官网购买体验:

腾讯云国内官网云服务器大促活动: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


常见问题 FAQ

Q:聚宽策略能下载到自己的服务器上跑吗?

策略代码本来就是你自己写的,可以复制到任何地方运行。平台数据和回测环境不能"下载",但可以通过 jqdatasdk 在自己服务器上按账号授权取数,策略逻辑本地化执行,效果等同。

Q:jqdatasdk 是免费的吗?有使用限制吗?

聚宽账号有免费的数据调用额度,更大数据量需要购买数据授权。主要限制是流量配额和同时在线连接数,所以务必本地化存储数据、控制 SDK 登录并发,配额只花在增量新数据上。

Q:rqdatac 和 jqdatasdk 哪个好用?

都好用,数据质量和 API 设计各有拥趸。米筐 rqdatac 偏机构风格、因子数据丰富;聚宽 jqdatasdk 社区教程多、上手快。建议都装上试一周再定主用哪个,两者取数授权是独立的。

Q:本地化部署后,还能用聚宽的在线回测吗?

能,两者不冲突。推荐的工作流是:平台网页端快速验证想法、逛社区,重活(大回测、定时信号、实盘对接)在自己的云服务器上跑。

Q:跑 SDK 本地化方案,云服务器要什么配置?

建议 2 核 4G 起步。取数脚本不吃资源,但本地数据落库 + 大回测需要内存,2G 跑全市场回测会紧张。存储建议 60G 以上,10 年全市场日线 Parquet 大约占 10-20G。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、为什么要搬出来:我被在线环境"卡"了两次
  • 二、总体方案:平台出数据,我的服务器出算力
  • 三、上手:装 SDK 到第一次取数,二十分钟
  • 四、数据落库:一次拉取,反复使用
  • 五、踩了个坑:SDK 登录被打满,脚本全军覆没
  • 六、现在的日常:研究自由度完全不一样了
  • 七、说说还能更好的地方
  • 八、总结:数据跟着账号走,算力跟着自己走
  • 常见问题 FAQ
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档