- 主题:我的python股票回测引擎用numba重写了,速度提高百倍
numba真是神器。
以前回测功能在dotnet平台实现,现在可以都放在python啦
--
FROM 223.72.44.*
那就要两个环境来回切换,还要包装,numba省事多了
【 在 poggy 的大作中提到: 】
:
: numba的缺点就是调试程序方面,
: 能用numba, 底层直接用C写模块也是差不多的。
--
FROM 223.72.44.*
而且, numba支持并行化,支持simd,基本自动实现
【 在 poggy 的大作中提到: 】
:
: numba的缺点就是调试程序方面,
: 能用numba, 底层直接用C写模块也是差不多的。
--
FROM 223.72.44.*
tushare可以下载,每年200块钱买积分
【 在 NiuBei 的大作中提到: 】
: 老哥,回测数据哪里来的
:
--
FROM 223.72.44.*
计算指标可用numpy,但是用numba写策略更灵活,很多策略不好向量化
【 在 yatobiaf 的大作中提到: 】
:
: 厉害了楼主,正好最近打算写个python股票回测模块,看到楼主的帖子打算试试numba。
: 请问numba为啥会比python快那么多?
: 股票回测大部分底层是矩阵乘法,python的numpy模块做了很多的优化,我感觉速度和c也差不多,楼主之前的python股票回测引擎是用了
: ..................
发自「今日水木 on iPhone 12」
--
FROM 223.72.44.*
numba调用llmv,实现jit
【 在 yatobiaf 的大作中提到: 】
:
: 厉害了楼主,正好最近打算写个python股票回测模块,看到楼主的帖子打算试试numba。
: 请问numba为啥会比python快那么多?
: 股票回测大部分底层是矩阵乘法,python的numpy模块做了很多的优化,我感觉速度和c也差不多,楼主之前的python股票回测引擎是用了
: ..................
发自「今日水木 on iPhone 12」
--
FROM 223.72.44.*
高兴的太早了, 发现在jit函数内部,调用原来的numpy数组运算,结果跟不用jit不一样!!!
在jit函数中,numpy有的计算会出错
这是一个计算移动平均的函数
@njit
def ma(a:float64[:], n:int32)->float64[:] :
r=np.cumsum(a)
r[n:] -= r[0:-n].copy() #这里如果不调用copy(),两边的内存重叠,计算就会出错。不用numba没问题
r[n:] /= n
r[0:n] /= np.arange(1,n+1)
return r
但是本来就是numpy向量计算,jit加速不多,又多了一次copy,这种情况可能还不如不用jit
或者为下一步计算单独分配内存,这样也增加了开销,也不合算。
另一个办法是完全不用numpy计算,直接循环。 这样最能体现numba的优势。
【 在 finlab 的大作中提到: 】
: numba真是神器。
: 以前回测功能在dotnet平台实现,现在可以都放在python啦
--
FROM 223.72.44.*
他们的数据也是不知道哪里抓来的,他们小成本运行,也不可能花太多人力检查数据
为了省钱,只能凑合着用了。
wind的数据质量好,但是太贵了。
【 在 beanpole 的大作中提到: 】
: 两年前不用tushare了
: 它家数据有问题,我提一次,他qq说检查一下,然后告诉我改好了,让我重新读取
: 我问出错原因找到了,是啥,拒不回答,就说改好了
: ...................
--
FROM 223.72.44.*
都用numpy,自己不做循环,只能做一些粗略的统计。
要想比较精细的控制策略,只能用循环。这时候python性能就很低了,就需要numba加速。
我更习惯用下面这种写策略的方式。如果有交易接口,可以方便的直接拿去做程序化交易。
# 单均线策略
@njit
def sma(acc:Account, q:Quote, args):
n=args[0]
c=q.close
o=q.open
ma= fm.ma(c,n)
for i in range(n,len(c)):
if fm.cross_up(c,ma,i-1): # 上日收盘价上穿均线,
acc.buy(i,o[i]) # 则在当日以开盘价买入
elif acc.total_count()>0 and fm.cross_down(c,ma,i-1):
acc.sell(i,o[i])
【 在 yatobiaf 的大作中提到: 】
: 厉害了楼主,正好最近打算写个python股票回测模块,看到楼主的帖子打算试试numba。
: 请问numba为啥会比python快那么多?
: 股票回测大部分底层是矩阵乘法,python的numpy模块做了很多的优化,我感觉速度和c也差不多,楼主之前的python股票回测引擎是用了矩阵乘法吗?
: ...................
--
FROM 223.72.44.*
很早以前抓过tdx本地数据, 好久没用了,不知道格式是不是有变化?
【 在 beanpole 的大作中提到: 】
: 如果只是分钟线日线,自己解析通达信本地数据就好了,快太多太多了
:
--
FROM 223.72.44.*