利用tushare分析A股市场高价股占比与中长期趋势

tushareID : 467792

1.高价股占比 假设:股价大于100元的股票为高价股

#导入相关库

import tushare as ts import pandas as pd #初始化tushare接口 
pro = ts.pro_api() #获取股票市场2022/03/03所有股票的开盘价,收盘价 
stockData = pro.daily(trade_date='20220303', fields='ts_code,trade_date,open,close') 
#筛选出股票价格大于100元的股票 
highStock = stockData[stockData["close"]>100] 
#计算高价股票占整个A股市场的比例 scale = len(highStock)/len(stockData) scale

由计算所得数据可知,股票价格超过100元的股票仅占A股市场所有股票的3.8% 2.A股市场股票价格分布 由上面的分析可知,A股市场96.2%的股票价格均小于100元,因此绘制出该部分的股票价格频率分布直方图即可大概了解A股市场股票价格分布

# 导入所需的python包

from pylab import mpl import numpy as np import matplotlib.pyplot as plt mpl.rcParams['font.sans-serif'] = ['SimHei'] 
mpl.rcParams['axes.unicode_minus'] = False plt.hist(stockData["close"],bins=list(range(1,100))) 
plt.title("A股市场0-100元股票价格频率分布直方图") 
plt.xlabel("股票价格") 
plt.ylabel("股票数量") 
plt.show() 

该图像的基本形态类似卡方分布

3.A股市场高价股中长期趋势 3.A股市场高价股中长期趋势h趋势,因此,选取A股市场在2020/02/20股票价格大于100元的股票作为观测股,观察其在2020/02/20 --- 2021/02/20的股票价格表现 #获取A股市场2020/02/20股票数据
 

preStockData = pro.daily(trade_date='20200220', fields='ts_code,trade_date,open,close')
 #筛选出当日价格大于100元的股票代码 
preStockDataCode = list(preStockData[preStockData["close"]>100]["ts_code"])

#tushare一次只能获取5000条数据,而高价股有71只股票,一年200多个交易日,因此一次只能获取20个公司的股票数据 
preStockDataCode1 = ",".join(preStockDataCode[:20]) preStockPriceList1 = pro.daily(ts_code=preStockDataCode1, start_date='20200220',end_date='20210220',fields='ts_code,trade_date,open,close') 
preStockDataCode2 = ",".join(preStockDataCode[20:40]) preStockPriceList2 = pro.daily(ts_code=preStockDataCode2, start_date='20200220', 

end_date='20210220',fields='ts_code,trade_date,open,close') preStockDataCode3 = ",".join(preStockDataCode[40:60]) preStockPriceList3 = pro.daily(ts_code=preStockDataCode3, start_date='20200220', end_date='20210220',fields='ts_code,trade_date,open,close') 

preStockDataCode4 = ",".join(preStockDataCode[60:]) preStockPriceList4 = pro.daily(ts_code=preStockDataCode4, start_date='20200220', end_date='20210220',fields='ts_code,trade_date,open,close') #合并数据 highPriceData = pd.concat([preStockPriceList1,preStockPriceList2,preStockPriceList3,preStockPriceList4])

3.2 生成高价股指数 通过筛选出股票市场2020年2月20日股票价格在100元以上的股票,以其收盘价构建高价股指数,计算公式 [公式]

#计算高价股指数 
highPriceData = highPriceData.groupby("trade_date")["close"].sum()/5 
#计算高价股指数的5日移动平均数 
highPriceData = highPriceData.rolling (window=5).mean () 
#获取上证指数在2020/02/20 -- 2021/02/20的数据
 indexData = pro.index_daily(ts_code='000001.SH', start_date='20200220', end_date='20210220',fields='ts_code,trade_date,open,close') #由于获取的数据时间是倒转的,此步为反转数据 
indexData = indexData[::-1] 
#计算上证指数的5日移动平均线 
indexData = indexData.rolling (window=5).mean () 

3.3 绘制上证指数和高价股指数的移动平均线

import matplotlib.pyplot as plt plt.figure() 

plt.plot(list(highPriceData.index),list(highPriceData),label="highPriceStock") 

plt.plot(list(highPriceData.index),list(indexData["close"]),label="SSE") 

plt.xticks(list(highPriceData.index)[::30],rotation=30) plt.legend(loc=0,fontsize=13) 

plt.show()

3.4计算高价股指数的beta值 [公式] import numpy as np #由于beta是利用收益率进行计算的,因此数据需要回滚到计算5日移动均线之前,并且指数的计算也没有乘0.2

highPriceData = highPriceData.pct_change() indexData = indexData["close"].pct_change() 
beta = np.cov(list(highPriceData)[1:],list(indexData)[1:])[1][0]/np.var(list(indexData[1:])) beta

计算出来的beta值如图所示,大约为1.25。

3.5 结论 1.A股市场股票价格的分布近似为卡方分布 2.高价股股票价格走势与市场指数高度相关,相关系数为0.76 3.高价股的beta值更大,在牛市中,如果自己不具备选股能力,最好的办法就是选择高价股,往往会给你超额市场收益

你可能感兴趣的:(python)