zoukankan      html  css  js  c++  java
  • Python的新mplfinance模块入门介绍

      一、make_addplot的基本用法

      在金融数据分析中,我们要通过数据可视化展示的不仅是’Open’, ‘High’, ‘Low’, 'Close’和最常见‘ma’,还有一些其他分析数据,那么就要用到make_addplot()方法了,make_addplot可以接受一个pandas、numpy、array以及list格式的数据(tuple不可以),和**kwargs参数;需要注意的是:传递给make_addplot的数据参数必须与将来画图传递给plot的数据参数行数相同,**kwargs参数将全部传递到polt方法中。

      下面准备了一组数据,但是column有点长,不能全部输出,这里分布输出了数据的columns和一部分数据:

      Index(['Open', 'High', 'Low', 'Close', 'Volume', 'UpperB', 'LowerB', 'PercentB'],

      dtype='object')

      Open High ... LowerB PercentB

      Date ...

      2011-07-01 132.089996 134.100006 ... 125.316073 1.219057

      2011-07-05 133.779999 134.080002 ... 124.912703 1.066618

      2011-07-06 133.490005 134.139999 ... 124.627085 0.992467

      2011-07-07 135.160004 135.699997 ... 124.284986 1.026222

      2011-07-08 133.830002 135.360001 ... 124.140890 0.885916

      ... ... ... ... ... ...

      2012-06-25 132.050003 132.100006 ... 128.120436 0.381896

      2012-06-26 131.699997 132.380005 ... 128.084306 0.470585

      2012-06-27 132.419998 133.429993 ... 128.140042 0.605441

      2012-06-28 132.289993 132.990005 ... 128.219241 0.551922

      2012-06-29 135.199997 136.270004 ... 128.792993 0.921670

      [252 rows x 8 columns]

      add_plot = mplfinance.make_addplot(data['LowerB'])

      mplfinance.plot(data, addplot=add_plot)

      plt.show() # 显示

      得出结果

      如果要给图表添加多个数据绘制,直接用列表传入make_addplot即可,例如:

      add_plot = mplfinance.make_addplot(data[['UpperB', 'LowerB']])

      mplfinance.plot(data, addplot=add_plot)

      plt.show() # 显示

      得出结果

      把数据分析的结果标记到图像中

      数据分析和可视化的目的是有分析结果,直接把结果展示的图表上将更加直观。先做个简单的数据分析,并把分析结果赋值到两个列表中,然后在绘图时标记到图表中,因为这里是标记,并非连续的线

      ,此时可以在make_addplot方法中使用marker,以及markersize和color设置标记的大小和颜色,这些参数都是直接传递给plot方法的。

      def data_analyze(self, data: pandas.DataFrame):

      """

      简单的数据分析,并把返回数据分析结果列表,分析的逻辑不重要,主要看如何绘制到图形中。

      :param data:

      :return:

      """

      if data.shape[0] == 0:

      data = self.data

      s_list = []

      b_list = []

      b=-1

      for i, v in data['High'].iteritems():

      if v > data['UpperB'][i] and (b == -1 or b == 1):

      b_list.append(data['Low'][i])

      b = 0

      else:

      b_list.append(numpy.nan) # 这里添加nan的目的是,对齐主图的k线数量

      if data['Low'][i] < data['LowerB'][i] and (b == -1 or b == 0):

      s_list.append(v)

      b = 1

      else:

      s_list.append(numpy.nan)

      return b_list, s_list

      b_list, s_list = self.data_analyze(data)

      add_plot = [

      mpf.make_addplot(b_list, scatter=True, markersize=200, marker='^', color='y'),

      mpf.make_addplot(s_list, scatter=True, markersize=200, marker='v', color='r'),

      mpf.make_addplot(data[['UpperB', 'LowerB']])]

      mpf.plot(data, type='candle', addplot=add_plot, volume=True)

      plt.show() # 显示

      得出结果

      在副图中绘制

      plot绘图时是可以直接通过参数添加成交量副图的,如果想在副图中绘制数据可以在make_addplot中使用参数panel,直接上代码:

      def data_analyze(self, data: pandas.DataFrame):

      """

      简单的数据分析,并把返回数据分析结果列表,分析的逻辑不重要,主要看如何绘制到图形中。

      :param data:

      :return:

      """

      if data.shape[0] == 0:

      data = self.data

      s_list = []

      b_list = []

      b=-1

      for i, v in data['High'].iteritems():

      if v > data['UpperB'][i] and (b == -1 or b == 1):

      b_list.append(data['Low'][i])

      b = 0

      else:

      b_list.append(numpy.nan) # 这里添加nan的目的是,对齐主图的k线数量

      if data['Low'][i] < data['LowerB'][i] and (b == -1 or b == 0):

      s_list.append(v)

      b = 1

      else:

      s_list.append(numpy.nan)

      return b_list, s_list

      b_list, s_list = self.data_analyze(data)

      add_plot = [

      mpf.make_addplot(b_list, scatter=True, markersize=200, marker='^', color='y'),

      mpf.make_addplot(s_list, scatter=True, markersize=200, marker='v', color='r'),

      mpf.make_addplot(data[['UpperB', 'LowerB']]),

      mpf.make_addplot(data['PercentB'], panel='lower', color='g', secondary_y='auto'),]

      mpf.plot(data, type='candle', addplot=add_plot, volume=True)

      plt.show() # 显示

      得出结果

      这里注意的是副图的左右两侧都有Y轴标,而且数据不同,因为mplfinance为完整展示图像,自动分成了两个坐标轴,如果你绘制的数据较多,这里有可能会报错,如果出现这种情况,在使用plot绘制多组数据时需要使用参数secondary_y,有三个参数选项True, False, 和auto,默认是auto,因为绘制数据多出现报错时只能设置secondary_y=true(使用Y轴标)或/False(不使用)来覆盖,如果数据差异很大,设为False可能会导致看不到(实际上还是绘制了,只是在最顶上或最底下一条线看不清而已)。

      修改主图Y轴刻度位置和设置线形

      在绘图plot函数中使用关键字参数style='sas’可以把主图Y左边放到右边,默认是‘default’,

      设置线型是参数linestyle,直接上代码吧,都是常用的参数:

      def data_analyze(self, data: pandas.DataFrame):

      """

      简单的数据分析,并把返回数据分析结果列表,分析的逻辑不重要,主要看如何绘制到图形中。

      :param data:

      :return:

      """

      if data.shape[0] == 0:

      data = self.data

      s_list = []

      b_list = []

      b=-1

      for i, v in data['High'].iteritems():

      if v > data['UpperB'][i] and (b == -1 or b == 1):

      b_list.append(data['Low'][i])

      b = 0

      else:

      b_list.append(numpy.nan) # 这里添加nan的目的是,对齐主图的k线数量

      if data['Low'][i] < data['LowerB'][i] and (b == -1 or b == 0):

      s_list.append(v)

      b = 1

      else:

      s_list.append(numpy.nan)

      return b_list, s_list

      b_list, s_list = self.data_analyze(data)

      add_plot = [郑州人流医院 http://www.0371zzkd.com/

      mpf.make_addplot(b_list, scatter=True, markersize=200, marker='*', color='y'),

      mpf.make_addplot(s_list, scatter=True, markersize=200, marker='s', color='r'),

      mpf.make_addplot(data[['UpperB', 'LowerB']], linestyle='dashdot'),

      mpf.make_addplot(data['PercentB'], panel='lower', color='g', secondary_y='auto'),

      mpf.make_addplot(data['Adj Close'], color='b', linestyle='dotted', secondary_y=True)]

      mpf.plot(data, type='candle', addplot=add_plot, volume=True, figscale=1.5, style='default')

      plt.show() # 显示

      得出结果

      这里需要注意的是style只能在plot方法中使用,不能在make_addplot方法中使用,而linestyle两者都可以用。

      二、marketcolors和mpf_style以及其他常用设置

      marketcolors设置图表颜色

      """

      make_marketcolors() 设置k线颜色

      :up 设置阳线柱填充颜色

      :down 设置阴线柱填充颜色

      :edge 设置蜡烛线边缘颜色 'i' 代表继承k线的颜色

      :wick 设置蜡烛上下影线的颜色

      :volume 设置成交量颜色

      :inherit 是否继承, 如果设置了继承inherit=True,那么edge即便设了颜色也会无效

      """

      my_color = mplfinance.make_marketcolors(up='cyan', down='red', edge='black', wick='black', volume='blue')

      添加图表样式

      这里的设置应该在plot方法之前设置,而设置完成marketcolors后需要使用mpf_style添加设置,最后plot()方法的关键字参数style=my_style 才会生效。下面添加mpf_style,最后一起展示效果。

      """

      make_mpf_style() 设置mpf样式

      :gridaxis:设置网格线位置,both双向

      :gridstyle:设置网格线线型

      :y_on_right:设置y轴位置是否在右

      """

      my_style = mplfinance.make_mpf_style(marketcolors=my_color, gridaxis='both', gridstyle='-.', y_on_right=True)

      这里要注意的是前面make_marketcolors的设置,必须这里作为关键字参数添加进来。其他几项常用设置:title:设置标题;ylabel 设置主图Y轴标题;ylabel_lower 设置成交量Y轴标题;savefig:导出图片路径以及文件名(包括后缀)。

      最后一步绘图:

      b_list, s_list = self.data_analyze(data)

      add_plot = [

      mplfinance.make_addplot(b_list, scatter=True, markersize=200, marker='*', color='y'),

      mplfinance.make_addplot(s_list, scatter=True, markersize=200, marker='s', color='r'),

      mplfinance.make_addplot(data[['UpperB', 'LowerB']], linestyle='dashdot'),

      mplfinance.make_addplot(data['PercentB'], panel='lower', color='g', secondary_y='auto'),

      mplfinance.make_addplot(data['Adj Close'], color='b', linestyle='dotted', secondary_y=True)]

      """

      plot绘图的部分参数

      :type设置图像类型'ohlc'/'candle'/'line/renko'

      :mav 绘制平局线

      :show_nontrading= True 显示非交易日(k线之间有间隔),False 不显示交易日,k线之间没有间隔

      :title:设置标题

      :ylabel=设置主图Y轴标题

      :ylabel_lower 设置成交量一栏Y坐标标题

      :figratio:设置图形纵横比

      :figscale 设置图像的缩小或放大,1.5就是放大50%,最大不会超过电脑屏幕大小

      :style 设置整个图表样式,可以使用前面设置的样式my_style,只能在plot函数中使用指定整个图表样式,不能在make_addplot中使用。

      savefig:导出图片,填写文件名及后缀

      """

      mplfinance.plot(data, type='candle', addplot=add_plot, volume=True, figscale=1.5, style=my_style,title='****报价', figratio=(5, 5), ylabel='价格', ylabel_lower='成交量', savefig='my_image.png')

      plt.show() # 显示

      最后得出结果。

  • 相关阅读:
    同node上,两个pod通过svc访问不通
    Prometheus基于service自动添加监控
    systemd 服务管理编写
    kubernetes 控制器详解【持续完善中】
    tcpdump抓包工具
    Zabbix日志监控插件
    Spring WebFlux之HttpHandler的探索
    知秋源码解读分享系列
    Spring Framework 5.0.0.M3中文文档 翻译记录 Part I. Spring框架概览1-2.2
    Spring Framework 5.0.0.M3中文文档 翻译记录 introduction
  • 原文地址:https://www.cnblogs.com/djw12333/p/12795084.html
Copyright © 2011-2022 走看看