资 源 简 介
量化投资以Python为工具(高清)2017年2月出版序言过去十年,一股“量化投资”的热潮在中国悄然掀起。最近这两年,投资人对量化的关注更是到达了前所未有的地步。除了业界到处寻找量化团队以外,各种量化基金如雨后春笋般出现,各个大学校园也开始举办一场又一场的量化讲座、研讨会等。量化投资一时蔚为风行,产官学共襄盛举。这么受人瞩目的议题,到底它的内涵是什么呢?为了了解量化投资这个概念,我们先回顾一下投资分析与决策过程。在投资分析与实战中,虽然个中滋味如人饮水,个中细节言难尽,但“投资”大致上会有如下几个阶段:首先,投资人利用各种工具与分析方法,建构模型(系统)来验证买卖标的、时点、价位等有效性;第二阶段则筛选经过分析与验证得到的结论,实际应用于交易;一个严谨的投资人,通常还会有第三阶段,即在实际投资的过程中,不断地修正与完善自已的模型(系统)。在资讯工具不发达的年代,这些过程往往以质化为主。例如,基金经理人会研究上市公司财务报表,拜访公司高层,以经验判断技术指标的趋势与形态,做出投资的买卖决策。这种做法带有很大的主观性,因此又被称为“主观交易”。主观交易的流弊,在于决策基础多源于“大胆假设”而缺乏科学方法“小心求证”的过程。更甚者,行为金融学指出,投资人的行为往往易受各种心理认知谬误的影响而伤害投资绩效。除此之外,在瞬息万变的金融市场中,主观交易者若要处变不惊地坚守操作纪律,同时眼明手快地捕捉稍纵即逝的机会,也常有“力不从心”之叹。相较于主观交易所遭遇的问题,量化投资则在上述投资的各个阶段,利用数学、统计计算机等分析工具来建立模型,据以客观地分析数据,按事先设定好的投资逻辑来进行投资决策,在理想状况下自动化执行下单。正因为如此,量化投资拥有可验证性、纪律性与即时性等许多主观交易不可企及的优势。若再善用计算机技术,量化交易者可以处理的资讯量更让主观交易者望尘莫及。如此说来,采用量化技术岂非在投资上立于不败之地?读者只要稍加思考即可发现,量化投资的模型很容易因建模者的能力不同而良莠不齐此外,绝大多数模型的核心思想在于“以史为鉴”;在对历史数据依赖度高的前提下,一旦遇到新兴的金融市场或历史不曾出现的事件,量化投资者也只能徒呼负负。既然主观交易有诸多限制,量化交易又并非万能,那么,对投资绩效念兹在兹的投资者,究竟该何去何从呢?我们要提醒读者的是,编程语言、统计、金融、技术指标等量化投资常用的知识只是工具,它们就像武侠小说中的宝剑与武功秘籍,虽然很重要,却不是笑傲江湖的保证。宝剑锋从磨砺出,只有勤练武艺,在实战中积累经验,才能审时度势,百战不殆。本书旨在对量化投资做广泛与初步的介绍,希望能引领读者进入这个引人入胜的学术与实务领域。囿于笔者的学养见识,书中内容或有疏漏谬误之处,尚祈先进专家能不吝指正。最后,谨以此书表达对热血投资大众的献曝之忱。若读者需要书中的习题解答、代码、数据、勘误补充及量化相关资讯,可发邮件至ser-vice@ baoquan con索取,来信请在邮件标题中写明书名:《量化投资:以 Python为工具》。目录第1部分 Python入门第1章 Python简介与安装使用1.1 Python概述12 Python的安装121下载安装 Python执行文件1.22下载安装 Anaconda1223346712.3多种 Python版本并存13 Python的简单使用1.4交互对话环境 IPython141 IPython的安装14.2 IPython的使用14.3 IPython功能介绍890第2章 Python代码的编写与执行21创建 Python脚本文件2.1.1记事本212 Python默认的IDLE环境15213专门的程序编辑器22执行py文件1722.1IDLE环境自动执行17222在控制台cmd中执行22.3在 Anaconda Prompt中执行1923 Python编程小技巧20231 Python行23.2 Python缩进21第3章 Python对象类型初探2331 Python对象2332变量命名规则2433数值类型253.3.1整数.2533.2浮点数26333布尔类型26334复数2734字符串2835列表293.6可变与不可变37元组3238字典333.9集合33第4章 Python集成开发环境: Spyder介绍364.1代码编辑器374,2代码执行 Console394.3变量查看与编辑404.4当前工作路径与文件管理4145帮助文档与在线帮助4246其他功能43第5章 Python运算符与使用445.1常用运算符445.1.1算术运算符455.1.2赋值运算符465.1.3比较运算符475.1.4逻辑运算符485.1.5身份运算符495.1.6成员运算符5151.7运算符的优先级5252具有运算功能的内置函数52第6章 Python常用语句556.1赋值语句556.1.1赋值含义与简单赋值556.1.2多重赋值57VI6.1.3多元赋值586.1.4增强赋值5862条件语句596.3循环语句606.3.1for循环606.32 while循环616.33嵌套循环626.34 break、 continue等语句62第7章函数667.1函数的定义与调用72函数的参数687.3匿名函数717.4作用域72第8章面向对象7581类82封装7783继承( Inheritance)第9章 Python标准库与数据操作829.1模块、包和库829.1.1模块829.1.2包8491.3库8592 Python标准库介绍859.3 Python内置数据类型与操作919.3.1序列类型数据操作919.31.1lis类型与操作919.312 tuple类型与操作95931.3 range类型与操作9.31.4字符串操作989.32字典类型操作1039.3.3集合操作106第10章常用第三方库: Numpy库与多维数组11110.1 NumPy库.111102创建数组10.3数组元素索引与切片104数组运算118第11章常用第三方库: Pandas与数据处理12011.1 Series类型数据12011.1.1 Series对象的创建1201112 Series对象的元素提取与切片12211.1.2.1调用方法提取元素1221.1.22利用位置或标签提取元素与切片12311.1.3时间序列1241.2 DataFrame类型数据1281121创建 DataFrame对象1281122查看 DataFrame对象130112.3 DataFrame对象的索引与切片.13111.2.4 DataFrame的操作1351125 DataFrame的运算..13911.3数据规整化14211.3.1缺失值的处理14211.3.1.1缺失值的判断.142113.12选出不是缺失值的数据14311.3.2缺失值的填充14311.3.3缺失值的选择删除.1451134删除重复数据146第12章常用第三方库: Matplotlib库与数据可视化149121 Matplotlib简介...14912.2修改图像属性1521221坐标,.152122.1.1更改坐标轴范围.15212.2.12设定坐标标签与显示角度1531222添加文本1551222.1添加标题155VIll12222中文显示问题157122.23设定坐标轴标签15912224增加图形背景grid160122.2.5增加图例161122.3多种线条属性1621223.1线条的类型16212232图形的颜色1631223.3点的形状类型16412234线条宽度166123常见图形的绘制..167123.1柱状图( Bar charts)1671232直方图170123.3饼图17212.3.4箱线图172124 Figure、Axes对象与多图绘制1731241 Figure、Axes对象.1741242多图绘制..1761242.1多个子图绘制17612422一个图中多条曲线绘制.,178第2部分统计学基础180第13章描述性统计18113.1数据类型182132图表1821321频数分布表1821322直方图18313.3数据的位置18413.4数据的离散度186第14章随机变量简介190141概率与概率分布.19014.1.1离散型随机变量19014.1.2连续型随机变量192142期望值与方差.,193143二项分布194144正态分布19714.5其他连续分布19914.5.1卡方分布14.5.2t分布1991453F分布20014.6变量的关系20214.6.1联合概率分布20214.6.2变量的独立性20314.63变量的相关性20314.6.4上证综指与深证综指的相关性分析205第15章推断统计20815.1参数估计,,,20815.1.1点估计209151.2区间估计152案例分析212153假设检验21315.3.1两类错误.21415.32显著性水平与p值215153.3确定小概率事件154t检验216154,1单样本t检验..2161542独立样本t检验21715.4.3配对样本t统计量的构造..218第16章方差分析221161方差分析之思想221162方差分析之原理.2221621离差平方和.223622自由度224162.3显著性检验..,22516.3方差分析之 Python实现.2261631单因素方差分析2271632多因素方差分析228