今天做程序的时候,需要在回测模块调用研究模块生成的数据,出了些问题,查了一下之前的帖子,做了下总结。
关于回测模块调用研究数据的问题,之前有两篇帖子。
(1)打通回测与研究的文件通道 by 止一之路
(2)使用pickle模块将数据对象保存到文件并在回测中读取 by Supercritical-JoinQuant聚宽
结论概述:
1.研究模块采用python2,用write/read_file法存储读取数据。在回测模块就用write/read_file法调用数据,这是可行的。
2.研究模块采用python3,因为python3里面没有cpickle,所以用open法存储读取数据。如果在回测模块继续用open法,那么会报错找不到文件。如果继续使用write/read_file法,则可以读取数据。回头看看python2生产的数据能不能用open法,还是不行。所以,初步得到一个结论,无论是python2还是3, open方法都不好使。
3.研究模块采用python3(PacVer2.0)的话,回测模块用write/read_file法没有用,产生新的错误,自定义库。
总结,慎用python3(PacVer2.0)。
下面是详细的讨论。
从 生产数据的研究模块 和 调用数据的回测模块 两个方面来讨论:
(一)
我们知道回测模块用到的是python2.0,API中提到了write/read_file,这恰好是(1)提到的方法,我称它write/read_file方法。
研究模块用python2.0,调用cPickle和 StringIO,程序如下:
1.1 那么我们用write/read_file方法在回测模块调用:
(二)如果我们研究模块用3.0,因为python3里面没有cPickle,我们我们调用pickle模块,代码如下:
2.1 这个方法里用到了open,我称它为open方法。
既然用到了open,很自然的,在对应的回测模块中,我用open也可以调用数据么?
报错了~不行。
2.2 如果我们继续使用write/read_file呢?会正常运行。
2.3(1.2) 面对从python3里生产的数据,用open方法不行,对于python2生产的数据可以吗?
初步得到一个结论,无论是python2还是3, open方法都不好使。
(三). 如果我们研究模块用3.0(PacVer2.0),代码如下:
3.1 我们前面知道了open方法不好使,直接用write/read_file方法吧。
出现了新的错误,一堆中文。得到的结论就是在研究中用Python3.0(PacVer2.0)的话,回测模块无法调用数据。
后记:
在研究模块,你用python2,3存下来的数,在python3(PacVer2.0)里都没法读取。
说到底,慎用python3(PacVer2.0)。
{'2017-04-17': o p q
a 0.0 0.0 0.0
b 0.0 0.0 0.0
c 0.0 0.0 0.0, '2017-04-18': o p q
a 1.0 1.0 1.0
b 1.0 1.0 1.0
c 1.0 1.0 1.0, '2017-04-19': o p q
a 2.0 2.0 2.0
b 2.0 2.0 2.0
c 2.0 2.0 2.0}