2015-09-07

花了2天,把重构的C代码结合到回测系统上了,试了下效率,这次不用cache达到了之前用cache才能达到的速度。

因为不再依赖缓存,数据计算更灵活了,可以下一步了,所以顺手把回测系统的公式格式改的类似矩阵计算那种:

return MA(C, 50) / History(MA(C, 10), 5)

至于为啥要这样,是因为这种矩阵的数据输入方式确实能缩短公式长度,也符合常见方式。

但我为了性能,实现的有点绕。

比如公式,求过去5行C数据项的平均值可以用:AVG(data.C, 5),这里的C表示数据项的列。然后AVG会对每行C数据(也就是data.C),与前5行,平均一下。

但你要做 AVG(data.C - 10, 5) 的话要怎么实现?按照函数调用的一般逻辑,data.C - 10会先计算出来并传入AVG函数,C作为一列数组,每行都先-10,现在python他们都是这么做的。

但这个问题是,浪费计算量啊!并不是所有行你都要求平均值,也许你需要跳着求。

那么就需要延后计算,惰性求值。闭包可以做到,所以这部分我用Lua闭包饶了一下才做了实现。


回主页