判断指数是否具有投资价值,我们会用到估值百分位(《估值百分位》),通过当前市盈率或者市净率的位置,可以获得当前指数估值的高低从而获得指数的便宜程度,从而进行投资。
同时投资者的投资情绪,前面也介绍过,可以通过全市场成交量进行量化(《A股全市场成交量计算》),投资情绪也是一个指导投资很重要的指标,当市场处于大熊市下跌到低点时,成交量往往很小,相反,当市场处于大牛市,市场持续上涨,成交量会越来越大。
那估值百分位和成交量两者之间有没有什么关系,如果有,是否可以用来进行量化投资,下面就来分析下这个过程。
首先来看看全市场估值和全市场成交量的关系。下面是全市场从2000年到现在的估值走势。
通过估值走势可以计算出估值百分位的变化,下面是截取以来的估值数据计算出来的估值百分位情况。
可以看出在年底到初和年底到初两个时间段全市场是处于非常低估的阶段,而在估值达到了历史高位。但这和市场的成交量有没有什么联系呢?先看看下面的全市场成交量从以来的数据。
从时间上来看也能明显的看出在年底到初和年底到初两个时间段全市场成交量是很低的,同时在估值达到了历史高位的时候成交量非常高,那有没有办法把两者的关系结合在一起来看呢?下面就来介绍全市场联合指标,它就是结合了估值百分位和成交量的一个非常重要的投资指标。
接下来把全市场估值百分位作为纵坐标,而全市场成交量作为横坐标,两者画成散点图如下:
图上有几个明显的特征
1)区域特征
估值百分位低的情况下成交量也很低,所形成的点集聚在左下角,反过来,当估值百分位高的时候成交量也高,点分布在右上角。而中间的过度区域(图中偏左部分)则是估值处在中间区域同时成交量也处在中间区域。
看起来左下角点的密度是最高的,逐渐朝右上方扩散的同时密度在逐步变小,这个过程说明全市场处在中等偏低估的区间是最多的,高估区间是非常少的。也说明了A股是一个熊长牛短的过程。
2)分布特征
图中右下角的整个区域是没有任何数据点的,说明在估值偏低和估值低估区域是不可能有大成交量的,也说明估值的上升是因为成交量放大导致指数上涨所引起的。左上角的的区域也基本没有数据分布,也同样说明在高估值的氛围下成交量很难出现低成交量。
可以拟合整个分布得到上面图中一条红色的曲线,估值百分位和成交量是分布在它的左右两边。
通过上面的分析其实就可以得到一个很重要的信息,越靠近左下角的位置市场越低估市场情绪越低,这个时候往往是很好的买入建仓机会,而越靠近右上角市场越高估市场情绪越高,这种情况下是很危险的区间,尽量卖出保持空仓状态。
所以从左下角到右上角是一个买入,持有,然后逐渐过度到卖出的过程,通过量化目前所处的位置就能起到锚定投资的作用。所以可以结合下面的数据图形来分析当前的市场情况进行投资,这里把这种方式称为联合投资指标。
图中红色的点就是当前市场所处的位置,通过这个指标我们很清楚的知道目前市场处于哪个阶段,然后再结合各个指数的估值来进行投资。
源码
#源码中用到的indexType文件下的指数数据.csv请参看《基于Python的指数基金量化投资——指数包含的个股数据获取》
import pandas as pdimport matplotlib.pyplot as pltimport numpy as npimport math as mathimport baostock as bstime_end = -12-23print(time_end)# 登陆系统lg = bs.login()# 获取货币供应量rs = bs.query_money_supply_data_month(start_date="-09", end_date=time_end[0:len(time_end)-3])# 打印结果集data_list = []while (rs.error_code == ) & rs.next():# 获取一条记录,将记录合并在一起data_list.append(rs.get_row_data())result = pd.DataFrame(data_list, columns=rs.fields)# 结果集输出到csv文件result.to_csv("./exportfile/transactionOfMarket/m2.csv", encoding="gbk", index=False)name_index_list = [sh.000001,sz.399107]for i in range(len(name_index_list)):rs = bs.query_history_k_data_plus(name_index_list[i