量化投资概述与简单回测平台的搭建

摘 要:量化投资就是用数量化的方式确定交易的时机、对象和数量. 量化投资的核心在于投资策略的构建. 量化投资策略研究中需要避免过拟合与欠拟合,避免使用未来信息. 策略研究需要进行基于历史数据的回测,因此在研究之前要搭建回测的平台. 回测代码编写需要模拟实际交易过程中的操作,并记录下历史仓位信息. 最后建立一系列的指标从收益、风险的角度对一个策略的优劣进行评价.

关键词:量化投资 回测平台 策略评价

一、量化投资简述

要达成一项投资和交易,需要确定交易对象,交易价格,交易的时间和地点. 量化投资就是通过量化的方法确定交易对象、价格和时间,而不是主观随意确定的. 投资策略的量化与计算机相结合能极大地提升投资的范围和执行效率. 沪深两市有数千只股票,金融衍生品交易也是种类繁多. 利用计算机与量化投资策略能够把握住这其中产生的一些投资机会,而这是人力难以做到的。不仅可以通过将投资者的过往投资经验加以量化从而在计算机上实现程序自动交易,还可以将时下热门的许多数据挖掘分析的方法引入来构建量化投资策略. 从历史数据中,用数学方法分析出难以直接观察到的规律再编程实现自动交易是当下量化投资策略研究的热点,比如深度学习,支持向量机等机器学习方法. 也可以运用数据挖掘、时间序列分析或者一些常规的统计分析方法来构造投资策略。投资策略的构建是量化投资的核心. 但无论是将一些投资经验加以量化并实现,还是从历史数据中发现投资规律,都需要搭建一个回测的平台来让一个投资策略在过去一段时间里面执行,并最终根据投资策略的执行结果来对一个策略进行评价,找出问题最终再加以改进.

二、量化投资研究中需要注意的问题

1.欠拟合与过拟合。欠拟合的模型没有充分反映两个序列之间关系. 原因在于欠拟合对数据的描述和挖掘能力不足. 过拟合的模型在用于对新的样本进行预测或描述时误差很大,模型泛化能力下降. 这两种情况都使模型没有很好得反映数据之间的关系,也就很难将其加以运用. 在实践中获得的数据往往是非常复杂的,不知道其关系的,也就使得对模型是否过拟合或欠拟合加以判断变得比较困难. 欠拟合在实践中是相对容易发现并解决的,因为一个欠拟合的模型往往不能较好地描述数据的特征. 解决的方法主要是尝试各种各样的数学模型,增强模型对数据的描述能力. 而过拟合则相对较难发现,因为往往过拟合的模型非常好地描述了数据的特征和信息. 解决的方法主要是将建立好的模型在新的数据样本中进行测试,检验其能否较好地描述新的数据样本的特征.

2.未来信息的规避。利用历史数据来模拟执行一个交易策略以判断该策略的优劣,不能忽视的是策略不能使用未来信息来产生交易信号. 当回测日期在2014年1月1日时,策略不能使用这个时间点之后的数据,比如2014年第一季度的财务数据. 因为往往当季的财务数据要到下一季度才会披露. 在实际交易中,这个时候是没有第一季度的财务数据作为投资参考的. 如果在对策略进行回测或优化的过程中使用了未来信息,会导致回测结果与实际不符,或者这个策略在实际中不能使用.

三、回测结果的评价指标

量化投资策略的主要评价指标有:年化收益率、、、夏普比率、收益波动率、信息比率、最大回撤以及换手率. 计算某些评价指标时,需要用到基准序列作为一个比较的对象,常用的基准序列有上证综合指数、沪深300等.

这些指标可以从收益、风险等方面来评价策略. 评价一个策略,不仅要看它收益如何,还要看它夏普比率、信息比率、最大回撤和换手率等风险指标. 一个好的交易策略理应能较好地控制投资风险。

四、利用MATLAB进行回测平台的搭建

面向回测过程编写回测平台。回测的过程就是利用历史数据来模拟执行量化交易策略的过程. 要模拟交易的过程并记录交易数据,总结分析交易过程. 回测的交易周期可以是一天、一周或一个月. 在一个投资周期中,回测过程是:将历史数据放入交易策略的框架之中,根据交易策略产生交易信号,根据交易信号进行调仓,最终根据调仓结果清算当前资产. 将常用的数据存储在一个变量中,如开盘价和收盘价等. 将这一变量称为Database,接下来的过程中,用到的历史数据都从这一个变量中获取.声明一个投资组合(Portfolio)变量用于储存历史仓位、现金流、总资产和收益率等等。

编写策略(Strategy)函数,将历史数据Database作为输入变量. Strategy根据历史数据以及自身内部相应的量化投资策略,返回一个记录交易信号的Signal,其中记录着每一个标的股票的买入卖出计划、计划交易价格和计划交易数量. 编写调仓(Transfer)函数,将Database、Portfolio和Signal作为输入变量. Transfer函数根据交易信号和历史数据调整投资组合中各标的股票的仓位. 并根据历史数据,对不能执行的交易信号予以取消,如涨跌停、现金不足等。

编写清算(ClearPortfolio)函数,将Portfolio作为输入变量. 清算函数根据Portfolio中的当前各股票的持仓量,计算当前Portfolio剩余的现金、总资产以及当日收益率等等。资产清算完毕,一个策略执行周期就结束了,进入下一执行周期. 回测结束后,根据Portfolio中现金、总资产和持仓情况来计算相应的评价指标。

存在的问题。上述过程基于面向过程的编程思想,在程序变得比较繁杂的时候开始出现效率下降,难以维护的情况. 当股票或其他相关数據结构或格式发生变化的时候,要对这一平台进行许多修改以适应新的数据类型. 此外,如果要加入一些新的模块,就需要对程序的很多地方做修改,比较繁琐。标的股票较多或回测周期较长使计算回测结果所需时间大大加长,不利于后续的研究。一个改进是利用面向对象的编程,将ClearPortfolio函数与Transfer函数结合起来成为一个新的类Portfolio下的一部分. 将历史数据作为一个类来实现。另一改进是优化相关的代码,用矢量化编程等技巧尽量减少循环或其他低效率的运行代码,提高运行效率. 还可以通过MATLAB与C++进行混合编程,利用C++来加速循环的计算.

参考文献:

[1]郑志勇 编著. 金融数量分析:基于MATLAB编程. 北京航空航天大学出版社. 2014.07.

[2]徐潇 李远 编著. MATLAB面向对象编程:从入门到设计模式. 北京航空航天大学出版社. 2015.01.

[3]李航 著. 统计学习方法. 清华大学出版社. 2012.03.

[4]杨博理 著. 中低频量化交易策略研发(上). 版权号:17—2015—A—20152385.

推荐访问:量化 搭建 概述 简单 投资