python3绘制股票K线图的那些坑【一】mpl_finance迁向mplfinance,以及plot独立窗口视图问题!

      量化交易,宽客平台已经有了不少。自己也做了很长时间的股票投资&投机,有一些想法,需要验证。并且基于缠论的K线分析系统思想,有自己编写的通达信缠论指标和飞狐交易师缠论指标,包括选股指标也有。但是这些软件的限制比较多,尤其是通达信,最近凡是用了DLL的就不能同时在交易终端打开时使用DLL指标。限制很多,也不能很好的回测。而大多数回测平台吧,的确是可以跑回测的策略,但是K线呈现又没有那么直观了,策略回测完成,买卖点交易情况记录表打出来,还得自己到看盘软件里一个日期一个日期的去对,实在是非常麻烦。

       干脆,自己也是搞软研的。自己写一套K线呈现系统吧。今天就是尝试的第一天,用mplfinance这个包。可谓是几经波折。首先是装了旧版的mpl_finance,运行就提示要升级。

        

      如图所示了。很简单了,按照提示一顿pip install操作。然后傻眼了,提示candlestick2_ochl方法不存在。

    name 'candlestick_ochl' is not defined

      API变化太大了,索性直按网址提示,找到官方用例说明一看究竟。原来变得超级简单:  https://github.com/matplotlib/mplfinance#usage 

       跑个简单的官方示例:

import pandas as pd
import mplfinance as mpf

daily = pd.read_csv('examples/data/SP500_NOV2019_Hist.csv',index_col=0,parse_dates=True)
daily.index.name = 'Date'
daily.shape
daily.head(3)
daily.tail(3)

mpf.plot(daily,type='candle')

       直接成功:

         但是不理想啊,这只是个图片,不如matplotlib的独立窗口显示的好用。于是根据网上一阵搜索,设置里去掉plot工具窗口显示选项即可。操作!

         再运行扯淡了,没有独立窗口,也没有整合显示而是报错!

进程已结束,退出代码-1073741819 (0xC0000005)

         怀疑是不是win10的UAC账户控制导致的窗口句柄不能打开。于是用以管理员身份运行pychram,然后再运行,问题依旧。后来想起来,matplotlib的呈现是要基于后端的图像呈现系统,比如pyqt4、pyqt5、Tk等等。机器没有装pyQt5,pychram2020.1貌似默认基于PyQt5的,也许是这个问题,换成pyqt4的后端试试。改它!


import matplotlib
matplotlib.use('qt4agg')
import matplotlib.pyplot as plt


'''
import matplotlib
matplotlib.use('tkagg')
import matplotlib.pyplot as plt
'''
import pandas as pd
import mplfinance as mpf

daily = pd.read_csv('../examples/data/SP500_NOV2019_Hist.csv',index_col=0,parse_dates=True)
daily.index.name = 'Date'
daily.shape
daily.head(3)
daily.tail(3)

mpf.plot(daily,type='candle')

      运行!独立窗口出来了!换成tkagg也能够出独立窗口。试了一下qt5agg,就不行了。估计默认就是qt5agg搞的鬼吧。所以网上有些人遇到这个问题,重装pyQt5也能解决问题。但是个人认为,这样搞清楚一些还是要好一些。

      看效果,歹歹的!

      总结一下,还遇到的坑。

      1、新版mplfinance的API发生了较大的变化,简化了绘图过程。

      2、mplfinance依然基于matplotlib的,当无法呈现独立窗口时,务必在引入mplfinance之前,先引入matplotlib并指定后端图形实现方式是qt4agg,还是tkagg。

      3、新版的mplfinance的plot方法,数据对象必须是dataFram类型,并且数据列也有严格的要求。必须包含’Open’, ‘High’, ‘Low’ 和 ‘Close’ 数据(注意:区分大小写,这个把我也折腾了好一阵),而且行索引必须是Date,并且是pandas.DatetimeIndex类型,行索引的名称必须是’Date‘(注意大小写),此外还有一列是’Volume’(成交量),这一列不是必须的,可选项(不选择绘制成交量的话,就不会有问题)。

      今天就这样了,晒一下自己的想法。从mongoDB加在数据并显示。今天初步目标达成!只是还欠封装和调试。以后继续吧!准备做一个自己的证券可视化分析终端,数据源就选择mongoDB,之前也用过mysql,mysql实在不适合存储证券数据,入库太慢,查询还凑合。

       使用mongoDB做后端数据源,这样比较容易统一数据结构,历史数据分析也方便。回测的结果导入,买卖信号叠加呈现在K线图上,也便于分析。大概想法就这样,逐步实现吧!

           坑一趟过~~~~over。
 

最后给走在数据分析路上的同道,这个课程不错.可以学学哦~~~

 

  • 7
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值