- 主题:我的python股票回测引擎用numba重写了,速度提高百倍
【 在 finlab 的大作中提到: 】
: 都用numpy,自己不做循环,只能做一些粗略的统计。
: 要想比较精细的控制策略,只能用循环。这时候python性能就很低了,就需要numba加速。
: 我更习惯用下面这种写策略的方式。如果有交易接口,可以方便的直接拿去做程序化交易。
: ...................
等你逻辑写复杂了, 就会感受到numba的短板,
预编译优化, 导致调试困难
使用的python对象和函数也受限制, 比如简单的print都可能不能用
--
FROM 115.171.245.*
用print没有问题。
调试确实不方便,现在就是到处加print查看
我也只是核心引擎和策略用numba, 外围代码还是python
实在要用其他python的东西,就在外面处理成numpy ndarray再传进去。
现在看来,numba还是不错的, 提供了nogil参数,可以让生产的jit函数在运行时不占用gil
这样就可以直接使用python多线程,每个线程都跑满。
我毕竟还是刚开始尝试,不知道后面会碰到什么问题。
【 在 poggy 的大作中提到: 】
:
: 等你逻辑写复杂了, 就会感受到numba的短板,
: 预编译优化, 导致调试困难
: ...................
--
FROM 223.72.44.*
要不楼主公开部分代码, 我们看看numba方案和c#方案的综合对比?比如生产力、执行效率等.
--
FROM 52.195.2.*
或者找个github上开源的项目对比下
--
FROM 52.195.2.*
目前C#比numba的python慢一些,不过c#的功能更多。numba版本做了很多简化
【 在 KnightZorro 的大作中提到: 】
: 要不楼主公开部分代码, 我们看看numba方案和c#方案的综合对比?比如生产力、执行效率等.
--
FROM 223.72.44.*
没别的意思, 最近对microbenchmark着迷, 要不你提供个最简单的可以区分两者性能的例子,然后放出代码看看
【 在 finlab 的大作中提到: 】
: 目前C#比numba的python慢一些,不过c#的功能更多。numba版本做了很多简化
:
:
--
FROM 52.195.2.*
不折腾啦, 目前看, 行情数据做预处理后,用pickle缓存
做批量测试时,直接读缓存,这样,1秒钟能完成近千只股票的简单策略回测。
这样的速度也够用了。
目前的两个问题, 一个是numba首次做jit编译的耗时很长,我的numba代码没多少,但是要花5秒左右的时间来编译。
每次运行前,都要先预热。jit函数提供了cache参数,缓存jit结果,避免每次运行都做jit。但是jitclass还不支持这个机制。
另外,指定nogil参数的jit函数可以很好的多线程并行运行,但是jitclass同样不支持这个参数。所以用了jitclass,多线程就没法发挥作用。
现在jitclass还是experimental的, 不知道什么时候能好。
【 在 KnightZorro 的大作中提到: 】
: 或者找个github上开源的项目对比下
--
FROM 223.72.44.*
我去年还是前年做过c++,c#,python numba 的一个纯计算的性能测试。
适当优化后,C#能达到C++的性能,numba甚至比我手写的c++还快。
如果不用C#提供的其他东西,单纯计算,速度跟C++基本一样。 不过C++ 模板编程的抽象开销非常少,而C#抽象开销就比较明显。使用的C#特有机制越多,性能损耗越多。层层包装,到了最外面的调用接口,性能就差很多了。
因为numba会自动进行simd优化,调用svml,而C++编译器的simd优化效果一般,C#就只能自己手写。
所以,在快速写出高性能代码方面,numba还是有一定优势的。
【 在 KnightZorro 的大作中提到: 】
: 没别的意思, 最近对microbenchmark着迷, 要不你提供个最简单的可以区分两者性能的例子,然后放出代码看看
--
FROM 223.72.44.*
牛,感谢分享
【 在 finlab 的大作中提到: 】
: 我去年还是前年做过c++,c#,python numba 的一个纯计算的性能测试。适当优化后,C#能 ...
--
FROM 39.144.105.*
现在就碰到一个问题,numba对jitclass得支持还比较弱。
不支持nogil, 导致多线程无法加速
不支持pickle,导致muiltprocess没法序列化,
所以到现在,还是只能得到单线程得性能。
基本够用,但是总觉得有些不舒服。
【 在 poggy 的大作中提到: 】
:
: 等你逻辑写复杂了, 就会感受到numba的短板,
: 预编译优化, 导致调试困难
: ...................
--
FROM 223.72.44.*