当前位置:文档之家› 综合案例四基于上市公司股票信息及其衍生变量的金融数据分析

综合案例四基于上市公司股票信息及其衍生变量的金融数据分析

第十四讲综合案例四:基于上市公司股票信息及其衍生变量的金融数据分析14.1 策略基本思路14.2 获得股票基本信息及衍生变量数据14.3 数据可视化呈现14.4 自动生成Excel报告本章主要研究基于成交量变化的量化策略,该策略通过量化的手段将传统的投资理念数字化验证,分析成交量变化对于股价的影响。

策略基本逻辑如下:成交量的大幅涨跌可能会带来价格的大幅涨跌。

这是一个经验策略,当某只股票的当日成交量出现大幅上涨的时候,说明有很多人在关注这只股票,该股票属于活跃股,那么出现价格的大幅涨跌的可能性则较大,从历史交易经验上来看也的确如此。

然而这个策略的可靠性却比较难以通过量化的手段来进行评判:1.股价行情数据中一般会提供成交量却很少提供成交量涨跌幅;2.在真正实战中,到底是关注前10分钟的成交量涨跌幅还是前30分钟、前1个小时的涨跌幅都有待考量;3.影响股价的因素很多,成交量涨跌幅到底与股价涨跌幅有多大的相关性也需要研究。

本章就以股票前10分钟的成交量涨跌幅为例,通过量化的手段来观察成交量变化对当日股价涨跌幅的影响,最终目的是在Excel中生成如下的可视化图表并进行相关性分析。

这里还是利用7.1小节所介绍的Tushare库来调用股价基本数据。

要检测上一小节所提到的策略,所需要获得基本信息数据有:开盘价、收盘价、股价涨跌幅、前10分钟成交信息,所需要的衍生变量有前10分钟成交量的涨跌幅。

14.2.1 获得股票基本信息数据所以除了基本的日线行情数据外,我们还需要利用到分笔数据,也即每一笔的交易数据来获得10分钟时候的相关信息,所需要用的Tushare基本代码如下:14.2.1 获得股票基本信息数据(1)获取10分钟成交量信息首先来以万科A(股票代码:000002)为例演示下获取其2019-04-12的交易分笔信息,并将获取到的DataFrame赋值给df变量,代码如下:14.2.1 获得股票基本信息数据(1)获取10分钟成交量信息首先来以万科A(股票代码:000002)为例演示下获取其2019-04-12的交易分笔信息,并将获取到的DataFrame赋值给df变量,运行结果如下:14.2.1 获得股票基本信息数据(1)获取10分钟成交量信息这里获取的是万科当天每一笔的交易信息,这里只需要前10分钟的交易信息,也即9:40时刻前(股票通常9:30开盘)的成交量信息,所以下面通过pandas的相关知识来提取前10分钟的相关股票数据,代码如下:第两行代码打印输出结果如下:14.2.1 获得股票基本信息数据(1)获取10分钟成交量信息最后一行通过DataFrame数据筛选获得前10分钟的数据。

这里可以通过df_10.tail()函数来获取表格后5行,运行结果如下图所示,其中成交量那一栏的列名为volume,单位为手。

14.2.1 获得股票基本信息数据(1)获取10分钟成交量信息获得了前10分钟的分笔数据后,就可以通过下面一行代码获取前10分钟的成交量信息了:将vol打印输出结果如下,其前10分钟成交量为56603手,注意股票成交量的单位是手,一手是100股。

14.2.1 获得股票基本信息数据(2)获取多天的前10分钟成交信息及每日基本行情信息首先通过Tushare获得万科A从2019-02-01到2019-04-01的每日行情信息,代码如下:14.2.1 获得股票基本信息数据(2)获取多天的前10分钟成交信息及每日基本行情信息运行结果如下图所示,其中open为开盘价、high为最高价、close为收盘价、low为最低价、volume为成交量、price_change为价格变化(今日收盘价-昨日收盘价)、p_change为价格涨跌幅(price_change/昨日收盘价)、ma5为5日均线价格、v_ma5为5日均线成交量。

14.2.1 获得股票基本信息数据(2)获取多天的前10分钟成交信息及每日基本行情信息获得每日行情后,根据其日期索引获取各个日期的前10分钟交易数据,代码如下(1):14.2.1 获得股票基本信息数据(2)获取多天的前10分钟成交信息及每日基本行情信息获得每日行情后,根据其日期索引获取各个日期的前10分钟交易数据,代码如下(2):14.2.1 获得股票基本信息数据(2)获取多天的前10分钟成交信息及每日基本行情信息获得每日行情后,根据其日期索引获取各个日期的前10分钟交易数据,代码如下(3):14.2.1 获得股票基本信息数据(2)获取多天的前10分钟成交信息及每日基本行情信息获得每日行情后,根据其日期索引获取各个日期的前10分钟交易数据,代码如下(4):14.2.1 获得股票基本信息数据(2)获取多天的前10分钟成交信息及每日基本行情信息生成的stock_table如下图所示,这里的股价涨跌幅(%)为百分号内容,即4.39为4.39%的意思。

14.2.1 获得股票基本信息数据(2)获取多天的前10分钟成交信息及每日基本行情信息其中10分钟成交量这一列被默认为第一列了,如果想调整列的顺序,可以使用如下代码:此时的stock_table如下图所示:14.2.2 获得股票衍生变量数据本小节就来介绍一下成交量涨跌幅计算的两种计算公式,以及穿插着介绍下Tushare提供的股价涨跌幅数据以及5五日均线数据:ma5是如何计算出来的。

成交量涨跌幅的计算公式有两种,公式1计算方式如下所示,这里最后乘以100是为了以百分数的形式来展示涨跌幅。

公式2计算方式这是基于多日成交量的均值来计算,其公式如下:14.2.2 获得股票衍生变量数据这里将公式1和公式2的程序实现都讲解一下,以供比较和学习。

(1)通过公式1获得成交量涨跌幅,其代码如下:打印结果:14.2.2 获得股票衍生变量数据(1) 通过公式1获得成交量涨跌幅,其代码如下这里注意,因为是把10分钟成交量那一列往上偏移了一行,会导致最后一行的昨日10分钟成交量和成交量涨跌幅1(%)是缺失的,如下图所示:14.2.2 获得股票衍生变量数据(1) 通过公式1获得成交量涨跌幅,其代码如下有时在运行上面代码的时候,可能会弹出SettingWithCopyWarning的警告信息,警告不是报错,并不会影响程序的运行效果,所以如果不想看到该警告信息,可以在代码的最前面加上如下代码可以避免警告信息的出现。

14.2.2 获得股票衍生变量数据(1) 通过公式1获得成交量涨跌幅,其代码如下有时在运行上面代码的时候,可能会弹出SettingWithCopyWarning的警告信息,警告不是报错,并不会影响程序的运行效果,所以如果不想看到该警告信息,可以在代码的最前面加上如下代码可以避免警告信息的出现。

14.2.2 获得股票衍生变量数据(1)通过公式1获得成交量涨跌幅股价涨跌幅也是用同样方法获得的,只需要把10分钟成交量改成收盘价,昨日10分钟成交量改成昨日收盘价,然后用公式1计算即可,其效果和Tushare提供的股价涨跌幅是一样的,代码如下:14.2.2 获得股票衍生变量数据(2)通过公式2获得成交量涨跌幅,其代码如下:14.2.2 获得股票衍生变量数据(2)通过公式2获得成交量涨跌幅先通过sort.index()函数将日期从小到大排序,然后通过rolling(10).mean()可以获取10日均值数据,如果把“10”改为“5”则可以获取5日均值数据,运行之后stock_table如下图所示:14.2.2 获得股票衍生变量数据(2)通过公式2获得成交量涨跌幅注意:如果直接用stock_table['10分钟成交量'].rolling(10).mean()来获取10日均值数据,而不通过sort.index()先排序,会导致最近10天的数据缺失,如下图所示:14.2.2 获得股票衍生变量数据(2)通过公式2获得成交量涨跌幅因为Tushare导出来的数据是按从近往远时间顺序排序的,rolling(10).mean()是从下往上求均值的,而最近10天的数据量不足以支撑求10日平均,比如2019-04-01从下往上只有1个数据,没法求10日平均数据。

所以在求均值之前,需要先通过sort_index()函数将原来数据按照从远往近的时间顺序(升序排序)重新排序一下,然后再求均值。

此时最近10天的均值数据是有了,但最开始的10天的均值数据则会缺失,如下图所示:14.2.2 获得股票衍生变量数据(2)通过公式2获得成交量涨跌幅这里设置的min_periods=1为最小的求平均的数据量,也就是说,如果数据量即使只有1个,也满足求平均的数据量,可以用这1个数据量来求平均,如果有2个数,则用2个数求平均,如果有满足rolling(10)的数据量了则可以按照10日求平均。

这样最开始的10天就有数据了,如下图所示,其中2019-02-01因为只有一天的数据,所以其均值就是其本身。

14.2.2 获得股票衍生变量数据(2)通过公式2获得成交量涨跌幅补充知识点:其实Tushare提供的5日均线价格数据:ma5也是通过类似的方式获得的,只要将10分钟成交量换成收盘价即可,代码如下:14.2.3 通过相关性分析选取合适的衍生变量这里就可以采用第七章所讲的相关性分析知识点来分析变量之间的相关性,从而选取合适的衍生变量。

首先回顾一下皮尔逊相关系数的基本用法,其代码如下:它就能返回两个数值:相关系数r值和显著水平P值。

相关系数r值在[-1,1]之间,为正数则表示正相关,负数则表示负相关,绝对值越大相关性越高。

P值是显著性,与皮尔逊相关显著性检验有关,P<0.05时表示相关显著。

14.2.3 通过相关性分析选取合适的衍生变量(1)成交量涨跌幅1(%)和股价涨跌幅相关性分析将上一小节生成的衍生变量:成交量涨跌幅1(%)先和股价涨跌幅做相关性分析,代码如下:14.2.3 通过相关性分析选取合适的衍生变量(1)成交量涨跌幅1(%)和股价涨跌幅相关性分析注意点:1、因为我们关心的是涨跌幅的绝对值,所以这里通过abs()函数取绝对值2、上一小节也提到过,成交量涨跌幅1(%)在2019-02-01这一天是没有数据的,所以得通过[:-1]的方式来选取除了表格最后一行的数据。

其中[:-1]就是表示从第一个元素选取到倒数第一个元素,因为切片左闭右开的特性,最后一个元素取不到,如果想从第一个元素取到倒数第十个元素,把-1改成-10即可,最后运行结果如下所示:14.2.3 通过相关性分析选取合适的衍生变量(2) 成交量涨跌幅2(%)和股价涨跌幅相关性分析成交量涨跌幅2(%)和股价涨跌幅做相关性分析,代码如下:14.2.3 通过相关性分析选取合适的衍生变量(2) 成交量涨跌幅2(%)和股价涨跌幅相关性分析因为上一小节通过rolling()函数取10日均值的时候,设置了min_periods=1,最后缺少的10行数据被自动补上了,所以这里不需要加[:-10]来切片筛选,运行结果如下:其P值为0.009,小于0.05,也就是说这两个变量的显著相关,相关系数r值为0.42,也大于成交量涨跌幅1(%)和股价涨跌幅的相关性,所以说通过如下所示的公式2产生的衍生变量非常有参考价值,在之后的使用中我们也主要采用该衍生变量。

相关主题