当前位置:   article > 正文

【qstock量化】动态交互数据可视化_qstock.data.trade

qstock.data.trade

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量化】数据篇之宏观指标和财经新闻文本

  1. import qstock as qs
  2. 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:图形标题

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

3b5ff228fe4e3190b4f393f1f18d68f3.jpeg

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

c7c31fe48fd8af0b163219e7dedbd740.jpeg

02

修正K线图

HA_kline(df)

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

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

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

plot.HA_kline(df)

be103d217a7cb0b92598d66d016d74a4.jpeg

02

树状图

03

矩形树状图

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

参数说明:

data:dataframe数据格式

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

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

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

color:设置展示的颜色

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

ea3a45a23308a7f863c70c97e090bc24.jpeg

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

02885558af0dee232fb9b135efbf5430.jpeg

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云图指标可视化与交易策略回测》

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

d172d060d3dda8ffcfc909cddd6d21d7.jpeg

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轴坐标对应数据。

普通折线图

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

0109267bf52377e5cfff82819a7c8326.jpeg

06

股价分位点折线图

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

各参数符号与K线相同。

plot.stock_line(df.close)

377ddae1e59260f5dc15e4edb4dd4e9d.jpeg

对比折线图

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

04914ba1eca90e5d1c17c8af07667471.jpeg

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

0fe2c08998c8af0b29ec77256fb6f8e3.jpeg

全球指数累计涨幅可视化

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

62fe8702693163a5a563a6d455d84b40.jpeg

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')。

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

6dfd8f4a6d74ca575bcbbe67dbd31cb9.jpeg

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)

ba9a94931b5444137d710a94987c3be8.jpeg

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)

68c11519caba6a945bfee59157d6af94.jpeg

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',添加箱线图。

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

698d09ab4367ddda3a35244cbedf85f9.jpeg

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

9502434c9799a0aceaee5e2252052f2a.jpeg

011

饼图

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

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

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

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

49dd02d7ed092b5ddb4e3bf5232e6746.jpeg

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

93af5bde422971017af3b85d40b51b64.jpeg

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+'主营业务收入')

292d11c8ac540ca552bb6e20b8734309.jpeg

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

e3a00523c4419455056067c13d90b263.jpeg

014

概率密度图

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

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

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

4a1ab148e3733f02bb5b44c3ffd2d075.jpeg

015

箱线图

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

参数说明与前面同。

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

4b358cb441dab60bf5670c48ec2cb15c.jpeg

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

259a418180862e961eac9a921260a838.jpeg

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

0c47a445eea5a82554bdf63849fe7497.jpeg

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)

2f872904dc40fba978db052c2db73391.png

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

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

cf17f69f97506a79657fca00723cc139.png

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

962e505cdb41d71fc12aa724b24f2610.jpeg

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

20818215633538f51cbcb74d0fe36a4e.jpeg

06

其他图形

017

热力图

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

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

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

756c43cb5f48a1aa78332e8442c366be.jpeg

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

88e7b559a1e8d9b07a465004afcec061.jpeg

018

地图

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

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

019

词云图

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/78625
推荐阅读
相关标签
  

闽ICP备14008679号