十年前有个朋友的毕业论文题目与股票数据分析相关。于是他用程序实现了解析通达信数据、计算统计指标、绘图……结果时间过去大半,核心的分析功能还没开始实现。
而现在使用Python语言,下载数据、计算统计指标、绘图,以及数据分析都有现成的工具,我们不用再去关注细节,可以将主要精力用于组合工具和实验。本篇将介绍量化交易相关的常用三方库。
1.常用三方库
-
数据分析工具
Pandas:数据表工具
Numpy:数学计算工具
Scipy:数学计算工具
Sklearn:机器学习工具 -
下载数据
TuShare:读取国内股票数据
Pandas_reader:读取国内外股票数据 -
回溯框架
PyAlgoTrade:离线的分析回溯工具,PyAlgoTrade-cn为A股版本
Zipline:分析回溯工具 -
计算技术指标
TA-Lib:计算技术指标,底层由C语言实现,支持150多个函数
Pandas_talib:计算技术指标,由Python语言实现,支持30多个函数 -
金融绘图
Mpl_finance:金融绘图工具,原matplotlib中的子模块
数据分析工具比较通用,不在股票专题中介绍;上一篇在数据下载方法中介绍了Tushare和Pandas_reader软件的用法,下一篇将讲解回溯工具,本篇则介绍计算技术指标和金融相关的绘图方法。
2.计算技术指标
a) 技术指标
Ta-lib支持150多个函数,而pandas_talib也加入了一些量价结合的新功能,可以二者配合使用,通过分析pandas_talib源码可以看到功能的具体实现方法。
Ta-lib从各种均线到蜡烛图指标,能想到的差不多都有,分成以下几类:
- Overlap Studies(重叠研究类)
- Momentum Indicators(动量指标类)
- Volume Indicators(成交量指标类)
- Volatility Indicators(波动性指标类)
- Price Transform(价格指标类)
- Cycle Indicators(周期指标类)
- Pattern Recognition(形态识别类)
- Statistic Functions(统计函数类)
- Math Transform(数学变换类)
- Math Operators(数学运算符类)
详见talib中文文档:https://github.com/HuaRongSAO/talib-document,点开每个指标都有中文说明及例程。
b) 直接安装
由于ta-lib底层依赖C语言实现,在Windows系统中安装过程相对比较麻烦,我在ubuntu系统中安装。
$ sudo pip install Ta-Lib $ sudo pip install git+git://github.com/femtotrader/pandas_talib.git
如果有以下错误提示:
talib/_ta_lib.c:526:28: fatal error: ta-lib/ta_defs.h
这是由于没有底层依赖C库支持,在Ubuntu系统中用以下方法安装。
$ wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz $ tar xvzf ta-lib-0.4.0-src.tar.gz $ cd ta-lib/ $ ./configure $ sudo make install $ sudo ldconfig
c) Github下载
$ git clone https://github.com/mrjbq7/ta-lib.git $ git clone https://github.com/femtotrader/pandas_talib.git
d) 使用方法
输入数据默认为Numpy的ndarray格式,而Pandas也是基于Numpy,基本能直接使用,使用方法形如: real = talib.ROC(df.close, timeperiod=10)
3.金融绘图
从matplotlib2.2.0版本开始,matplotlib.finance已经从matplotlib中剥离出来,名为mpl_finance,需要单独安装。
a) 安装
$ sudo pip install https://github.com/matplotlib/mpl_finance/archive/master.zip
b) 使用
下例为使用tushare下载002230,并绘制K线图:
from matplotlib import pyplot as plt import mpl_finance as mpf from matplotlib.pylab import date2num import pandas as pd import datetime import tushare as ts %matplotlib inline def draw(stock): stock['datestr'] = stock['date'].apply(lambda x: date2num(datetime.datetime.strptime(x,'%Y-%m-%d'))) quotes = stock[['datestr','open','high','low','close']] fig, ax = plt.subplots(figsize=(12,8)) fig.subplots_adjust(bottom=0.1) ax.xaxis_date() plt.xticks(rotation=45) #日期显示的旋转角度 mpf.candlestick_ohlc(ax, quotes.values, width=0.7, colorup='r', colordown='g') # 格式是:date,open,high,low,close, 格式为list plt.grid(True) plt.show() df = ts.get_hist_data('002230', start='2019-08-01') df = df.reset_index() draw(df)
程序运行结果如下图所示:
学任何一门复杂的技术都需要时间和精力,可以说无捷径可走,操作策略也需要经过反复验证后再使用,不懂就做一般都会被割韭菜,所以要么花时间精力,要么交给适合的人,要么别碰。
来源:51CTO
作者:xieyan0811
链接:https://blog.csdn.net/xieyan0811/article/details/100863353