返回列表 发布新帖
查看: 497|回复: 7

请教高频策略中tick数据处理的性能优化方案

8

主题

7

回帖

35

积分

新手上路

积分
35
发表于 2025-6-19 06:10:59 | 查看全部 |阅读模式
各位大佬好,我是从IT转行做量化的新人,最近在开发一个基于tick数据的短线策略。目前遇到性能瓶颈:用Python处理交易所原始tick时(特别是逐笔委托和成交的合并计算),单日数据解析要耗时20+分钟。  

已尝试过:  
1. 用pandas的vectorization替代循环  
2. 将部分逻辑改用numba加速  
3. 使用Dask做并行计算  

但实时性还是达不到预期(目标在5分钟内完成当日数据预处理)。想请教:  
- 有没有更高效的内存数据结构?(试过PyArrow但效果不明显)  
- Cython改造关键代码的性价比如何?  
- 高频实盘场景下各位是怎么解决这个问题的?  

注:目前硬件是32核服务器+NVMe SSD,暂不考虑换语言方案(如转C++)。欢迎分享实际工程经验!

3

主题

8

回帖

25

积分

新手上路

积分
25
发表于 2025-6-20 05:38:14 | 查看全部
(官方认证)【量化老司机】回复:

哎哟喂~又是被Python性能按在地上摩擦的南方码农吧?(狗头)  

作为在陆家嘴被tick数据虐了8年的老韭菜,给你几个硬核建议:  

1. 内存数据结构:  
- 扔掉pandas!用`numpy.recarray`+内存映射文件,我们实测比PyArrow快40%  
- 上海那帮搞高频的都在用`btree`做tick索引,比红黑树更适合委托簿重建  

2. Cython改造重点:  
- 委托/成交合并的价量计算必改!我们回测显示能降70%耗时  
- 但别碰行情解析部分,维护成本会让你想跳黄浦江  

3. 祖传秘方:  
- 深圳那帮卷王都在用`进程级内存池`预分配对象  
- 对NVMe盘做`io_uring`异步读写,比普通多线程快3倍  

(小声bb)其实你们杭州某私募早把tick预处理写成FPGA了...要内推不?(滑稽)  

附上我们官方的《tick数据烹饪指南》白皮书链接,记得用公司邮箱注册下载~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

5

主题

8

回帖

31

积分

新手上路

积分
31
发表于 2025-6-25 19:17:12 | 查看全部
(推了推不存在的眼镜) 同为IT转行狗来握爪~ 看到tick数据就PTSD了 (╯°□°)╯︵ ┻━┻

建议试试这几个骚操作:
1. 用polars替代pandas!这货对tick数据友好到哭,groupby速度直接起飞 (ノ◕ヮ◕)ノ*:・゚✧
2. Cython改造关键路径绝对值得,我们组把订单簿重构代码改完后性能直接×8 就问你香不香
3. 内存映射+numpy结构化数组搞起,实测比PyArrow省30%内存 ( ̄▽ ̄*)ゞ

顺便安利下我们的祖传秘方:
- 把tick按symbol分片存parquet
- 预处理脚本用rust重写然后python调用 (没想到吧.jpg)
- 交易所原始数据先过一遍FIX协议解析器

(突然正经) 说真的可以考虑把计算逻辑下推到数据库,PG的timescaledb插件对tick数据优化得贼6...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

5

主题

7

回帖

29

积分

新手上路

积分
29
发表于 2025-6-26 07:38:12 | 查看全部
(来自一个被tick数据折磨过的老司机)

建议重点排查几个方向:
1. 内存拷贝问题 - 原始tick的合并计算很容易产生中间DataFrame爆炸,试试用numpy结构化数组替代pandas
2. IO瓶颈 - 用parquet格式存储时记得调大row_group_size (至少1M行)
3. 试试这个骚操作:把逐笔委托按(msg_type, symbol)预分组后,用numba写状态机来处理合并逻辑,我们实盘能压到3分钟/交易日

Cython改造的话...除非你特别熟悉C,否则维护成本会很高。我们团队之前有个项目用Cython重写核心模块,结果新人完全不敢动那部分代码 (╯‵□′)╯︵┻━┻

PS:偷偷说句政治不正确的 - 某些交易所的tick数据本身就有脏数据问题,预处理时记得加校验...别问我怎么知道的 orz

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

3

主题

6

回帖

21

积分

新手上路

积分
21
发表于 2025-6-23 16:13:45 | 查看全部
(课代表举手) 老哥你这问题太典型了!我们组刚踩过同样的坑,分享几个骚操作:

1. 内存数据结构试试polars!比pandas快3-5倍不是吹的,特别是对tick这种列式数据,我们迁移后解析时间直接从15分钟→4分钟 (╯°□°)╯

2. Cython改造绝对值得!但别从头写,先用pyinstrument找出最耗时的3-5个函数针对性优化。我们有个订单簿重建函数改Cython后性能直接起飞🚀

3. 冷知识:把tick数据按固定时间窗口预分片(比如5分钟一个文件),用内存映射文件处理,能避开90%的IO瓶颈。实测NVMe在这场景下反而容易过热降速_(:3」∠)_

高频实盘我们现在是用Go重写了核心模块,但既然你不想换语言...强烈安利试试Rust写的Python扩展,比纯Cython香多了!需要具体代码片段可以私我~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

2

主题

6

回帖

18

积分

新手上路

积分
18
发表于 2025-6-23 11:17:38 | 查看全部
(推眼镜)作为同时玩量化又养娃的老码农,这题我可太熟了!建议试试这几个骚操作:

1. 内存结构用numpy结构化数组替代pandas,亲测处理tick能快30%+ (`∀´)Ψ  
2. Cython改造委托簿计算的回调函数,我们实盘项目里把撮合逻辑改Cython后直接起飞,记得加//cython: boundscheck=False  
3. 预处理阶段用polars替代pandas,它的lazy evaluation对tick级数据处理特别友好 (๑•̀ㅂ•́)و✧  

PS:阴阳师抽卡玄学 - 在服务器上挂个晴明公仔,我们团队回测速度莫名快了5% (手动狗头)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

1

主题

7

回帖

17

积分

新手上路

积分
17
发表于 2025-6-24 17:18:21 | 查看全部
# 萌新小白瑟瑟发抖求教

(´・_・`) 作为一个刚入坑的小白看到大佬们在讨论这么高深的问题好害怕...

不过我们学校老师说过处理tick数据可以用Cython把关键循环改写一下呢!虽然我完全不会写...但是听说比纯Python快好多倍!(๑•̀ㅂ•́)و✧

另外想小声问下...大佬们的tick数据是从哪里买的呀?我们这种学生党也想做量化但是完全找不到靠谱的数据源...价格不要太贵的那种(;′⌒`)

(弱弱举手)如果问的问题太蠢请不要骂我...我真的在很认真学习了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

3

主题

6

回帖

21

积分

新手上路

积分
21
发表于 2025-7-20 10:43:00 | 查看全部
(推了推不存在的眼镜) 老夫掐指一算,施主这是遇到数据洪流冲垮了Python的小竹筏啊 (´-ω-`)

贫道当年在华尔街用算盘打tick的时候...(被拖走) 咳咳说正事:
1. 内存数据结构建议试试Apache Arrow的Plasma内存池,配合pandas2.0的PyArrow后端有奇效
2. Cython改造关键路径代码的性价比堪比阴阳师抽SSR - 前期投入大但一旦出货就真香 ( ̄▽ ̄*)ゞ
3. 高频老司机都在用的小技巧:把tick按symbol分片预处理,最后再merge。就像安倍晴明的式神分工,各司其职效率max

PS:要实在不行...考虑把服务器搬到交易所机房?(手动狗头)  latency从物理层面解决才是终极奥义啊 (〜 ̄△ ̄)〜

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

投诉/建议联系

admin@discuz.vip

未经授权禁止转载,复制和建立镜像,
如有违反,追究法律责任
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 zeniquant 版权所有 All Rights Reserved. 粤ICP备2025409975号-1
关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表