读书:赵志强《Python量化投资:技术、模型与策略》

对于量化投资,Pythoner 学习流程一般可以分为如下六个部分。1)了解基础语法和数据结构。2)掌握Pandas的使用基础并进阶。3)掌握统计理论及金融学术理论。4)掌握金融量化实践、策略研究理论。5)学习回测平台开发。6)学习平台开发。

chp1 简介

广义,凡是借助于数学模型和计算机实现的投资方法都可以称为量化投资。

国内比较常见的量化投资方法包括股票多因子策略(阿尔法)、期货CTA策略、套利策略和高频交易策略等

量化投资策略的最大特点是其具有一套基于数据的完整交易规则。

量化投资的优势可以总结为三个词:客观性、大数据、响应快。量化投资一般通过回测来证实或者证伪策略的历史有效性;在研究或者决策中,通常会引入大量的数据来进行分析。;用计算机进行自动分析,所以分析和响应速度都十分迅速,一般能达到秒级,高频交易甚至是以微秒为单位的。

夏普比率是一种衡量策略表现是否优秀的常用指标,夏普值越高表示策略越优秀。

投资不是“优化”问题,投资是“预测”问题,是要预测市场的下一步应该怎么走。

AI在金融投资领域最大的问题是,可用的样本数据极其有限,也无法大量生成。股市有多少历史数据,就有多少样本数据,但也只有这么多。极其有限的样本数据,加上极其庞大的特征维度,是AI在金融预测建模上举步维艰的根本原因。众所周知的是,训练数据是AI的基本养料,数据有限,就会导致模型很难得到大幅度的提升。就那么多有效的因子,大家反复挖掘,失效的速度也越来越快。

在数据分析领域(包括量化投资),编程语言具有两大作用,一个是科学计算、统计等算法层面,主要用于业务的相关研究;另一个是系统应用开发,主要用来搭建基础IT设施,比如数据库、交易平台等。

python是坠吼滴

chp2 平台与工具

python 3.x ;Anaconda;IDE()

chp3 Python金融分析常用库介绍

NumPy(Numerical Python的简称)是高性能科学计算和数据分析的基础包

SciPy 是基于NumPy的,提供了更多的科学计算功能,比如线性代数、优化、积分、插值、信号处理等。

Pandas具有NumPy的ndarray所不具有的很多功能,比如集成时间序列、按轴对齐数据、处理缺失数据等常用功能

StatsModels是Python的统计建模和计量经济学工具包,包括一些描述统计、统计模型估计和推断。一般来讲,StatsModels能够很好地满足各类研究人员的统计计算需求。

DataFrame是一个表格型的数据结构

对于DataFrame数据类型,可以使用[]运算符来进行选取,这也是最符合习惯的。但是,对于工业代码,推荐使用loc、iloc等方法。因为这些方法是经过优化的,拥有更好的性能。

chp4 可视化分析

Python的可视化分析最底层的库是Matplotlib

Pandas 简单的可视化

seaborn 统计可视化库

本质都是调用 Matplotlib

散点图是最常用的探索两个数据之间相关关系的可视化图形

直方图主要用于研究数据的频率分布

Matplotlib和seaborn的中文乱码问题的解决方案。第一种是在画图的时候指定字体,第二种是修改配置文件

seaborn已经封装好了很多功能,在进行可视化分析时,优先考虑使用seaborn

javascript 中的 highcharts可以绘制很多动态的可视化图形,进行数据可视化研究非常方便。https://www.highcharts.com/stock/demo/intraday-candlestick

python 调用highcharts :https://github.com/kyper-data/python-highcharts/blob/master/examples/highstock/candlestick-and-volume.py

chp5 统计基础

以下都是numpy库内函数

rand和random_sample都是均匀分布(uniform distribution)的随机数生成函数。rand_sample传入一个n维的元组元素作为参数

randn 和 standard_normal是正态分布的随机数生成函数

randint和random_integers是均匀分布的整数生成函数

shuffle可以随机打乱一个数组,并且改变此数组本身的排列。

Permutation用于返回一个打乱后的数组值,但是并不会改变传入的参数数组本身。

N次伯努利试验的结果分布即为二项分布。使用binomial(1,p)即为一次二项分布。使用binomial(1,p,n)即表示生成n维的二项分布数组,也就是伯努利分布。

统计量,就是利用数据的函数变化,从某种维度来反映全体数据集的特征的一种函数。

mean函数可用于计算数组的平均值

median函数可用于计算数组的中位数

std函数用于计算数组的标准差

var函数用于计算数组的方差

频率分布直方图其实是对一个变量的分布密度(分布)函数进行近似估计的一个手段。

np.histogram可以用来计算一位数组的直方图数据

SciPy包含了大量的处理连续随机变量的函数,每种函数都位于与其对应的分布类中。每个类都有对应的方法来生成随机数,从而计算PDF、CDF,使用MLE进行参数估计,以及矩估计等。

回归分析是通过建立模型来研究变量之间的相互关系并进行模型预测的一种有效工具。

案例:以平安银行的月度收益率为例来了解某只股票的风险回报率是否与大盘指数基金风险回报率有关,且相关度有多高?

思考的问题是,如果大盘涨1个点,那么平安银行股票统计概率上会上涨多少点?

假定如下模型:银行月度收益率=α+β*深证成指月度收益率+ε

即平安银行月度收益率与深证成指月度收益率呈线性相关,并且受随机扰动项影响

这又带来了新的问题。这个结论可靠度有多高?这个系数会不会浮动?从历史数据来看,这个浮动区间应该是多少?

能否利用数据来拒绝这一假设。这一类问题,在统计学上统称为假设检验(Hypothesis Testing),为了解决这一问题,需要使用的手段被称为统计推断(Statistical Inference)。

当我们拒绝这个正确的假设时,我们犯的错误,称为第一类错误(Type I Error)

即使假设是错误的,我们也会接受这个假设,这类错误称为第二类错误(Type II Error)

拒绝假设的概率函数称为功效函数(Power Function)。而由于我们无法同时满足最小化两类错误,因此必须要寻找到一个平衡点,以控制更严重的错误,并适当牺牲犯不严重错误的概率。哪一类错误更为严重是根据实际问题来确定的。

常用的设计检测框架的模式是,控制第一类错误的发生概率,并且调节假设,使得发生第一类错误更加严重,这个严重度会得到统计学者的控制。

chp6 数据预处理和初步探索

收集到初步的样本数据之后,接下来需要考虑的几个问题是:样本数据的质量是否有问题,如果有问题,应该怎么处理?样本数据是否出现了意外的情况?样本数据包含哪些基本的统计特征,有没有明显的规律?为了便于后续的深入分析和建模,我们需要对数据进行哪些处理?

数据清理:原始数据的可能问题,数据缺失、噪声或者离群点、数据不一致

中心趋势度量主要包括均值、中位数、众数

数据散布或者发散的度量。这些度量包括方差、极差、分位数等。

方差和标准差是最常见的数据散布度量,它们可用于指出数据分布的散布程序。低标准差意味着数据趋向于非常靠近均值,而高标准差则表示数据散布在一个大的范围中

极差是数据中最大值和最小值的差值,数值X的N个样本x1,x2,…,xN的极差可以记作max(X)-min(X)。

挑选某些数据点,这些数据点刚好可以将数据划分成大小相等的集合,这些数据点称为分位数

直方图是以一种图形方法来概括给定数值X的分布情况的图示。

散点图(scatter plot)是确定两个数值变量X、Y之间看上去是否存在联系,以及具有怎样的相关模式的最有效的图形方法之一

五数概括由中位数、两个四分数、最小、最大值组成

chp7 Pandas进阶与实战

可以将多重索引对象看成是一个由元组(tuple)元素组成的数组,其中,每一个元组对象都是唯一的。MultiIndex既可以由嵌套数组创建(使用MultiIndex.from_arrays),也可以由元组组成的数组创建(使用MultiIndex.from_tuples),或者指定每个维度的索引值,自动循环生成索引(使用MultiIndex.from_product)

chp8 金融基础概念

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注