创业板近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日涨跌分布(通过 Tushare 数据获取)

# 获取最近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)