import jqdatasdk
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
SW_ZY_num= [801010, 801020, 801030, 801040, 801050, 801080, 801110, 801120,
801130, 801140, 801150, 801160, 801170, 801180, 801200, 801210,
801230, 801710, 801720, 801730, 801740, 801750, 801760, 801770,
801780, 801790, 801880, 801890]
SW_CN=['农林牧渔I', '采掘I', '化工I', '钢铁I', '有色金属I', '电子I', '家用电器I', '食品饮料I',
'纺织服装I', '轻工制造I', '医药生物I', '公用事业I', '交通运输I', '房地产I', '商业贸易I',
'休闲服务I', '综合I', '建筑材料I', '建筑装饰I', '电气设备I', '国防军工I', '计算机I', '传媒I',
'通信I', '银行I', '非银金融I', '汽车I', '机械设备I']
#转换成字符串
SW_ZY=[str(i) for i in SW_ZY_num]
#dataframe(data,行,列)
df=pd.DataFrame(SW_CN,index=SW_ZY,columns=['行业分类'])
plt.style.use("ggplot")
list_ma_more=[]
list_ma_less=[]
for i in SW_ZY:
#获取行业成分股 list'
list_i=jqdatasdk.get_industry_stocks(i,date='2017-12-26')
#print list_i
#tempma=0
a,b,c=0,0,0
for j in list_i:
#df['MA10_rolling'] = pd.rolling_mean(df['close'],10)
#close = [float(x) for x in df['close']]
#返回的是pandas.DataFrame
stock=j
security_data = jqdatasdk.get_price(stock,end_date='2018-12-26',frequency='daily',fields=['close'],fq='pre',skip_paused=True,count=20)
#DataFrame的某一列
stock_ma=security_data['close'].rolling(window=10).mean()
#print stock
#print stock_ma
#break
stock_ma_current=stock_ma[-1]
current=security_data['close'][-1]
if(current>=stock_ma_current):
a=a+1
else:
b=b+1
list_ma_more.append(a/float(len(list_i)))
list_ma_less.append(b/float(len(list_i)))#Python2.x 里,整数除整数,只能得出整数。如果要得到小数部分,把其中一个数改成浮点数即可。
print list_ma_more
print list_ma_less
df['bili']=pd.Series(list_ma_more,index=df.index)
df['less']=pd.Series(list_ma_less,index=df.index)
df.index=df['行业分类']
#df=df.sort('bili',ascending=False)
se=df['bili']
se1=df['less']
print se
print se1
fig=plt.figure(figsize=(20,10))#设置图框大小尺寸
ax1=fig.add_subplot(221)#把画布分成2行2列,左到右从上到下的第1块
ax1.set_ylim([0,1]) #设置y轴的上下线
x=np.linspace(0,30,30)#均匀生成介于0到30之间的30个值
y=[0.5]*30
ax1.plot(x,y,color='green',alpha=0.3) #画0.5的平均线
#ax1.set_title('各行业成分股高于5日均线占比')
se.plot(ax=ax1,kind='bar',color='red',alpha=0.7,grid=True,width=0.8) #alpha指透明度
se1.plot(ax=ax1,kind='bar',color='blue',alpha=0.7,grid=True,width=0.8)
plt.show()
上图中,各行业从0轴开始,红色表示该行业的成分股中踩上10日均线的百分比,蓝色表示该行业的成分股中位踩上10日均线的股票比例,从上图看来,2018年12月26号,只有通信行业的股票站上均线的比例大于50%