Advertisement

Python金融大数据分析——第五章数据可视化(2)金融学图表

阅读量:

5.2 金融学图表

5.2.1 mplfinance

matplotlib的finance库涉及多种可视化金融图表;随着多个版本的升级换代和功能扩展...原样保留... finance库的功能也在不断优化。

从2.2.0版本前调用:

复制代码
    import matplotlib.finance as mpf
    
    代码解读

到2.2.0版本后调用:

复制代码
    pip install https://github.com/matplotlib/mpl_finance/archive/master.zip
    
    代码解读

但会出现如下警告:

复制代码
 D:\download\python\lib\site-packages\mpl_finance.py:22: DeprecationWarning:

    
  
    
   =================================================================
    
  
    
    WARNING: `mpl_finance` is deprecated:
    
  
    
     Please use `mplfinance` instead (no hyphen, no underscore).
    
  
    
     To install: `pip install --upgrade mplfinance` 
    
  
    
    For more information, see: https://pypi.org/project/mplfinance/
    
  
    
   =================================================================
    
  
    
   category=DeprecationWarning)
    
    
    
    
    代码解读

再到现在的mplfinance。总的来说,新模块mplfinance使用更加便捷。

mplfinance模块简介

mplfinance是一个专注于金融数据处理的可视化的数据分析工具,在安装时必须先确保已经安装了matplotlib库和pandas。

使用mplfinance具有快速绘图功能,并能有效去除停市时段的缺口;同时会自动完成时间轴的标注。整个操作过程简洁流畅且富有人性化体验。

mplfinance安装

DOS下安装如下:

复制代码
    pip install --upgrade mplfinance
    
    代码解读

mplfinance模块用法简介

复制代码
 import mplfinance as mpf

    
 mpf.plot(data)
    
    
    
    
    代码解读

此处要求数据类型的格式应为pandas.DataFrame,并且该数据集必须包含以下字段:开盘价、最高价、最低价以及收盘价。

这里我们以调用雅虎近5年股票价格数据为例,更进一步描述上述内容:

复制代码
 import datetime

    
 import matplotlib.pyplot as plt
    
 import pandas_datareader.data as web
    
  
    
 start = datetime.datetime(2015, 1, 1)
    
 end = datetime.datetime(2020, 6, 16)
    
 # 读取数据
    
 df = web.DataReader('XOM', 'yahoo', start, end)
    
 print(df)
    
    
    
    
    代码解读

打印得到的股票行情如下:

复制代码
           High        Low       Open      Close      Volume  Adj Close

    
 Date                                                                         
    
 2014-12-31  93.129997  92.059998  92.419998  92.449997  11337200.0  73.701263
    
 2015-01-02  93.050003  91.809998  92.250000  92.830002  10220400.0  74.004189
    
 2015-01-05  92.400002  89.500000  92.099998  90.290001  18502400.0  71.979301
    
 2015-01-06  91.410004  89.019997  90.239998  89.809998  16670700.0  71.596634
    
 2015-01-07  91.480003  90.000000  90.650002  90.720001  13590700.0  72.322098
    
 ...               ...        ...        ...        ...         ...        ...
    
 2020-06-10  53.500000  50.599998  53.500000  50.650002  31156800.0  50.650002
    
 2020-06-11  48.840000  46.099998  47.529999  46.180000  39183000.0  46.180000
    
 2020-06-12  48.619999  45.910000  48.040001  47.169998  30968800.0  47.169998
    
 2020-06-15  47.759998  44.750000  45.349998  47.139999  27929300.0  47.139999
    
 2020-06-16  49.750000  47.240002  49.570000  48.200001  26203400.0  48.200001
    
  
    
 [1374 rows x 6 columns]
    
    
    
    
    代码解读
复制代码
 import datetime

    
 import matplotlib.pyplot as plt
    
 import pandas_datareader.data as web
    
 import mplfinance as mpf
    
  
    
 start = datetime.datetime(2015, 1, 1)
    
 end = datetime.datetime(2020, 6, 16)
    
 # 读取数据
    
 df = web.DataReader('XOM', 'yahoo', start, end)
    
 # print(df)
    
 mpf.plot(df)
    
    
    
    
    代码解读

基于详实的股票市场历史数据而言,在分析五年内的市场走向时难以直接识别关键细节。为此,在此期间我们持续关注近期市场动态的变化趋势。

通过mpf.plot中修改绘图类型,可更加直观感受mplfinance的真谛。

types中默认类型为ohlc,另外还有candle,line类型。

1)ohlc类型

复制代码
 start = datetime.datetime(2020, 6, 1)

    
 end = datetime.datetime(2020, 6, 28)
    
 # 读取数据
    
 df = web.DataReader('XOM', 'yahoo', start, end)
    
 # 修改plot绘图类型
    
 # 通过参数types修改绘图类型,默认是ohlc,可以修改为candle,line。
    
 mpf.plot(df)
    
    
    
    
    代码解读

2)修改为candle类型:

复制代码
    mpf.plot(df, type='candle')
    
    代码解读

3)修改为line类型:

复制代码
    mpf.plot(df, type='line')
    
    代码解读

增加绘制均线

mav可增加均线个数,mav=10,mav=(2,5,10)

复制代码
    mpf.plot(df, type='candle', mav=(2, 5, 10))
    
    
    代码解读
复制代码
    mpf.plot(df, type='candle', mav=10)
    
    代码解读

添加成交量volume=True

复制代码
 # 添加成交量

    
 mpf.plot(df, type='candle', mav=(2, 5, 10), volume=True)
    
    
    
    
    代码解读

自动剔除非交易日空白

默认情况下该关键字参数设置为False;当设置为True时,则仅能获取停市时间信息。

复制代码
 # 自动剔除非交易日空白

    
 '''
    
 关键字参数默认show_nontrading=False
    
 只看到停盘的时间段,show_nontrading=True
    
 '''
    
 mpf.plot(df, type='candle', mav=(2, 5, 10), volume=True, show_nontrading=True)
    
    
    
    
    代码解读

停盘的时间段就不会显示数据信息。

make_addplot概述

为了分析金融数据中的开市价、最高价、最低价、收盘价以及移动平均线之外的数据时序图特征,并应调用make_addplot()方法生成相应的可视化图表

make_addplot函数支持接收pandas、numpy、array以及list格式的数据(其中tuple格式的数据不被支持),同时还可以通过**kwargs传递其他参数。

请特别注意:传入到make_addplot的数据参数其数量需与未来绘制图表时传入到plot的相应数据参数保持一致。

复制代码
 # make_addplot用法

    
 start = datetime.datetime(2015, 1, 1)
    
 end = datetime.datetime(2020, 6, 16)
    
 # 读取数据
    
 df = web.DataReader('XOM', 'yahoo', start, end)
    
 add_plot = mpf.make_addplot(df['Volume'])
    
 mpf.plot(df, addplot=add_plot)
    
 plt.show()
    
    
    
    
    代码解读

给图标添加多个数据绘制,直接将列表中传入参数即可。

复制代码
 # 绘制多个数据的图表,直接在列表传入至make_addplot中即可。

    
 add_plot = mpf.make_addplot(df[['Volume', 'Adj Close']])
    
 mpf.plot(df, addplot=add_plot)
    
 plt.show()
    
    
    
    
    代码解读

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

数据分析与可视化的主要目标是为了分析数据结果,并通过图表进行直观展示。

例如:使用marker,以及markersize和color设置标记的大小和颜色

复制代码
 # 将分析结果显示到图像中

    
 def data_analyze(data: pandas.DataFrame):
    
     '''
    
     简单的数据分析,并返回数据分析的结果列表,具体算法随便写写的
    
     :param data:
    
     :return:
    
     '''
    
     if data.shape[0] == 0:
    
     data = data
    
     s_list = []
    
     b_list = []
    
     b = -1
    
     for i, v in data['High'].iteritems():
    
     if v > data['Open'][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['Close'][i] < data['Open'][i] and (b == -1 or b == 0):
    
         s_list.append(v)
    
         b = 1
    
     else:
    
         s_list.append(numpy.nan)
    
     return b_list, s_list
    
  
    
  
    
 # make_addplot用法
    
 start = datetime.datetime(2020, 1, 1)
    
 end = datetime.datetime(2020, 6, 16)
    
 # 读取数据
    
 data = web.DataReader('XOM', 'yahoo', start, end)
    
 b_list, s_list = 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[['Adj Close', 'Volume']]),
    
     mpf.make_addplot(data['Close'], panel='lower', color='g', secondary_y='auto')
    
 ]
    
 mpf.plot(data, type='candle', addplot=add_plot, volume=True)
    
 plt.show()
    
    
    
    
    代码解读

修改y轴刻度盘的位置和设置线型

复制代码
 # 修改主图y轴刻度盘位置和设置线形

    
 # 在绘制plot函数中使用关键字参数style='sas'
    
 # 可以把主图y左边放到右边,默认是default,设置线型是参数linestyle
    
 start = datetime.datetime(2019, 6, 1)
    
 end = datetime.datetime(2020, 6, 16)
    
 # 读取数据
    
 data = web.DataReader('XOM', 'yahoo', start, end)
    
 b_list, s_list = 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='s', color='r'),
    
     mpf.make_addplot(data[['Adj Close', 'Volume']], linestyle='dashdot'),
    
     mpf.make_addplot(data['Close'], 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()
    
    
    
    
    代码解读

设置marketcolors和mpf_style和其他常用设置

marketcolors设置图表颜色

全部评论 (0)

还没有任何评论哟~