创业板近5日涨跌分布(通过 Tushare 数据获取)
# Python基本设置
#导入常用模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from datetime import *
%matplotlib inline
#设置绘图参数(中文显示以及坐标轴负数显示)
plt.rcParams['font.sans-serif'] = ['Simhei'] #解决中文显示问题,黑体
plt.rcParams['axes.unicode_minus'] = False #解决负数坐标显示问题
# 导入Tushare模块
import tushare as ts
ts.set_token('your token') # 详见tushare API
pro = ts.pro_api()
# 获取数据
# 定义获取创业板涨跌数据的函数
def get_cyb_chg(date="20200515"):
data = pro.query(
'stock_basic',
exchange='',
list_status='L',
fields=
'ts_code,symbol,name,area,industry,fullname,enname,market,exchange,curr_type,list_status,list_date,delist_date,is_hs',
trade_date=date)
cyb_codes = list(data[data['market'] == '创业板'].ts_code)
data = pro.query('daily', trade_date=date)
data = data[data.ts_code.apply(lambda x : True if x in cyb_codes else False)]
return data["pct_chg"]
# 绘图
# 定义绘图函数
def cyb_plot(date="20200515"):
ret = get_cyb_chg(date)
total = ret.count()
up = ret[ret>0].count()
equal = ret[ret==0].count()
down = ret[ret<0].count()
status = f"交易股票数量:{total} 上涨:{up} 下跌:{down} 平:{equal}"
fig, ax = plt.subplots(figsize=(10,8))
ax.spines['left'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.yaxis.set_major_locator(ticker.NullLocator())
ax.set_xticks(range(-11,12))
bins1 = list(range(-11,1))
bins2 = list(range(0,12))
n1, bins1, patches1 = ax.hist(x=ret[ret<=0], bins=bins1, rwidth=0.9, color='g')
n2, bins2, patches2 = ax.hist(x=ret[ret> 0], bins=bins2, rwidth=0.9, color='r')
n = list(n1) + list(n2)
bins = list(bins1) + list(bins2)[1:]
ax.set_title(date+'创业板情绪',fontsize=40, fontweight='bold', loc='center', pad=40)
ax.set_xlabel('创业板涨跌分布', fontsize=20)
ax.text(x=11, y=max(n)+10, s=status ,va='bottom', ha='right', fontsize=20, color='blue')
for num in range(0,len(n)):
ax.text(x=bins[num]+0.5, y=n[num], s=int(n[num]), va='bottom', ha='center', fontsize=15)
# 绘制2020-05-19创业板情绪
cyb_plot("20200519")
# 获取最近5个交易日
yesterday = datetime.today() + timedelta(-1)
start_date = (yesterday + timedelta(-10)).strftime(format="%Y%m%d")
end_date = yesterday.strftime(format="%Y%m%d")
df = pro.trade_cal(exchange='', start_date=start_date, end_date=end_date)
df = df[df.is_open == 1].iloc[-5:]
for i in df.cal_date:
cyb_plot(i)