股票投资小常识:头部:股价上涨至某价位时便遇阻力而下滑。挂进:买进股票的意思。挂出:卖出股票的意思
Pyecharts简介
Echarts 是百度基于JavaScript 开源的可视化图表库,而 Pyecharts 相当于是 Python+echarts,即使用 Python 语言调用 echarts 的开源库,可以制作非常精美的图表。实际上 Python 可视化库有很多,包括 Matplotlib、Seaborn、Bokeh 、Pygal、 Plotly 和 Pyecharts等等。其中 Matplotlib 是大家入门数据分析的最基本可视化工具;Seaborn 实际上是 matplotlib 的一个封装,提供了很多统计分析的基本图表;Bokeh、Pygal、Plotly 和 Pyecharts 等功能相似,可以输出非常精美的可视化图表,尤其是 Plotly 和 Pyecharts ,均支持动态可交互效果,但代码相对复杂。这些可视化库基本上都支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab,可以轻松集成至 Flask,Django 等主流 Web 框架。关于高级可视化库之间的优劣对比在此不做深入探究,读者可根据个人需要和编程习惯选择相应的库进行学习,本文将重点介绍 Pyecharts 及其在金融量化上的应用,代码均在Jupyter notebook上运行。关于Pyechart更详细完整的介绍可以参见其官网:Pyecharts。
01版本与安装
Pyecharts 分为 v0.5.X(旧版) 和 v1 (新版)两个版本,两个不兼容,v1 是一个全新的版本。直接使用pip安装可获取最新版本:pip install pyecharts,如需使用旧版本,需要指定安装版本号,如:pip install pyecharts=0.5.11。本文使用的是1.9.1版的pyecharts,v0.5版本编程代码可参考公众号历史文章。
查看电脑系统和库版本watermark是第三方库需要先安装,在cmd(如安装的是anaconda,直接打开anaconda prompt)上输入:pip install watermark%load_ext watermark%watermark 查看电脑版本%watermark -p pyecharts,pandas,numpy,matplotlib,talib,backtrader,jupyter
pyecharts: 1.9.1pandas: 1.3.2numpy: 1.20.3matplotlib: 3.3.4talib: 0.4.19backtrader: 1.9.76.123jupyter: 1.0.0
02模块导入与调用
图表的类在charts,*表示导入全部,一般不建议这么写,可根据图表类型导入,如柱状图和折线图:from pyecharts.charts import Bar,Line。配置项通过options(缩写为opts),用于修饰图表,进阶还可调用Javascript 的代码,导入JsCode:from pyecharts.commons.utils import JsCode。theme可以定制主题,导入:from pyecharts.globals import ThemeType,一般使用默认的ThemeType.WHITE。导入Faker可以使用自带的数据画图。
frompyecharts.chartsimport*frompyechartsimportoptionsasoptsfrom pyecharts.fakerimportFaker
03图表配置项
Pyecharts使用 options对图表的配置项进行设置,根据个人需要,为图表添加(减少)元素,美化和修饰图表。配置项非常多,包括全局配置项(set_global_opts)22个大类和系列配置项(结合数据系列进行配置)17个大类,每一个配置类下又有众多的参数设置。配置项为制作精美的图表提供了相当完善的功能选择,但是对新手来说相当不友好,各种类和参数选择让人眼花缭乱和望而生畏(老版本0.5.11在这方面简洁很多)。这里建议大家结合常用的图表类型模板学习几个常用的配置项,其他配置项基本上使用默认参数即可。
图片来源:https://pyecharts.org//zh-cn/global_options
pyecharts 对配置项基本上都采用 XXXOpts/XXXItems 以及 dict 两种数据形式进行调用,下面介绍几个常用的配置项。(1)全局配置项,通过set_global_opts 方法设置
(2)系列配置项
可视化实战案例
本文主要介绍直角坐标系图表及其应用案例,其余图表将在下一次推文中介绍。直角坐标系图表继承自 RectChart 拥有一些相同或相似的方法。
股票投资小常识:业绩虽然在投机里面没有那么重要,但是也不要选择会退市的股票,也不要选择业绩大幅下降的股票。
导入数据分析和量化常用库importpandasaspdimport numpyasnpimport talibastaimport tushareasts导入pyechartsfrom pyecharts.chartsimport*frompyechartsimportoptionsasoptsfrom pyecharts.commons.utilsimportJsCode
01折线图Line
折线图是考察金融时间序列数据趋势最常用的图表之一。下面使用tushare旧接口在线获取股票交易数据进行可视化分析。
股票数据可视化分析实例获取A股交易数据def get_price(code=sh,start=2000-01-01,end=2022-03-07): df=ts.get_k_data(code,start,end) df.index=pd.to_datetime(df.date) 将成交量单位改为10000手并取整数 df[volume]=(df[volume]/10000).apply(int)returndf[[open,close,high,low,volume]]sh=get_price()sh.head()
最基本折线图,全使用默认参数。
g=(Line() .add_xaxis(sh.index.strftime(%Y%m%d).tolist()) .add_yaxis(,sh.close))g.render_notebook()
添加全局和系列配置项。
不同点位设置不同颜色des=sh.close.describe()v1,v2,v3=np.ceil(des[25%]),np.ceil(des[50%]),np.ceil(des[75%])pieces=[{"min": v3,"color":"red"}, {"min": v2,"max": v3,"color":"blue"}, {"min": v1,"max": v2,"color":"black"}, {"max": v1,"color":"green"},]链式调用作用域()g = ( Line({width:100%,height:480px})设置画布大小,px像素 .add_xaxis(xaxis_data=sh.index.strftime(%Y%m%d).tolist())x数据 .add_yaxis( series_name="",序列名称 y_axis=sh.close.values.tolist(),添加y数据 is_smooth=True, 平滑曲线 is_symbol_show=False,不显示折线的小圆圈 label_opts=opts.LabelOpts(is_show=False), linestyle_opts=opts.LineStyleOpts(width=2),线宽 markpoint_opts=opts.MarkPointOpts(data=[添加标记符 opts.MarkPointItem(type_=max, name=最大值), opts.MarkPointItem(type_=min, name=最小值),],symbol_size=[100,30]), markline_opts=opts.MarkLineOpts(添加均值辅助性 data=[opts.MarkLineItem(type_="average")], )) .set_global_opts(全局参数设置 title_opts=opts.TitleOpts(title=上证指数走势, subtitle=2000年-2022年,pos_left=center), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), visualmap_opts=opts.VisualMapOpts(视觉映射配置 orient ="horizontal",split_number =4, pos_left=center,is_piecewise=True, pieces=pieces,),) .set_series_opts( markarea_opts=opts.MarkAreaOpts(标记区域配置项 data=[ opts.MarkAreaItem(name="牛市", x=("20050606","20071016")), opts.MarkAreaItem(name="牛市", x=("20140312","20150612")),],)))使用jupyter notebook显示图形g.render_notebook()
高阶应用:股价收益率与波动率可视化
此处代码较长省略。完整代码见Python金融量化知识星球。
02柱状图Bar
股票投资小常识:纳斯达克(NASDAQ)股票市场是世界上主要的股票市场中成长速度最快的市场,而且它是首家电子化的股票市场。
下面以上证指数和创业板指数2010-2022年的年收益率构建柱状图,比较考察不同指数在各年的收益率情况。
indexs={上证综指:sh,创业板:cyb}index_price=pd.DataFrame({index:get_price(code).close for index,code in indexs.items()}).dropna()index_price.head()
指数年度收益率柱状图index_ret=index_price/index_price.shift(1)-1ss=index_ret.to_period(Y)sss=(ss.groupby(ss.index).apply(lambda x: ((1+x).cumprod()-1).iloc[-1])*100).round(2)
使用全部默认参数下的年收益率柱状图。
g=(Bar() .add_xaxis(sss.index.strftime(%Y).tolist()) .add_yaxis("", sss[上证综指].tolist()))g.render_notebook()
添加全局配置项和系列配置项,使图表反映更多细节,同时可以根据时间段进行区域缩放。
g = (Bar() .add_xaxis(sss.index.strftime(%Y).tolist()) .add_yaxis("上证综指", sss[上证综指].tolist(),gap="0%") .add_yaxis("创业板", sss[创业板].tolist(),gap="0%") 添加全局配置项 .set_global_opts(title_opts=opts.TitleOpts(title="指数月收益率"), datazoom_opts=opts.DataZoomOpts(),区域缩放配置项 yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value}%"))) .set_series_opts(添加序列配置项 label_opts=opts.LabelOpts(is_show=True,formatter={c}%)))g.width ="100%"设置画布比例g.render_notebook()
高阶应用:2021年全球资产收益率对比分析。
此处代码较长省略。完整代码见Python金融量化知识星球。
03K线图Kline
K线图是对证券交易行情可视化的最基本图表之一,也是我们股票量化分析的最基本工具。
计算指标def get_data(code,start=2021-01-01,end=): df=get_price(code,start,end) df[ma5]=df.close.rolling(5).mean() df[ma20]=df.close.rolling(20).mean() df[macd],df[macdsignal],df[macdhist]=ta.MACD(df.close,fastperiod=12,slowperiod=26,signalperiod=9)returndf.dropna().round(2)
df=get_data(sh)df.head()
使用默认参数可以得到最基本的K线图。
g = (Kline() .add_xaxis(df[2022:].index.strftime(%Y%m%d).tolist()) y轴数据,默认open、close、low、high,转为list格式 .add_yaxis("",y_axis=df[[open, close, low, high]][2022:].values.tolist()) )g.render_notebook()
添加全局和系列配置项,强化细节展示。
def draw_kline(data): g = (Kline() .add_xaxis(data.index.strftime(%Y%m%d).tolist()) y轴数据,默认open、close、high、low,转为list格式 .add_yaxis(series_name="", y_axis=data[[open,close,low,high]].values.tolist(), itemstyle_opts=opts.ItemStyleOpts( color="red",阳线红色 color0="green",阴线绿色 border_color="red", border_color0="green",), markpoint_opts=opts.MarkPointOpts(data=[添加标记符 opts.MarkPointItem(type_=max, name=最大值), opts.MarkPointItem(type_=min, name=最小值),]), 添加辅助性,如某期间内最大max最小值min均值average markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average", value_dim="close")], ),) .set_global_opts( datazoom_opts=[opts.DataZoomOpts()],滑动模块选择 title_opts=opts.TitleOpts(title="股票K线图",pos_left=center),))returng
draw_kline(df).render_notebook()
高阶应用:K线图叠加成交量和技术指标。
完整代码见Python金融量化知识星球。def kline_volume_ta(data): pass
kline_volume_ta(df).render_notebook()
04散点图Scatter
散点图通常用来反映两个变量之间的统计关系。pyecharts还支持展示多变量随着时间的变动趋势。
创业板和上证综指历年收益率数据sss.head()
g= ( Scatter() .add_xaxis([str(d) for d in sss.index.year]) .add_yaxis("上证综指(%)",sss[上证综指].tolist()) .add_yaxis("创业板(%)", sss[创业板].tolist()) .set_global_opts( title_opts=opts.TitleOpts(title="指数历年收益率"), visualmap_opts=opts.VisualMapOpts(type_="size", is_show=False), xaxis_opts=opts.AxisOpts(type_="category", axisline_opts=opts.AxisLineOpts(is_on_zero=False), ), yaxis_opts=opts.AxisOpts(is_show=False,)) )g.width ="100%"g.render_notebook()
g = (Scatter().add_xaxis(sss[上证综指].tolist()).add_yaxis("", sss[创业板].tolist(),symbol_size=20,label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(上证综指 VS 创业板),tooltip_opts=opts.TooltipOpts(is_show=False),xaxis_opts=opts.AxisOpts(name=上证综指,type_="value",splitline_opts=opts.SplitLineOpts(is_show=True),axislabel_opts=opts.LabelOpts(formatter={value}%)),yaxis_opts=opts.AxisOpts(name=创业板,type_="value",splitline_opts=opts.SplitLineOpts(is_show=True),axislabel_opts=opts.LabelOpts(formatter={value}%),)))g.width ="100%"g.render_notebook()
05热力图HeatMap
热力图实际上是个三维结构,考察两个特征维度下值的变动趋势。热力图可以应用在指数周期变化和热点板块轮动分析等。下面以指数近10年来月收益率的涨跌幅为例构建热力图。
heat_data=(index_price/index_price.shift(1)-1).to_period(M)heat_data=heat_data.groupby(heat_data.index).apply(lambda x: ((((1+x).cumprod()-1).iloc[-1])*100).round(2))heat_data=heat_data[2011:2021]heat_data.tail()
构建热力图的难点在于数据项value的值。
value= [[i,j,heat_data[上证综指][str(2011+i)+-+str(1+j)]]foriinrange(11)forjinrange(12)]year=[str(i)foriinrange(2011,2022)]month=[str(i)+月foriinrange(1,13)]g= (HeatMap() .add_xaxis(year) .add_yaxis("", month,value, label_opts=opts.LabelOpts(is_show=True, position="inside"),) .set_global_opts( title_opts=opts.TitleOpts(title="上证综指月收益率(%)"), visualmap_opts=opts.VisualMapOpts(is_show=False,min_=-30,max_=30,)))g.render_notebook()
高阶应用:根据涨跌幅范围设置不同显示颜色
不同点位设置不同颜色代码省略。完整代码见Python金融量化知识星球。
结语
本文简单介绍了 Pyecharts (V1)基本情况、安装、模块调用和参数设置,并以股票交易数据为例,为大家展示了使用 Pyehcarts 构建直角坐标系下常用的图表,包括折线图、柱状图、K线图和热力图等。下一篇推文将进一步介绍Pyecharts其他图表的构建方法,包括日历图、仪表盘、地图、关系图等等,同时分享这些常见的图表在金融量化上的应用实例。
股票投资小常识:能达到15%的年化收益持续30年,就是投资大师;能达到20%的年化收益率持续50年,就是股神(巴菲特、芒格),只是,大部分投资者并不满足这样的回报率,所以,股票市场永远都是少数人赚钱的地方。
免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186