量化杂谈之基础篇系列文章:
【一】获取所有股票的代码和名字:一个爬虫的简单例子https://bbs.pinggu.org/thread-4145710-1-1.html
【二】回测的那些事
https://bbs.pinggu.org/thread-4154818-1-1.html
关注我的微信公众号,有更多关于量化的原创文章哦!。
我的微信公众号:会掘金的小鹿(NuggetsRoad)
是时候关注一波了!
策略的回测是存在一定共性的,比如都需要获取历史数据、识别交易信号、平开仓操作、策略表现计算等。如果我们对每个策略都单独做一套的话,那么会浪费很多时间在重复性的工作上。因此,搭建一个完善高效的回测系统是非常有必要的。回测系统包含策略回测的整个过程,并且封装了各种容易调用的接口,可以快速地进行策略的回测。
数据库的搭建
建立回测系统的第一步是搭建存储数据的数据库。数据库主要用于原始数据的存储,原始数据清洗或变换后的数据存储,以及回测产生的交易和结果数据的存储。常用的数据库有以下几种:
此外,构建一个Linux的开发环境是对你非常有帮助的(在Windows系统上可以采用虚拟机),采用Shell脚本能够对任务进行定时的调度。
回测工具的选取
哪一款工具是最适合策略回测的,不同的量化研究人员会给你不同的答案,下面这几种是回测中比较流行的工具和编程语言。
Matlab的优点在于其矩阵运算特性,Matlab与统计和金融相关的toolbox能让你轻松完成一些复杂模型的建立,非常容易上手。Python是一种高级、开源的脚本语言,numpy、pandas、scipy等扩展模块能够帮助你完成矩阵、数据统计、数值计算等方面的处理,开发效率很高。R擅长统计和时间序列的处理,在统计、计量、数据规整以及画图等方面有优秀的package。C++是执行速度最快的高级语言之一,一般用于超高频策略的回测中。
具体选择哪种回测工具取决于策略的类型和交易频率,开发的效率要求,购买和维护成本,源码是否能够获得,交易软件的API接口是否支持以及第三方库的丰富性。当然,作为业余的量化投资研究,我们也不需要纠结这么多因素,哪个工具你更熟悉、用起来更方便就用哪个。我曾经使用Matlab做过很多策略的回测,现在更倾向于使用Python,因为它的通用性更加有利于扩展,并且其开源特性更适合业余学习。
回测系统环境的搭建
我推荐的回测环境是Spyder,Spyder是Python的一个集成的pyton开发环境,其界面与Matlab非常类似,并且自带了很多package,省去了我们单独安装的麻烦。当然原生或者其他如pycharm的IDE也是可以选择的,这取决于你的偏好。无论选择怎样的IDE,以下模块是在回测中需要经常用到的:
numpy
pandas
scipy
matplotlib或其他绘图包
scikit-learn或其他机器学习包
MySQLdb或其他数据库接口
回测框架的建立
建立怎样的回测框架取决于你的策略是怎样的,你的回测目的又是什么。如果回测仅仅是为了对策略进行研究和探索,那么在回测框架中不需要对委托下单等具体事件进行构建。以下我们建立了一个最简单的回测框架以供参考,该框架可以用于低频择时策略的回测研究。
框架主体有三个模块组成:策略模块是根据策略的参数和规则产生交易信号,交易模块根据信号决定各期的仓位、并记录交易过程中产生的费用以及资金情况,回测表现模块则是对策略进行评判、输出相关指标、图形以及测试报告。
Input:交易品种的bars,Open-High-Low-Close-Volume (OHLCV)
Output: 信号signals,取值为(1,0,-1),分别表示buy,hold,sell
Input:Signals
Output: 交易相关数据的tracing(仓位,交易费用,资金流)
Inputs:交易相关数据
Output:策略评价指标,图形,回测报告等