python金融股票市场数据分析神器TA-Lib学习使用

      作为一名python的粉丝,每次看到有什么新鲜的库、框架什么的总会忍不住想去试试,哪怕就是简单的小实践也可以,因为这些库的确是功能十分地强大而且API好用,今天浏览文章的时候无意间看到一个金融股票相关的分析工具,其实之前也接触到一个类似的库叫做tushare,可以获取股市相关的数据用来作分析工作,今天这个talib模块相比tushare更为强大一些,它是完全基于Cpython封装得到的模块。

    talib相关的中文文档十分地稀缺,这里先给出来GitHub地址在这里,官方文档在这里。在社区找到一个还可以的中文文档翻译放在这里

      先说一下安装,使用pip方式安装的话可能会报错,所以呢,如果不想麻烦的话建议下载这里的whl文件来直接安装,亲测可行,没有出现报错信息。

python27环境下的下载:TA_Lib‑0.4.17‑cp27‑cp27m‑win_amd64.whl

python36环境下的下载:TA_Lib‑0.4.17‑cp36‑cp36m‑win_amd64.whl

python37环境下的下载:TA_Lib‑0.4.17‑cp37‑cp37m‑win_amd64.whl

    根据自己系统中python解释器具体的版本来下载和安装对应的whl文件进行安装即可。安装完成后,进入python提供的shell环境中执行下述命令若无报错则说明安装成功:

                         

       接下来就进入使用的阶段了,先简单看一下talib模块提供的一些功能和功能组。

print ta.get_functions()
print ta.get_function_groups()

       输出如下:
 

['ATR', 'NATR', 'TRANGE', 'BBANDS', 'DEMA', 'EMA', 'HT_TRENDLINE', 'KAMA', 'MA', 'MAMA', 'MAVP', 'MIDPOINT', 'MIDPRICE', 'SAR', 'SAREXT', 'SMA', 'T3', 'TEMA', 'TRIMA', 'WMA', 'BETA', 'CORREL', 'LINEARREG', 'LINEARREG_ANGLE', 'LINEARREG_INTERCEPT', 'LINEARREG_SLOPE', 'STDDEV', 'TSF', 'VAR', 'ADX', 'ADXR', 'APO', 'AROON', 'AROONOSC', 'BOP', 'CCI', 'CMO', 'DX', 'MACD', 'MACDEXT', 'MACDFIX', 'MFI', 'MINUS_DI', 'MINUS_DM', 'MOM', 'PLUS_DI', 'PLUS_DM', 'PPO', 'ROC', 'ROCP', 'ROCR', 'ROCR100', 'RSI', 'STOCH', 'STOCHF', 'STOCHRSI', 'TRIX', 'ULTOSC', 'WILLR', 'CDL2CROWS', 'CDL3BLACKCROWS', 'CDL3INSIDE', 'CDL3LINESTRIKE', 'CDL3OUTSIDE', 'CDL3STARSINSOUTH', 'CDL3WHITESOLDIERS', 'CDLABANDONEDBABY', 'CDLADVANCEBLOCK', 'CDLBELTHOLD', 'CDLBREAKAWAY', 'CDLCLOSINGMARUBOZU', 'CDLCONCEALBABYSWALL', 'CDLCOUNTERATTACK', 'CDLDARKCLOUDCOVER', 'CDLDOJI', 'CDLDOJISTAR', 'CDLDRAGONFLYDOJI', 'CDLENGULFING', 'CDLEVENINGDOJISTAR', 'CDLEVENINGSTAR', 'CDLGAPSIDESIDEWHITE', 'CDLGRAVESTONEDOJI', 'CDLHAMMER', 'CDLHANGINGMAN', 'CDLHARAMI', 'CDLHARAMICROSS', 'CDLHIGHWAVE', 'CDLHIKKAKE', 'CDLHIKKAKEMOD', 'CDLHOMINGPIGEON', 'CDLIDENTICAL3CROWS', 'CDLINNECK', 'CDLINVERTEDHAMMER', 'CDLKICKING', 'CDLKICKINGBYLENGTH', 'CDLLADDERBOTTOM', 'CDLLONGLEGGEDDOJI', 'CDLLONGLINE', 'CDLMARUBOZU', 'CDLMATCHINGLOW', 'CDLMATHOLD', 'CDLMORNINGDOJISTAR', 'CDLMORNINGSTAR', 'CDLONNECK', 'CDLPIERCING', 'CDLRICKSHAWMAN', 'CDLRISEFALL3METHODS', 'CDLSEPARATINGLINES', 'CDLSHOOTINGSTAR', 'CDLSHORTLINE', 'CDLSPINNINGTOP', 'CDLSTALLEDPATTERN', 'CDLSTICKSANDWICH', 'CDLTAKURI', 'CDLTASUKIGAP', 'CDLTHRUSTING', 'CDLTRISTAR', 'CDLUNIQUE3RIVER', 'CDLUPSIDEGAP2CROWS', 'CDLXSIDEGAP3METHODS', 'AD', 'ADOSC', 'OBV', 'ADD', 'DIV', 'MAX', 'MAXINDEX', 'MIN', 'MININDEX', 'MINMAX', 'MINMAXINDEX', 'MULT', 'SUB', 'SUM', 'ACOS', 'ASIN', 'ATAN', 'CEIL', 'COS', 'COSH', 'EXP', 'FLOOR', 'LN', 'LOG10', 'SIN', 'SINH', 'SQRT', 'TAN', 'TANH', 'AVGPRICE', 'MEDPRICE', 'TYPPRICE', 'WCLPRICE', 'HT_DCPERIOD', 'HT_DCPHASE', 'HT_PHASOR', 'HT_SINE', 'HT_TRENDMODE']
{'Pattern Recognition': ['CDL2CROWS', 'CDL3BLACKCROWS', 'CDL3INSIDE', 'CDL3LINESTRIKE', 'CDL3OUTSIDE', 'CDL3STARSINSOUTH', 'CDL3WHITESOLDIERS', 'CDLABANDONEDBABY', 'CDLADVANCEBLOCK', 'CDLBELTHOLD', 'CDLBREAKAWAY', 'CDLCLOSINGMARUBOZU', 'CDLCONCEALBABYSWALL', 'CDLCOUNTERATTACK', 'CDLDARKCLOUDCOVER', 'CDLDOJI', 'CDLDOJISTAR', 'CDLDRAGONFLYDOJI', 'CDLENGULFING', 'CDLEVENINGDOJISTAR', 'CDLEVENINGSTAR', 'CDLGAPSIDESIDEWHITE', 'CDLGRAVESTONEDOJI', 'CDLHAMMER', 'CDLHANGINGMAN', 'CDLHARAMI', 'CDLHARAMICROSS', 'CDLHIGHWAVE', 'CDLHIKKAKE', 'CDLHIKKAKEMOD', 'CDLHOMINGPIGEON', 'CDLIDENTICAL3CROWS', 'CDLINNECK', 'CDLINVERTEDHAMMER', 'CDLKICKING', 'CDLKICKINGBYLENGTH', 'CDLLADDERBOTTOM', 'CDLLONGLEGGEDDOJI', 'CDLLONGLINE', 'CDLMARUBOZU', 'CDLMATCHINGLOW', 'CDLMATHOLD', 'CDLMORNINGDOJISTAR', 'CDLMORNINGSTAR', 'CDLONNECK', 'CDLPIERCING', 'CDLRICKSHAWMAN', 'CDLRISEFALL3METHODS', 'CDLSEPARATINGLINES', 'CDLSHOOTINGSTAR', 'CDLSHORTLINE', 'CDLSPINNINGTOP', 'CDLSTALLEDPATTERN', 'CDLSTICKSANDWICH', 'CDLTAKURI', 'CDLTASUKIGAP', 'CDLTHRUSTING', 'CDLTRISTAR', 'CDLUNIQUE3RIVER', 'CDLUPSIDEGAP2CROWS', 'CDLXSIDEGAP3METHODS'], 'Volume Indicators': ['AD', 'ADOSC', 'OBV'], 'Math Transform': ['ACOS', 'ASIN', 'ATAN', 'CEIL', 'COS', 'COSH', 'EXP', 'FLOOR', 'LN', 'LOG10', 'SIN', 'SINH', 'SQRT', 'TAN', 'TANH'], 'Math Operators': ['ADD', 'DIV', 'MAX', 'MAXINDEX', 'MIN', 'MININDEX', 'MINMAX', 'MINMAXINDEX', 'MULT', 'SUB', 'SUM'], 'Cycle Indicators': ['HT_DCPERIOD', 'HT_DCPHASE', 'HT_PHASOR', 'HT_SINE', 'HT_TRENDMODE'], 'Volatility Indicators': ['ATR', 'NATR', 'TRANGE'], 'Overlap Studies': ['BBANDS', 'DEMA', 'EMA', 'HT_TRENDLINE', 'KAMA', 'MA', 'MAMA', 'MAVP', 'MIDPOINT', 'MIDPRICE', 'SAR', 'SAREXT', 'SMA', 'T3', 'TEMA', 'TRIMA', 'WMA'], 'Statistic Functions': ['BETA', 'CORREL', 'LINEARREG', 'LINEARREG_ANGLE', 'LINEARREG_INTERCEPT', 'LINEARREG_SLOPE', 'STDDEV', 'TSF', 'VAR'], 'Momentum Indicators': ['ADX', 'ADXR', 'APO', 'AROON', 'AROONOSC', 'BOP', 'CCI', 'CMO', 'DX', 'MACD', 'MACDEXT', 'MACDFIX', 'MFI', 'MINUS_DI', 'MINUS_DM', 'MOM', 'PLUS_DI', 'PLUS_DM', 'PPO', 'ROC', 'ROCP', 'ROCR', 'ROCR100', 'RSI', 'STOCH', 'STOCHF', 'STOCHRSI', 'TRIX', 'ULTOSC', 'WILLR'], 'Price Transform': ['AVGPRICE', 'MEDPRICE', 'TYPPRICE', 'WCLPRICE']}

       从上我们看到talib提供的指示器组包括下述指标:

                                                   

   各项展开信息如下:

        

                   

                

                        

                       

      以官网实例中提供的简单收盘价计算的相关方法为基础,具体实践如下:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division

'''
__Author__:沂水寒城
功能: 股市技术分析利器之TA-Lib 实践     
'''


import numpy as np
import talib as ta
import pandas as pd  
from talib import MA_Type
from talib import abstract
from talib.abstract import *
import matplotlib.pyplot as plt
from pylab import mpl  #正常显示画图时出现的中文和负号
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
english={'family':'Times New Roman','weight':'normal','size':12}
chinese={'family':'SimHei','weight':'normal','size':12}
color_list=['#CD853F','#DC143C','#00FF7F','#FF6347','#8B008B','#00FFFF','#0000FF','#8B0000','#FF8C00',
            '#1E90FF','#00FF00','#FFD700','#008080','#008B8B','#8A2BE2','#228B22','#FA8072','#808080']




def ploter(data_list,label,title,savepath):
    '''
    简单曲线绘图功能
    '''
    plt.clf()
    #plt.figure(figsize=(7,7))
    for i in range(len(data_list)):
        plt.plot(data_list[i])
    #plt.legend(label,loc='upper right')
    plt.legend(label,loc='best',ncol=5)
    plt.title(title,chinese)
    plt.savefig(savepath)


def closeTestFunc():
    '''
    计算收盘价的简单移动平均数SMA、布林线、三指数移动平均、收盘价的动量
    '''
    close=np.random.random(100)  #创建随机收盘价序列
    print 'close: ',close
    sma_res=ta.SMA(close)  #计算收盘价的一个简单移动平均数SMA
    print 'sma_res: ',sma_res
    upper,middle,lower=ta.BBANDS(close,matype=MA_Type.T3)  #计算布林线,三指数移动平均
    print 'upper: ',upper
    print 'middle: ',middle
    print 'lower: ',lower
    mom_res=ta.MOM(close,timeperiod=5)  #计算收盘价的动量,时间为5:
    print 'mom_res: ',mom_res
    data_list=[close,sma_res,upper,middle,lower,mom_res]
    title=u"收盘价的简单计算实践"
    label_list=['close','sma_res','upper','middle','lower','mom_res']
    ploter(data_list,label_list,title,'closeTestFunc.png')


def abstractAPITestFunc():
    '''
    抽象API使用
    '''
    input_arrays={
                'open':np.random.random(100),
                'high':np.random.random(100),
                'low':np.random.random(100),
                'close':np.random.random(100),
                'volume':np.random.random(100)
                 }
    sma=abstract.SMA
    sma=abstract.Function('sma')
    sma=SMA(input_arrays,timeperiod=25) # SMA均线价格计算收盘价
    sma_open=SMA(input_arrays,timeperiod=25,price='open') # SMA均线价格计算收盘价
    upper,middle,lower=BBANDS(input_arrays,20,2,2)
    slowk,slowd=STOCH(input_arrays,5,3,0,3,0)    #uses high, low, close by default
    slowk2,slowd2=STOCH(input_arrays,5,3,0,3,0,prices=['high','low','open'])
    data_list=[input_arrays['open'],input_arrays['high'],input_arrays['low'],input_arrays['close'],
          input_arrays['volume'],sma,sma_open,upper,middle,lower,slowk,slowd,slowk2,slowd2]
    title=u"收盘价的简单计算与抽象API使用"
    label_list=['open','high','low','close','volume','sma','sma_open','upper','middle','lower','slowk',
               'slowd','slowk2','slowd2']
    ploter(data_list,label_list,title,'abstractAPITestFunc.png')


if __name__=='__main__':
    closeTestFunc()
    abstractAPITestFunc()

       其中,closeTestFunc.png结果如下:

                                    

       abstractAPITestFunc.png结果如下:

                                

       仅仅只是简单的实践,所用的数据均无实际的意义,接下来有时间会继续相关的使用和研究。

©️2020 CSDN 皮肤主题: 护眼 设计师:闪电赇 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值