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值更大,在牛市中,如果自己不具备选股能力,最好的办法就是选择高价股,往往会给你超额市场收益