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() # 顯示

  最后得出結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM