前言

“工欲善其事,必先利其器。”

有人说钢琴演奏是一门艺术,钢琴家用指尖将音符转换为美妙旋律来传递思想感情,与听众交流,但不要忘记这一切是建立在炉火纯青的演奏技术上的,所以钢琴演奏首先是一门技术。量化投资亦是如此,对于市场,每个人都有自己独到的见解、投资理念甚至具体的策略,但想把这些传递出来,则需要足够的编程技巧。

本书侧重的是MATLAB编程能力。编程能力可分为两个层次,一是能写出策略,二是写出高效策略。第一个层次需要掌握一门语言的基本语法和函数功能等,第二个层次则需要较多的知识储备与实际经验积累。希望读者通过学习本书至少熟练达到第一个层次以上,能够用MATLAB语言轻松表达自己的投资逻辑。本书并不侧重于揭示市场的运作原理或阐述模型和策略构建的合理性,因为策略本身的语言载体并不局限于MATLAB。

本书实战篇包括了4个经典投资策略。在12.1节讨论了一种最简单的利用市场失效的策略——均线系统,当然失效特例还有很多,也不仅局限于技术指标。市场有效理论将市场状态分为弱式、半强式和强式有效当然还有无效,实际上市场总是在这四种状态中切换而不会永远停留在一个状态,不同市场状态下有合适的应对策略且通过分形指标可捕捉市场状态变化进而做策略择时;在12.2节介绍了市值这个估值因子。这个因子为何有效以及股票投资中涉及的其他因子、择时、中性等概念,都是值得细致论述的重要知识点;在13.1节中展示了一个期货统计套利的例子——豆粕与菜粕的价差套利,这里想强调的是量化投资不仅是要寻找数字上的规律,更要理解数字背后的经济学原理;在13.2节中讲述了著名的海龟交易法则,同时也介绍了使用投资组合来分散风险的概念。

“授人以鱼,不如授人以渔。”

本书尽量选取与量化投资相关的MATLAB功能模块加以介绍,避免大而全地陈述或生涩地讲解MATLAB各个函数的功能,取而代之的是大量的简单例子,而这些例子可能是读者在做量化投资时遇到的真正需求。建议读者动手复写一遍例子的同时仔细阅读帮助文档中函数的解释以达到熟练应用的目的。为了让读者更好地再现书中例题,数据源限制在了MATLAB自带数据、Tushare开源数据和新浪网页数据。这些数据源会实时更新,读者在复写的时候由于新数据的加入可能会得到与书中不同的结果。

本书也无意将相关的数学、金融原理进行推导或详细阐述,如本书在量化投资模型篇中并未阐述模型的原理、公式推导等过程。

1.读者

本书适合具备数学、金融、计算机基础及一定编程经验的专业人员阅读,也可作为相关专业院校本科高年级、研究生或教师的教学、参考用书。

2.增值服务及资源下载

本书受MATLAB中文论坛(www.ilovematlab.cn)鼎力支持,读者可以登录网址http://www.ilovematlab.cn/forum-269-1.html与作者进行在线交流,或者登录网址http://www.ilovematlab.cn/thread-550784-1-1.html下载本书相关的程序源代码。

读者也可以关注机械工业出版社计算机分社官方微信订阅号“IT有得聊”,回复60417来下载相关代码或留言,您的反馈会帮助作者更好地改进书籍。同时作者会尽可能提供更多有用信息,以帮助读者提高量化技能。如因Tushare和新浪的数据提取方式改变而导致书中代码失效,作者会及时修正代码。

3.文字格式

代码及其输出结果以灰色底纹显示。

>>代码

代码输出

function OUT=example(IN)

OUT=IN;

4.MATLAB版本

如无特殊说明,本书所使用环境为Windows 7操作系统下的MATLAB。

>>disp(version)

8.6.0.267246(R2015b)

书中提到的“matlabroot”为MATLAB安装目录,Windows系统默认为“C:\Program Files\MATLAB\R2015b”,而Linux系统默认为“/usr/local/Matlab/R2015b”。

读者需注意Windows系统下的代码有时并不能直接移植到Linux系统的MATLAB运行,比如Windows下的MATLAB支持使用‘\’与‘/’符号表示路径,而Linux下仅支持使用‘/’表示路径。

>>loadfindemos\disney.mat%Windows下可运行

>>loadfindemos/disney.mat%Windows和Linux下均可运行

还需注意的是Windows 7系统中的文件名不区分大小写,而Linux系统需要区分。所以,读者在有不同操作系统下代码移植需求的时候要合理规划工程中的文件名,以避免不必要的麻烦。

MATLAB虽然功能强大但为付费软件,如果读者经济能力有限可以考虑使用开源项目软件Octave。Octave与MATLAB语法格式基本相同,但部分工具箱或者函数功能可能未实现且性能表现亦可能略逊于MATLAB,详细信息可参阅http://www.gnu.org/software/octave/

5.熟悉界面

如下图所示,MATLAB软件界面中的【应用程序】包含了诸多应用工具,如第11章的报告生成器;右上角【搜索文档】可以输入关键字检索MATLAB软件手册;【命令行窗口】用于指令的输入与执行;【工作区】用于存储变量,双击变量可查看变量的值与属性等信息,亦可修改此信息;【当前文件夹】显示当前文件夹下的所有文件目录结构;【命令历史记录】中可用<Ctrl+F>快捷键查找使用过的指令,双击选定指令可直接运行。

MATLAB软件界面

6.【命令行窗口】常用快捷键

<Tab> 自动补全指令

<Shift+Enter> 换行并执行所有指令

<Ctrl+C> 中断当前正在运行的指令

<↑>、<↓> 切换到之前运行过的指令,可按多次直到找到需要的指令

<Ctrl+S> 将工作区全部变量存储为“.mat”文件

<Ctrl+F> 弹出对话框,可用于寻找文件