Python重现创业板指数行情

目标:画创业板指数

最近有个奇怪的现象:大盘涨基金不涨,大盘跌基金更迭,有同事怀疑是不是指数有问题,所以我们就自己动手画一个指数。
这次选取创业板来画,因为股票数量少,比较适合学习。
可后来才发现这个指数有坑。浪费了1天时间的自我摸索,后来通过女神的帮助,才彻底搞清楚原委。


学习内容:

指数有一套标准的计算公式,深圳创业板的指数计算公式深交所官网公布有,还可以下载PDF和excel,告诉你成分股和权重,而且每半年优胜劣汰一次,进行一次调整,可能指数基金没有这么快调整过来,所以指数跟踪应该有偏离偏差。
网站地址如下:
下载成分股excel
指数计算公式
之前有个疑问解不开:价格按照公式折算能匹配官网数据,但是成交量死活和官网的数据合不上,无论是直接累加还是权重累加。后来经问SJS,才知道这里的成交量是整个创业板的成交量,也就是:算价格的时候,选取最优的100个成分股,算成交量的时候,又用的整个创业板股票的成交量,这明显不符合逻辑啊。
但目前创业板多个指数就是这么算的。一切还不是为了.。。。


效果:

自己画的效果如下:
在这里插入图片描述

深交所官网公布的数据如下:
在这里插入图片描述
价格跟深交所的行情能吻合。
同花顺行情网站公布成交量:
在这里插入图片描述
可以看到,成交量终于对上号了。打印的数据也能可深交所公布的分钟成交量对上。

成交量谜题终于解开。真的是KD。


代码部分:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from jqdatasdk import *

auth('*','*')    #这里用户名密码需要前往聚宽官网自行申请
is_auth = is_auth()
if is_auth == True:
    print("登录成功")
else:
    print("连接失败")
#print(__version__)

cyb_Cons = pd.read_excel('399006_cons.xlsx')    #获取创业板的成分股
cyb_ConsNow = cyb_Cons[cyb_Cons['日期']=='2020-12-31']    #获取最新的一期成分股
#print(len(cyb_ConsNow))
#print(cyb_ConsNow.head)
zqdmList = np.array(cyb_ConsNow['样本代码'].values)     #成分股代码
#print(zqdmList)
quanzhong = np.array(cyb_ConsNow['权重(%)'].values)   #权重
quanzhong=quanzhong.copy()/100
#print(quanzhong)

#昨天的收盘价,是今天指数的基准
yestedayCYB = get_price(security='399006.XSHE', start_date='2021-01-15 14:58:00', end_date='2021-01-15 14:58:00', frequency='minute',fq='pre', fields=['close','volume','money'])
print(yestedayCYB)

#基数--昨天的收盘价,是今天指数的基准
jishu = float(yestedayCYB['close'].values)
#voljisu =  int(yestedayCYB['volume'].values)
print('基数值为:' + str(jishu))

temp = pd.DataFrame()     #用来缓存计算变量
tempyes = pd.DataFrame()    #用来缓存昨天的计算变量
volumetemp = pd.DataFrame()     #用来缓存计算变量
volumeYesTemp = pd.DataFrame()     #用来缓存计算变量
moneyTemp = pd.DataFrame()     #用来缓存计算金额
#获取股票每分钟信息
for zqdm in zqdmList:
    #print(type(zqdm))
    df = get_price(security=str(zqdm)+'.XSHE', start_date='2021-01-18 09:30:00', end_date='2021-01-18 15:00:00', frequency='minute', fields=['open', 'close','money','volume'])
    dfyes = get_price(security=str(zqdm) + '.XSHE', start_date='2021-01-15 14:58:00', end_date='2021-01-15 14:58:00', frequency='minute', fields=['close','money','volume'])
    qz = cyb_ConsNow[cyb_ConsNow['样本代码']==zqdm]['权重(%)'].values   #权重
    #print(qz)
    #print(df['close']*qz)
    temp[zqdm] = df['close'] * qz / 100
    tempyes[zqdm]=dfyes['close']*qz/100
    volumetemp[zqdm] = df['volume']/100/10000   #万手
    moneyTemp[zqdm] = df['money']/ 100000000   #亿元

print(temp.head(2))
print(tempyes.head(1))
print(temp.sum(axis=1))
print(tempyes.sum(axis=1))
jintian = pd.DataFrame()
zuotian = pd.DataFrame()
jintian['jq'] = temp.sum(axis=1)
zuotian['jq'] = tempyes.sum(axis=1)
zs = jishu*jintian['jq']/zuotian['jq'].values
print(zs)

x=np.array(df.index)    #时间序列
xx=np.arange(0,len(x),1)  # X轴长度
#画图参数
fig = plt.figure()
ax1 = fig.add_subplot(211)
plt.rcParams['font.sans-serif']=['SimHei']  #解决中文乱码
plt.rcParams['axes.unicode_minus'] = False

ax1.set_title('行情')
ax1.plot(xx,zs,c='blue')
plt.xlabel('交易时间(分钟)')
plt.ylabel('成交价格(元)')
ax1.legend('成交价格')
plt.grid()

#plt.show()

#画成交量
dfall=get_all_securities(types='stock', date='2021-01-18')
print(dfall['display_name'].index)
dfcyb= dfall[dfall['display_name'].index>='300000.XSHG']     #只要创业板股票
dfcyb2 = dfcyb[dfcyb['display_name'].index<='309999.XSHG']   #只要创业板股票
#print(dfcyb2.index)
cyblist = np.array(dfcyb2.index)
#print(cyblist)
vol = pd.DataFrame()     #用来缓存计算金额
for cybzqdm in cyblist:

    dfcyb = get_price(security=cybzqdm, start_date='2021-01-18 09:30:00', end_date='2021-01-18 15:00:00',
                   frequency='minute', fields=['volume'])
    vol[cybzqdm[0:6]]=dfcyb['volume']


#print(vol.head())
volsum = pd.DataFrame()     #用来缓存计算金额
volsum['volume'] = vol.sum(axis=1)
print(volsum.head())
print(np.round(volsum['volume'].values/1000000,2))   #单位换算成万手,保留两位小数

ax2 = fig.add_subplot(212)
ax2.bar(xx,np.round(volsum['volume'].values/1000000,2),color='red',label='left')
ax2.set_ylabel('成交量(万手)')
plt.xlabel('交易时间(分钟)')
plt.grid()
ax2.legend('成交量')
#plt.subplots_adjust(left=0.01)
plt.show()

重点:数据的获取和筛选
1、 DataFrame和array的相互转换。
2、画图工具
3、 获取股票行情
4、折算股票成交量

猜你喜欢

转载自blog.csdn.net/weixin_43290383/article/details/112727428
今日推荐