服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

【qstock量化】动态交互数据可视化

日期: 来源:Python金融量化收集编辑:CuteHand
qstock简介





qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析开源库,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(backtest)四个模块。其中数据模块(data)数据来源于东方财富网、同花顺、新浪财经等网上公开数据,数据爬虫部分参考了现有金融数据包tushare、akshare和efinance。qstock致力于为用户提供更加简洁和规整化的金融市场数据接口。可视化模块基于plotly.express和pyecharts包,为用户提供基于web的交互图形简单操作接口;选股模块提供了同花顺的技术选股和公众号策略选股,包括RPS、MM趋势、财务指标、资金流模型等,回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。


qstock目前在pypi官网上发布,开源版本为1.1.0,意味着读者直接“pip install qstock ”安装即可使用。GitHub地址:

https://github.com/tkfy920/qstock


下面为大家介绍qstock可视化模块plot)的调用方法。以下代码使用jupyter notebook编译,输出图形为基于web的可交互动态图





qstock数据篇专题如下

【qstock开源了】数据篇之行情交易数据

【qstock数据篇】行业概念板块与资金流

【qstock量化】数据篇之股票基本面数据

【qstock量化】数据篇之宏观指标和财经新闻文本

import qstock as qs
from qstock import plot


01

K线图


01
普通K线图













kline(df, mas=5, mal=20, notebook=True,title="股票K线图")


参数说明:

df:数据,包含open,high,low,close,volume列名的dataframe

mas:短期均线,默认5日均线

mal:长期均线,默认20日均线

notebook:True代表在jupyter notebook上显示,False默认输出html,可以保存本地打开。默认为True

title:图形标题






#如果notebook不显示pyecharts的图形,在前面加上以下代码(去掉前面注释)
#from pyecharts.globals import CurrentConfig, NotebookType
#CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_NOTEBOOK
#获取中国平安2022年至今前复权的数据
df=qs.get_data('中国平安',start='2022-06-01',end='2022-10-20')
df.tail()


#使用默认参数
plot.kline(df)


02
修正K线图













HA_kline(df)


参数df与前面普通k线图线图。





也叫平均K线图(Heikin-Ashi),具体原理可以参考公众号推文《【手把手教你】使用Python对股价的Heikin Ashi蜡烛图进行可视化》

普通K线图中往往存在很多噪声,这些噪声容易掩盖市场真实趋势的随机波动,包括价格和成交量波动。比如,对市场影响持续性较短的新闻事件,以及对技术指标和市场趋势解读等,都可能造成无意义的短期价格和交易量波动,这样的噪声会对交易者分析市场产生干扰和误导。为了减少普通K线图产生的噪声,HA蜡烛图应运而生,HA中的四个价格中,HA开盘价和HA收盘价都是经过平均计算得来,平均化的处理相当于噪声消除处理,在一定程度上消除了市场的噪声,可以更加明确地反映市场价格的走势。

plot.HA_kline(df)


02

树状图


03
矩形树状图













treemap(data, label, weight, value, color=['Green', 'Red', "#8b0000"])


参数说明:

data:dataframe数据格式

label:需要展示的列名或标签名,必须是list,如[px.Constant('股票'), '行业',  '股票名称']
其中,'行业',  '股票名称'必须是data里的存在的列名

weight:data里存在的列,用来显示权重

value:data里存在的列,用来显示数值

color:设置展示的颜色






#获取东方财富行业板块实时涨跌幅数据
data=qs.realtime_data('行业板块')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
#注意去掉涨幅为0的值,否则会报错
data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)



#获取东方财富概念板块实时涨跌幅数据
data=qs.realtime_data('概念')[['名称','涨幅']]
data['权重']=abs(data['涨幅'])
data=data[data['涨幅']!=0]
params={'data':data,'label':['名称'],'weight':'权重','value':'涨幅'}
plot.treemap(**params)



03

ichimoku云图

云图













plot_ichimoku(df, t=9, k=26, l=30, s=52)


参数说明:

df为dataframe数据,包含'open','high','low','close','volume‘列,索引为时间格式;

t:Tenkan-sen:转折线计算周期,默认9个交易日;

k:Kijun-sen:基准线计算周期,默认26;

l:Chikou Span:滞后跨度或延迟线计算周期,默认30天;

s:Senkou Span B:计算前导跨度B或先行上线B,默认52个交易日。






Ichimoku,是一名日本报纸作家提出的,用于衡量动量以及未来价格支撑和阻力区域的技术分析指标,目前被广泛用于判断外汇、期货、股票、黄金等投资品种的趋势和动量。关于ichimoku云图的基本原理详细以参考公众号推文:《【手把手教你】Ichimoku云图指标可视化与交易策略回测》

df=qs.get_data('丰元股份',start='2021-03-01')
plot.plot_ichimoku(df)



04

基本图形


05
折线图













line(data=None, x=None, y=None, title=None, color=None, line_group=None, facet_col=None, legend=True)


参数:data为series或dataframe的时候,可以不输入x和y。x为x坐标轴对应数据,y为y轴坐标对应数据。






普通折线图


#获取中国平安前复权价格数据
code='中国平安'
df=qs.get_data(code)
plot.line(df.close,title=code+'价格走势')


06
股价分位点折线图













stock_line(data=None, x=None, y=None, notebook=True, title=None)


各参数符号与K线相同。






plot.stock_line(df.close)


对比折线图


df['ma20']=df.close.rolling(20).mean()
title='中国平安股价与20日均线'
plot.line(df[['close','ma20']],title=title)

#个股资金流
plot.line(qs.stock_money('中国平安'),title='中国平安资金流')

全球指数累计涨幅可视化

#常见的全球指数名称
global_indexs=['sh','cyb','恒生指数','道琼斯','标普500','纳斯达克','英国富时100','法国CAC40','德国DAX30','日经225','韩国KOSPI',
               '澳大利亚标普200','印度孟买SENSEX','台湾加权','俄罗斯RTS','加拿大S&P/TSX','巴西BOVESPA']
index_data=qs.get_price(global_indexs,start='2012-01-01').dropna()
plot.line(index_data/index_data.iloc[0],title='全球指数累计涨幅(2012-2022)')


07
柱状图













bar(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group')


参数说明:
'orientation='h'表示横向柱状图,log_x和log_y为True表示使用对数坐标,barmode='group'表示对比条形图,默认。为'relative',
   如qs.bar(dd['总市值'],log_x=True,orientation='h')。






#计算收益率
data=index_data.copy().dropna()
rets=data/data.shift(1)-1
rets=rets.to_period('Y')
rets=(rets.groupby(rets.index).apply(lambda x: ((1+x).cumprod()-1).iloc[-1])*100).round(2)
rets=rets.iloc[-1].sort_values(ascending=False)
title='全球指数2022年涨跌幅'
plot.bar(rets,title=title)


08
基于pyecharts画柱状图













chart_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)


x,y均为list,或者x为dataframe






plot.chart_bar(rets,title=title,zoom=True)


09
纵向柱状图













chart_inv_bar(data=None, x=None, y=None, title=None, notebook=True, zoom=False)

x,y均为list,或者x为dataframe






plot.chart_inv_bar(rets,title=title,zoom=True)


010
散点图













scatter(data=None, x=None, y=None, title=None, color=None, size=None,trend=None, legend=True, marginal_x=None, marginal_y=None)


参数说明:
color根据不同类型显示不同颜色;
size根据值大小显示散点图的大小;
trend='ols'添加回归拟合线;
marginal_x='violin',添加小提琴图;
marginal_y= 'box',添加箱线图。






data=qs.get_data('晓程科技')
plot.scatter(data,x='close',y='volume')

data=qs.get_data('晓程科技')
#计算收益率
data['ret']=data.close/data.close.shift(1)-1
data['weight']=data['ret'].abs()
#对换手率分类
data.loc[data.turnover_rate>20,'rr']='crazy'
data.loc[(10<data.turnover_rate)&(data.turnover_rate<20),'rr']='high'
data.loc[(5<data.turnover_rate)&(data.turnover_rate<10),'rr']='mid'
data.loc[data.turnover_rate<5,'rr']='low'
data.dropna(inplace=True)
plot.scatter(data,x='turnover_rate',y='close',size='weight',trend='ols',marginal_x='histogram',marginal_y='box')


011
饼图













pie(data=None, x=None, y=None, color=None, title=None, legend=False, hole=None)


data为dataframe数据,value;
hole数值0-1,显示中间空心;
legend=True显示图例,默认不显示。





实例:个股主营业务占比可视化

code='晓程科技'
df=qs.main_business(code)
c1=df['报告期']=='2022中期'
c2=df['分类方向']=='按产品分'
df=df[c1&c2]
df


plot.pie(df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')


012
基于pyecharts画饼图













chart_pie(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)


参数与前面相同






plot.chart_pie(data=df.iloc[:-1],x='分类',y='营业收入(万)',title=code+'主营业务收入')


05

统计分布图


013
直方图













hist(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, barmode='group',histnorm=None)


参数说明:histnorm={1:'percent',2:'probability',3:'density',4:'probability density'},其他参数与前面相同。






#1:'percent',2:'probability',3:'density',4:'probability density'
code='晓程科技'
data=qs.get_data(code,fqt=2)
plot.hist(data,x='close',histnorm=3,title=code+'股价直方图')


014
概率密度图













hist_kde(data=None, x=None, y=None, kde=True, stat='count', figsize=(15, 7))


参数说明:直方图默认统计的是观测数,可以进行统计变化,设置stat参数。stat可选参数:count:观测数(默认);frequency:频数;density:密度;probability:概率;kde=True表示添加核密度曲线。其他参数与前面相同。





#stat可选参数:count:观测数(默认);frequency:频数;density:密度;probability:概率
plot.hist_kde(data.close,stat='probability')


015
箱线图













box(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, boxmode=None)


参数说明与前面同。





index_list=['上证指数','创业板指','沪深300','道琼斯','标普500','纳斯达克']
data=qs.get_price(index_list)
plot.box(data.dropna())


#获取面板数据
dd=qs.get_data(index_list)
plot.box(dd,x='name',y='close',color='name')


plot.box(dd,y='name',x='close',color='name',orientation='h')


016
小提琴图













violin(data=None, x=None, y=None, title=None, color=None, legend=False,orientation=None, log_x=False, log_y=False, box=False, points=None)






plot.violin(dd,x='name',y='close',color='name',box=True)

小提琴是是箱线图和核密度图的集合,通过箱线思维展示数据的各个百分位点。小提琴图上的核密度图展示了数据分布的形状,分布越宽的位置表示数据越集中于该处,反之则说明该处数据分布越少。

plot.violin(dd,y='name',x='close',color='name',box=True,orientation='h')


plot.violin(dd.query('name=="上证指数"'),y='name',x='close',box=True,orientation='h')

plot.violin(dd.query('name=="道琼斯"'),y='name',x='close',box=True,orientation='h')



06

其他图形


017
热力图













chart_heatmap(x, y, v, title=None, notebook=True)


x,y分别为xy轴对应标签,v是对应数据







sh0=qs.get_data('上证指数').close['2011':'2021']
sh=(sh0/sh0.shift(1)-1).to_period('M')
sh=sh.groupby(sh.index).apply(lambda x: ((((1+x).cumprod()-1).iloc[-1])*100).round(2))
x=[str(i) for i in range(2011,2022)]
y=[str(i)+'月' for i in range(1,13)]
v= [[i,j,sh[str(2011+i)+'-'+str(1+j)]] for i in range(11) for j in range(12)]
plot.chart_heatmap(x,y,v,title='上证指数月度收益率')



plot.chart_heatmap_color(x,y,v,title='上证综指月度收益率')


018
地图













chart_map(data=None, x=None, y=None, data_pair=None, title=None, notebook=True)






df=qs.realtime_data('地域')
df['名称']=df['名称'].apply(lambda s:s[:-2] if s.endswith('板块') else s)
#df.head()
#地域板块最新价格指数
plot.chart_map(df,x='名称',y='最新')


019
词云图













chart_wordcloud(data, title=None, notebook=True)







txt=qs.news_data('cctv',start='20221020',end='20221021')
#缺失值处理,转为str格式
txt_list=''.join(list(txt.content.apply(lambda s:str(s))))
#使用jieba处理分词并转为词云格式数据
c_data=plot.cloud_data(txt_list)
#画词云图
plot.chart_wordcloud(c_data)


关于Python金融量化








专注于分享Python在金融量化领域的应用。加入知识星球,可以免费获取qstock源代码、30多g的量化投资视频资料、量化金融相关PDF资料、公众号文章Python完整源码、与博主直接交流、答疑解惑等。添加个人微信sky2blue2可获取相关优惠。

相关阅读

  • 【qstock量化】技术形态与概念热点选股池

  • qstock简介qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析开源库,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(backtest)四个模块。其中数
  • Python金融量化知识星球【双11优惠券】

  • 引言公众号【Python金融量化】创建于2018年9月,致力于分享Python在金融量化领域的应用,目前已发表原创文章87篇,形成了四个专辑:Python入门篇、金融数据篇、量化分析篇和量化回
  • 【手把手教你】使用qstock实现量化策略选股

  • qstock简介qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析开源库,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(backtest)四个模块。其中数
  • 数据治理体系建设与数据资产路线图规划

  • 须知公众号推文规则变了,读者会错过文章更新,点击上方 "企业数字化咨询"关注, 设为星标后台回复【技术】,申请加入行业技术交流与资料分享群加入会员服务可获取更敏捷服务企业
  • 谈PDM与PLM之关系

  • 须知公众号推文规则变了,读者会错过文章更新,点击上方 "企业数字化咨询"关注, 设为星标后台回复【技术】,申请加入行业技术交流与资料分享群加入会员服务可获取更敏捷服务导读:P
  • 详解大厂实时数仓建设(好文收藏)

  • 须知公众号推文规则变了,读者会错过文章更新,点击上方 "企业数字化咨询"关注, 设为星标后台回复【技术】,申请加入行业技术交流与资料分享群加入会员服务可获取更敏捷服务一、
  • 美团外卖实时数仓建设实践

  • 须知公众号推文规则变了,读者会错过文章更新,点击上方 "企业数字化咨询"关注, 设为星标后台回复【技术】,申请加入行业技术交流与资料分享群加入会员服务可获取更敏捷服务本文
  • 神策数据付力力:新一代的营销数据平台

  • 神策数界平台是神策推出的新一代营销数据平台,作为神策分析云、神策营销云的数据根基,能够帮助企业打通整体数据,形成完整的数据资产,解决企业面临的数据孤岛问题。神策数据联合

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 【qstock量化】动态交互数据可视化

  • qstock简介qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析开源库,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(backtest)四个模块。其中数
  • 【qstock量化】技术形态与概念热点选股池

  • qstock简介qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析开源库,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(backtest)四个模块。其中数
  • Python金融量化知识星球【双11优惠券】

  • 引言公众号【Python金融量化】创建于2018年9月,致力于分享Python在金融量化领域的应用,目前已发表原创文章87篇,形成了四个专辑:Python入门篇、金融数据篇、量化分析篇和量化回
  • 【手把手教你】使用qstock实现量化策略选股

  • qstock简介qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析开源库,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(backtest)四个模块。其中数