加载中…

加载中...

个人资料
faruto
faruto 新浪个人认证
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,143,192
  • 关注人气:2,115
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

《量化投资:以MATLAB为工具》连载(17)如何构建基于MATLAB的回测系统(上)

(2014-10-20 10:07:13)
标签:

matlab

quant

量化投资

交易系统

分类: 量化投资:以MATLAB为工具

《量化投资:以MATLAB为工具》连载(17)如何构建基于MATLAB的回测系统()

《量化投资:以MATLAB为工具》简介

         《量化投资:以MATLAB为工具》是由电子工业出版社(PHEI)下属旗舰级子公司——北京博文视点资讯有限公司出版的《量化投资与对冲基金丛书》之一,丛书主编为丁鹏博士,《量化投资:以MATLAB为工具》由李洋(faruto)、郑志勇(ArisZheng)编著,主要介绍MATLAB在量化投资中的具体应用。该书预计201410月上市,欢迎大家多多支持。在书籍上市之前,会在中国量化投资学会的各种网络平台进行系列连载介绍,方便读者提前一窥书籍概要。

 

 

《量化投资:以MATLAB为工具》连载(17)如何构建基于MATLAB的回测系统()

背景介绍

在量化投资中,定量投资模型的设计好坏无疑是成功的关键,单纯从数学角度来看,一个交易系统(交易模型)仅仅是一个从行情序列到资金曲线的映射:

f(ts, para) = E

其中f是一个交易系统,ts是某一个投资标的(股票、期货、期权、外汇等等)的行情时间序列,para是交易系统的参数组,E是资金曲线。如果f可以解析的表达出来,那么就可以使用泛函分析等数学工具,直接在理论层面来研究f的一些性质,包括其连续性、稳健性、对参数的敏感性等等一些性质,但事实上,往往实际投资中的交易系统大多数都没有显性解析表达式,只能通过数值回测给出该交易系统的表现,通过对资金曲线E的一些再处理,可以得到一些评价指标,比如年化收益率、夏普比率、最大回撤等等指标,通过这些指标,可以从一定角度来窥探这个交易系统的性能。本章的主要目的就是使用MATLAB来构建回测系统,对任意的交易系统进行回测。本章实现的回测平台主要针对的是期货市场的交易品种,对于股票、期权、外汇等交易标的暂未做深入讨论。

使用MATLAB可以更加精细化、自由化的测试交易模型,关于MATLAB进行回测的优劣与其他平台语言的对比这里不打算做过多说明,需要说明的是无论MATLAB还是其他平台语言,都仅仅是一个工具,工具的目的是帮助我们快速的实现模型进行测试,来检查某一模型的历史表现的好坏,但工具本身并不能帮我们赚钱,投资、量化投资的核心还是策略模型背后的交易逻辑。

 

回测平台实现细节思考

 

量化投资进行回测的目的是:尽可能真实地还原实际交易过程,进而检测策略的表现!

明确了回测的目的,这样做回测才有意义。回测平台的实现过程中可能会碰到一些细节问题,在介绍回测平台架构前,先在这里做一些相关细节问题的讨论和思考,下面的讨论会围绕回测的目的进行展开讨论,以期找到相应的解决方案。

(1)回测标的的选取

与股票数据不同,由于期货不同月份的合约会到期交割,所以相应的品种的数据并不连续,这就涉及到一个问题,在进行回测时选取什么回测标的?可以有很多种方法将相关品种的期货合约连接起来形成连续数据,但哪种才是比较合理的呢?

回到实际交易本身,对于单边趋势类策略大多数投资者都会在相关品种的主力合约上进行交易,对于其他类型策略(震荡类、对冲类)可能会有其他选择,这里单就单边趋势类策略而言。这里就有个问题,“主力合约”怎么定义?只要给出“主力合约”的定义,那么回测标的的选取就有了答案,那就用“主力连续合约”进行回测即可,这样就能真实的反应实际交易过程,主力连续合约的构造按照主力合约的定义给出即可,比如可以按照成交量*持仓量最大来定义主力合约:

 

假设有ABCD四个同一品种不同月份的期货合约,现把这几个不同月份的合约进行连接,设T为时间轴,在Ti天计算成交量*持仓量,该值为最大的合约为主力合约,但该换月过程不向后换月,只向前换月,即若某一合约K(属于ABCD中一个)在Tk天之前做过主力合约,在Tk天主力进行了换月,在Tk天之后的某一天又为K合约的成交量*持仓量为最大值,此时忽略K

 

上面仅仅是给出主力连续合约构造的方式之一,仅供参考。可能会有一些量化交易员使用某一品种的所有合约的加权平均的指数作为回测标的,或者采用在指数上触发信号,在主力合约上交易进行回测,这也是回测标的的选取方法之一。

(2)冲击成本的估计

冲击成本是回测中的未知量,其大小理论上与市场的深度和广度相关,最好的估计方式是需要积累大量的实际交易的实盘交易记录,进而可以估计出某一品种的实际冲击成本的大小。一般而言,流动性好的品种,使用1-2跳(跳:交易品种基本变动单位)作为冲击成本的估计,流动性不好的需要更大的冲击成本。

需要说明的是,冲击成本也并不一定对交易系统是不利的,这点要放开思路,见仁见智的看待,依据不同的交易思路和策略设计,可能会出现负冲击成本的情况。

(3)手续费的设置

手续费一般是固定的成本,为了严格一些可以将手续费设的大一些,比如设成交易所手续费的1.5-3倍,当然也没有必要将手续费设置的过大,因为所有的策略模型在手续费趋向于无穷大的时候都会崩溃掉,如果手续费设置的过大,会湮没策略本身的某些细节,更多关于策略对于手续费的敏感性,可以单独做敏感性压力测试。

(4)交易系统的评价

关于交易系统(策略)的好坏评价,全面地评价一个交易系统是一个很复杂的问题,这并不是用几个简单的指标就能很好描述的,有时候也可以考虑构建一个综合指标来考察交易系统的性能。

当然检验一个交易系统的最佳方式,就是“实战”,只有实盘才能更加本真的反应某一个策略在市场上的表现。

 

 

… …

… …

 

更多内容参见《量化投资:以MATLAB为工具》。

         该书预计201410月上市。

书籍交流论坛:MATLAB技术论坛读书频道《量化投资:以MATLAB为工具》专版,地址:http://www.matlabsky.com/forum-112-1.html

 

作者简介

李洋(faruto),中国量化投资学会专家委员会成员,MATLAB技术论坛(www.matlabsky.com)联合创始人,北京师范大学应用数学硕士,先后就职于私募、期货公司、保险公司,从事量化投资相关工作。十年MATLAB编程经验,对机器学习、量化投资等相关领域有深入研究,已出版《MATLAB神经网络30个案例分析》和《MATLAB神经网络43个案例分析》等书籍。

邮箱:farutoliyang@foxmail.com

微博:http://weibo.com/faruto

郑志勇(Ariszheng),中国量化投资学会专家委员会成员,方正富邦基金产品总监,北京理工大学运筹学与控制论硕士,先后就职于中国银河证券、银华基金、方正富邦基金,从事金融产品研究与设计工作。十余年MATLAB编程经验,专注于产品设计、量化投资等相关领域的研究,尤其对于各种结构化产品、分级基金产品有着深入的研究,已出版《运筹学与最优化MATLAB编程》和《金融数量分析:基于MATLAB编程》等书籍。

邮箱:ariszheng@gmail.com

微博:http://weibo.com/ariszheng

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有