量化交易,宽客平台已经有了不少。自己也做了很长时间的股票投资&投机,有一些想法,需要验证。并且基于缠论的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。
最后给走在数据分析路上的同道,这个课程不错.可以学学哦~~~