Ⅰ 选股策略回测用 Matlab 好还是用 python 好
首先十年的日级别数据量的确不大,使用Python来说的话不应该出现memoryerror,应该是在编程方面需要再多留意,我们在Ricequant上使用的分钟数据大概是200-300个GB左右,也是Python和Java共同合作完成的。
语言只是一个语言,兴许会有各种语法的不同,但是在谈语言的时候我们需要了解背后的工具箱和社区,以及它为什么处理一些事情比另外的一些语言要好。
本
身Python初期用来做金融回测等是应该被放弃的,用来开发策略也应该是被放弃的,因为相比matlab的矩阵运算来做开发,实在是太方便了。只不过后
来Python推出了series、pandas等一系列的强悍library,pandas的语法基本在“无耻”地模仿matlab和R,而
pandas的开发者正是美国大名鼎鼎的对冲AQR,因此使data
crunching和对数据的一些操作大大便利,此外,又包装了海量的开源社区的数学和科学计算库,也能处理各种的machin
learning等等的问题。
从科学计算的语言的发展来看,从最初的人们对浮点数计算的需求加入了fortran,再一路进行,让工具更加的让科学计算容易再容易(Python也封装了大量早期的数学家们用fortran写的数学计算基础库,这些经历了几十年的考验、加速等等):
我们来看下python目前的科学技术栈:
numpy: basic array manipulation - 基础的数组处理
scipy: scientific computing in python, including signal processing and optimization - 科学计算,包括信号处理和优化等
matplotlib: visualization and plotting - 几行代码就可以做图形化显示了
IPython: write and run python code interactively in a shell or a notebook - 互动式编程环境,这是能将来替代掉matlab的一个必备,即在一行一行代码的输入、显示过程中学习、改进
pandas: data manipulation - 最重要的矩阵运算等
scikit-learn: machine learning - 机器学习
但
是随着以后的发展Python的开源属性就会体现的越来越强大,可以让更多的人享受到其便利和贡献进来,包括Quantopian也放出了zipline
的python回测框架,只需要引入yahoo数据即可进行回测,并且Python的速度由于跟C的很好的结合可以达到非常快的速度,而且可以将来和其他
系统很容易整合对接实盘交易接口。
由于欧美已经有很多的投行和对冲在往Python的技术栈靠拢,因此选择了Python即掌握了一门重要的工具,并且无需跟一家私有化公司进行捆绑。
当然,最后的最后,所有的python回测你都可以来Ricequant - Beta上完成,我们支持海量的市场、财务数据,还有不断加入的和大数据公司合作的舆情数据等等,同时策略回测完还可以做实时模拟交易,享受到实时数据的计算。在云平台上已经支持了几乎所有的Python科学计算库,无需花时间安装、测试等等。
Ⅱ python pandas怎么输出结果
本文是对pandas官方网站上《10 Minutes to pandas》的一个简单的翻译,原文在这里。这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook 。习惯上,我们会按下面格式引入所需要的包:
一、 创建对象
可以通过 Data Structure Intro Setion 来查看有关该节内容的详细信息。
1、可以通过传递一个list对象来创建一个Series,pandas会默认创建整型索引:
2、通过传递一个numpy array,时间索引以及列标签来创建一个DataFrame:
3、通过传递一个能够被转换成类似序列结构的字典对象来创建一个DataFrame:
4、查看不同列的数据类型:
5、如果你使用的是IPython,使用Tab自动补全功能会自动识别所有的属性以及自定义的列,下图中是所有能够被自动识别的属性的一个子集:
二、 查看数据
详情请参阅:Basics Section
1、 查看frame中头部和尾部的行:
2、 显示索引、列和底层的numpy数据:
3、 describe()函数对于数据的快速统计汇总:
4、 对数据的转置:
5、 按轴进行排序
6、 按值进行排序
三、 选择
虽然标准的Python/Numpy的选择和设置表达式都能够直接派上用场,但是作为工程使用的代码,我们推荐使用经过优化的pandas数据访问方式: .at, .iat, .loc, .iloc 和 .ix详情请参阅Indexing and Selecing Data 和 MultiIndex / Advanced Indexing。
l 获取
1、 选择一个单独的列,这将会返回一个Series,等同于df.A:
2、 通过[]进行选择,这将会对行进行切片
l 通过标签选择
1、 使用标签来获取一个交叉的区域
2、 通过标签来在多个轴上进行选择
3、 标签切片
4、 对于返回的对象进行维度缩减
5、 获取一个标量
6、 快速访问一个标量(与上一个方法等价)
l 通过位置选择
1、 通过传递数值进行位置选择(选择的是行)
2、 通过数值进行切片,与numpy/python中的情况类似
3、 通过指定一个位置的列表,与numpy/python中的情况类似
4、 对行进行切片
5、 对列进行切片
6、 获取特定的值
l 布尔索引
1、 使用一个单独列的值来选择数据:
2、 使用where操作来选择数据:
3、 使用isin()方法来过滤:
l 设置
1、 设置一个新的列:
2、 通过标签设置新的值:
3、 通过位置设置新的值:
4、 通过一个numpy数组设置一组新值:
上述操作结果如下:
5、 通过where操作来设置新的值:
四、 缺失值处理
在pandas中,使用np.nan来代替缺失值,这些值将默认不会包含在计算中,详情请参阅:Missing Data Section。
1、 reindex()方法可以对指定轴上的索引进行改变/增加/删除操作,这将返回原始数据的一个拷贝:、
2、 去掉包含缺失值的行:
3、 对缺失值进行填充:
4、 对数据进行布尔填充:
五、 相关操作
详情请参与 Basic Section On Binary Ops
统计(相关操作通常情况下不包括缺失值)
1、 执行描述性统计:
2、 在其他轴上进行相同的操作:
3、 对于拥有不同维度,需要对齐的对象进行操作。Pandas会自动的沿着指定的维度进行广播:
Apply
1、 对数据应用函数:
直方图
具体请参照:Histogramming and Discretization
字符串方法
Series对象在其str属性中配备了一组字符串处理方法,可以很容易的应用到数组中的每个元素,如下段代码所示。更多详情请参考:Vectorized String Methods.
六、 合并
Pandas提供了大量的方法能够轻松的对Series,DataFrame和Panel对象进行各种符合各种逻辑关系的合并操作。具体请参阅:Merging section
Concat
Join 类似于SQL类型的合并,具体请参阅:Database style joining
Append 将一行连接到一个DataFrame上,具体请参阅Appending:
七、 分组
对于”group by”操作,我们通常是指以下一个或多个操作步骤:
(Splitting)按照一些规则将数据分为不同的组;
(Applying)对于每组数据分别执行一个函数;
(Combining)将结果组合到一个数据结构中;
详情请参阅:Grouping section
1、 分组并对每个分组执行sum函数:
2、 通过多个列进行分组形成一个层次索引,然后执行函数:
八、 Reshaping
详情请参阅 Hierarchical Indexing 和 Reshaping。
Stack
数据透视表,详情请参阅:Pivot Tables.
可以从这个数据中轻松的生成数据透视表:
九、 时间序列
Pandas在对频率转换进行重新采样时拥有简单、强大且高效的功能(如将按秒采样的数据转换为按5分钟为单位进行采样的数据)。这种操作在金融领域非常常见。具体参考:Time Series section。
1、 时区表示:
2、 时区转换:
3、 时间跨度转换:
4、 时期和时间戳之间的转换使得可以使用一些方便的算术函数。
十、 Categorical
从0.15版本开始,pandas可以在DataFrame中支持Categorical类型的数据,详细 介绍参看:categorical introction和API documentation。
1、 将原始的grade转换为Categorical数据类型:
2、 将Categorical类型数据重命名为更有意义的名称:
3、 对类别进行重新排序,增加缺失的类别:
4、 排序是按照Categorical的顺序进行的而不是按照字典顺序进行:
5、 对Categorical列进行排序时存在空的类别:
十一、 画图
具体文档参看:Plotting docs
对于DataFrame来说,plot是一种将所有列及其标签进行绘制的简便方法:
十二、 导入和保存数据
CSV,参考:Writing to a csv file
1、 写入csv文件:
2、 从csv文件中读取:
HDF5,参考:HDFStores
1、 写入HDF5存储:
2、 从HDF5存储中读取:
Excel,参考:MS Excel
1、 写入excel文件:
2、 从excel文件中读取:
来自为知笔记(Wiz)
Ⅲ python怎样读取hdf5文件
http://www.open-open.com/doc/view/
Ⅳ linux caffe支持的cuda capability 最小是多少
由于最近安装了Ubuntu16.04,苦于之前配置Caffe的教程都在版本14.04左右,无奈只能自己摸索,最终配置成功。本文教程的特点是不需要降级gcc的版本,毕竟cuda7.5不支持gcc5以上(默认不支持,实际支持),避免出现一系列乱七八糟的问题,反正之前我是碰到了。
本文是在参考caffe官网教程(http://caffe.berkeleyvision.org/installation.html)结合自己总结经验而来,对此表示感谢。
1.所需文件下载
1.1.Ubuntu16.04在官网下载(http://www.ubuntu.org.cn/download/desktop),然后在windows下用UltraISO制作,相关文章搜索有一大片,此处不再赘述。
1.2.cuda7.5下载,下载的版本是ubuntu15.04的run文件,个人感觉比较方便。
1.3.cudnn4.0下载(https://developer.nvidia.com/cudnn),进去之后如果有注册过nvidia的账户直接点击download,否则需要注册一个账户,注册完之后有一个调查,随便选几个钩就可以,然后下一步是接受条款开始就可以下载了。
1.4.caffe下载(https://github.com/BVLC/caffe)就在官方的github下载就可以了。
2.显卡驱动安装
2.1.第一种方法是直接在ubuntu系统设置,软件和更新里面,选择中国的服务器源刷新之后,点击附加驱动选项,在Nvidia Corporation选择361.42(强迫症必须安装最新的),然后点击应用更改,下载安装完之后重启。
2.2.第二种方法是去官方下载(http://www.geforce.cn/drivers)好驱动的run文件,选择对应显卡型号下载。然后关机把显示器插到集成显卡接口上,或者终端下
sudo gedit /etc/modprobe.d/blacklist.conf
输入密码后在最后一行编辑上
blacklist nouveau
Ctrl +C保存后终端输入
sudo update-initramfs -u
重启之后在界面按Ctrl+Alt+F2,输入root以及密码,然后
service lightdm stop
sh 你自己的驱动文件的完整路径,默认选项就可以安装了,安装后重启
3.Cuda7.5安装
3.1.以文件名为cuda.run为例,终端下输入
sh cuda.run --override 启动安装程序,此处有大量的条款,一路空格到最后 输入accept,依次输入y回车,然后n(不安装显卡驱动),然后一路y回车,有一个地方需要输入密码,还有两个地方确认安装路径,直接回车即可,完成安装,默认安装路径是/usr/local
将下载下来的cudnn-7.0-linux-x64-v4.0-prod.tgz 解压之后,解压后的cuda文件夹先打开里面的include文件夹,空白右键在终端打开输入:
sudo cp cudnn.h /usr/local/cuda/include/
cd ~/cuda/lib64
sudo cp lib* /usr/local/cuda/lib64/
继续更新文件链接
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.4
sudo ln -s libcudnn.so.4.0.7 libcudnn.so.4
sudo ln -s libcudnn.so.4 libcudnn.so
然后设置环境变量
sudo gedit /etc/profile
在末尾加入
PATH=/usr/local/cuda/bin:$PATH
export PATH
保存之后创建链接文件
sudo vim /etc/ld.so.conf.d/cuda.conf
键盘按i进入编辑状态,添加文字
/usr/local/cuda/lib64
然后按esc,输入:wq保存退出。
终端下接着输入
sudo ldconfig 使链接生效
4.生成Cuda Sample测试
首先在此之前先把需要的依赖包都安装好,为接下来make caffe做准备
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
然后开始make samples ,终端下
cd /home/gomee/NVIDIA_CUDA-7.5_Samples
sudo make all -j4
我是4核电脑所以用了j4,正常情况下肯定会报错“unsupported GNU version! gcc versions later than 4.9 are not supported!”,原因就是这个cuda不支持gcc5.0以上,终端运行
cd /usr/local/cuda-7.5/include
cp host_config.h host_config.h.bak
sudo gedit host_config.h
Ctrl+F寻找有”4.9”的地方,应该是只有一处,在其上方的
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 9)将两个4改成5,保存退出,继续
cd /home/gomee/NVIDIA_CUDA-7.5_Samples
sudo make all -j4
这就应该开始make了,此处大约有5、6分钟。完成之后
cd /home/gomee/NVIDIA_CUDA-7.5_Samples/bin/x86_64/linux
./deviceQuery
会出现类似以下的信息
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "GeForce GTX 750 Ti"
CUDA Driver Version / Runtime Version 8.0 / 7.5
CUDA Capability Major/Minor version number: 5.0
Total amount of global memory: 2047 MBytes (2146762752 bytes)
( 5) Multiprocessors, (128) CUDA Cores/MP: 640 CUDA Cores
GPU Max Clock rate: 1228 MHz (1.23 GHz)
Memory Clock rate: 3004 Mhz
Memory Bus Width: 128-bit
L2 Cache Size: 2097152 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent and kernel execution: Yes with 1 engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 7.5, NumDevs = 1, Device0 = GeForce GTX 750 Ti
Result = PASS
这就说明成功了。
5.Python配置
将之前github下载的caffe压缩文件解压缩到任一目录,然后安装python
python的版本安装有两种方式:
第一是直接安装anaconda,去官网下载 ,选择linux 64bit 2.7版本下载安装,anaconda安装方便但是需要在最后的make配置文件中更改python包含路径。
第二种方法就是使用原生的python2.7版本,终端下
sudo apt-get install python-pip 安装pip
这里我们用pip安装一些python需要的依赖包,不过为了避免各种问题,也可以通过apt-get安装,反正我这两种方式都安装了一遍(-.-)
sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
以caffe默认解压到/home/user(你的用户名)/ ,文件夹名名称caffe为例
cd /home/user/caffe/python
sudo su
for req in $(cat requirements.txt); do pip install $req; done
这里用pip安装可能速度很慢,很可能下载好几个小时,推荐用清华大学的pip源临时安装,所以命令改为如下:
for req in $(cat requirements.txt); do pip install -i https://pypi.tuna.tsinghua.e.cn/simple $req; done
这里如果第一次有很多红字错误,建议再运行几遍指导安装成功,对于黄字提示无需理会,可能是pip版本需要更新。
6.Caffe编译过程
接下来要进入最后的步骤了,终端中
cd /home/user/caffe
cp Makefile.config.example Makefile.config
gedit Makefile.config
将USE_CUDNN := 1 取消注释,在
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include后面打上一个空格 然后添加/usr/include/hdf5/serial 如果没有这一句可能会报一个找不到hdf5.h的错误
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include先不做更改。
如果是需要生成matlab的caffe wrapper 请取消注释MATLAB_DIR然后替换为自己的目录
说一下提前会出现的问题:
第一,make过程中出现比如 string.h ‘memcy’ was not declared in this scope的错误是由于gcc编译器版本太新,解决方法是打开makefile搜索并替换
NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
为
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
保存退出
第二,在make过程中还会报一个ld找不到libhdf5 和libhdf5_hl的链接问题,这个原因可能也是因为hdf5的问题,首先看/usr/lib/x86_64-linux-gnu 目录下有没有libhdf5.so和libhdf5_hl.so,如果有的话,查看属性是否有正确的链接(正常情况下应该是没有这两个文件),然后右键在终端中打开
sudo ln libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
注意,10.1.0和10.0.2可能不同电脑安装版本不同,注意看当前目录下存在的文件然后
sudo ldconfig 生效
接下来就是直接编译的过程
cd /home/user/caffe
make all -j4
make test -j4
make runtest
make pycaffe
make matcaffe
如果编译没报错正常的话,基本就没问题了。测试python打开
cd /home/user/caffe/python
python
import caffe
如果不报错就说明编译成功
测试matlab打开./caffe/matlab/+caffe/private,看有没有生成一个caffe的mex文件,可以运行+test文件夹里面的程序测试。
小问题:
在使用python接口的时候,可能会报一个什么错误(我给忘记了–!),对了是’Mean shape incompatible with input shape.’的错误,处理方法是python/caffe文件夹,编辑io.py文件,将
if ms != self.inputs[in_][1:]:
raise ValueError('Mean shape incompatible with input shape.')
替换为
if ms != self.inputs[in_][1:]:
print(self.inputs[in_])
in_shape = self.inputs[in_][1:]
m_min, m_max = mean.min(), mean.max()
normal_mean = (mean - m_min) / (m_max - m_min)
mean = resize_image(normal_mean.transpose((1,2,0)),in_shape[1:]).transpose((2,0,1)) * (m_max - m_min) + m_min
然后make clean再重新make
7.总结
至此,Ubuntu16.04下编译Caffe的教程就结束了,作者历时三天,装了好几遍系统,刚开始用Ubuntu14.04,结果系统出现问题,强迫症实在受不了,就尝试着装16.04继续折腾,最终折腾成功。以后可能会更新python3下的编译教程,需要自己编译boost版本,总之也很麻烦。
Ⅳ Quant 应该学习哪些 Python 知识
1. 如果还需要Deep Learning方面的东西的话,可以考虑Theano或者Keras。这两个东西可能会用在分析新闻数据方面。不过不是很推荐使用这类方法去做量化模型,因为计算量实在是太大,成本很高。
2. 交易框架方面,除了vn.py,还推荐PyAlgoTrade框架,github上可以搜到。私以为这个框架比vn.py牛逼太多了,毕竟是一个在金融IT领域混迹近20年的老妖的作品,架构设计不是一般的优秀。
3. 国内的话,ricequant是个不错的选择,虽然使用的是Java,但是团队我见过,都是做金融IT出身的,基本上都有7、8年以上经验,底层功底非常扎实,做事情都很靠谱。现在他们也在考虑把SDK扩展到Python这边。
4. 国内的行情和交易接口,使用的是自己的协议(比如CTP接口使用的是FTD协议),而不是国际上广泛使用的FIX协议,并且都不开源。如果需要连接行情,还需要考虑将接口SDK为python封装一下。(修改:评论中有人提到很多券商也开放了FIX接口,不过似乎是在内网使用)
5. 有人谈到数据库了,这里我也说一下,对于高频tick级别的数据,其量级可以达到每天TB级别,普通的关系数据库是扛不住的。如果试图使用传统的关系数据库,比如Oracle之类的可以省省了。对付这种级别的数据,采用文件系统+内存索引会更好。不过这种场景,一般也就是机构里面能碰到了,个人quant可以不用考虑。
Ⅵ hdf5 python 怎么压缩节省硬盘
python安装第三方模块有多种方法: 直接下载安装包安装,解压后,进入目录,直接python setup.py install 使用包管理器pip安装, 直接pip install 包名 如果解决了您的问题请采纳! 如果未解决请继续追问!
Ⅶ 如何用numpy提取HDF5数据
我觉得你尽量分解开来:
1 hdf5文件的读取,这个当然是用python的hdf库比如ls说的h5py ,读成你需要的格式或类型,比如numpy的矩阵类型;
2 从numpy的角度考虑将矩阵数据绘制出图!
Ⅷ 第1章 为什么将Python用于金融
python是一门高级的编程语言,广泛应用在各种领域之中,同时也是人工智能领域首选的语言。
为什么将python用于金融?因为Python的语法很容易实现金融算法和数学计算,可以将数学语句转化成python代码,没有任何语言能像Python这样适用于数学。