【量化】股市技术分析利器之TA-Lib(一)

作者:未来大佬

来源: 恒生LIGHT云社区

1、TA-Lib简介

TA-Lib,全称“Technical Analysis Library”, 即技术分析库,是Python金融量化的高级库,涵盖了158种股票、期货交易软件中常用的技术分析指标,如MACD、RSI、KDJ、动量指标、布林带等等。talib的技术指标可分为10个类别,如下图所示:

ta指标.png

2、TA-Lib安装

TA-Lib下载地址: https://www.lfd.uci.edu/~gohlke/pythonlibs/

打开网址后搜索TA-Lib,根据自己系统和python版本选择相应的安装包,我们选择最新版本的,因为我电脑已经安装了python 3.10.0

ta-lib安装.png

下载后是一个whl文件:TA_Lib-0.4.21-cp310-cp310-win_amd64.whl。

打开下载文件所在目录,打开cmd命令行(在文件路径中输入cmd然后回车,或者按住shit键然后鼠标右键选择在此处打开powershell窗口),在命令行窗口执行命令:

pip install TA_Lib-0.4.21-cp310-cp310-win_amd64.whl

很快就提示安装成功。

3、查看TA-Lib提供的技术指标

import talib
import pandas as pd
#查所有函数指标,一共158个
functions = talib.get_functions()
print(len(functions),functions)
#指标太多看不过来,没关系,还可以使用分类查看
groups = talib.get_function_groups()
print(groups)
#单独查看分类名称
print(groups.keys())
#查看每个分类的函数指标个数
table = pd.DataFrame({
'技术指标类别名称': list(groups.keys()),
'该类别指标个数': list(map(lambda x: len(x), groups.values()))
})
print(table)

各分类指标个数.png

各个指标详细的参数说明: http://mrjbq7.github.io/ta-lib/doc_index.html

指标中文文档可以参考大神的文档: https://github.com/HuaRongSAO/talib-document

4、TA-Lib指标的使用

下面介绍一下布林带指标的使用,并且在K线图上画出来

布林带(Bollinger Band),由压力线、支撑线价格平均线组成,一般情况价格线在压力线和支撑线组成的上下区间中游走,区间位置会随着价格的变化而自动调整。布林线的理论使用原则是:当股价穿越最外面的压力线(支撑线)时,表示卖点(买点)出现。当股价延着压力线(支撑线)上升(下降)运行,虽然股价并未穿越,但若回头突破第二条线即是卖点或买点。在实际应用中,布林线有其滞后性,相对于其他技术指标在判断行情反转时参考价值较低,但在判断盘整行情终结节点上成功率较高。

计算方法:首先计出过去 N 日收巿价的标准差 SD(Standard Deviation) ,通常再乘 2 得出 2 倍标准差, Up 线为 N日平均线加 2 倍标准差, Down 线则为 N日平均线减 2 倍标准差。

4.1 获取行情数据

本文使用 恒有数 获取股票行情数据,源代码如下:

import talib
import hs_udata as hs
import datetime
import time
import talib
import pandas as pd
import openpyxl

#获取一段时间的股票日行情数据
def Get_stock_quote_daily(stocklist,datelist):
    #单次获取股票代码数量
    stock_num = 500
    #变量初始化
    data_i = []
    for Date_i in datelist['trading_date'].to_list():
        #开始计时
        t1 = time.time()
        #对股票列表进行循环
        for i in range(0,len(stocklist),stock_num):
            list_i=','.join(stocklist[i:i+stock_num])
            #获取日行情数据,接口说明见 https://udata.hs.net/datas/332/
            #adjust_way枚举值为:0-不复权,1-前复权,2-后复权,此处取前复权
            data_i.append(hs.stock_quote_daily(en_prod_code=list_i,trading_date=Date_i,adjust_way = 1))
            t2 = time.time()
            # 结束计时
            #打印耗时
            print("{0}日行情数据,耗时为:{1}秒".format(Date_i,round(t2-t1,4)))

    #拼接各段行情数据
    data = pd.concat(data_i, ignore_index=True)
    return  data

if __name__ == '__main__':
    #设置Token,注册后,获取并替换token
    hs.set_token(token='SXt-DJbOiOxA5C-GXyzwaTehKvr41T564D8AQ1cgw5ZRW-gZTB_KIerid4U9Oy3S')
    #获取股票列表
    stocklist = ['600570.SH']
    #下载2021-01-01~2021-11-23 的股票日行情数据
    start='2021-01-01'
    end  ='2021-11-23'
    #获取时间区间内,secu_market=83-沪深证券交易所交易日列表
    datelist = hs.trading_calendar(secu_market='83',start_date=start,end_date=end,if_trading_day='1',fields='trading_date')
    #调用函数
    data = Get_stock_quote_daily(stocklist,datelist)
    #导出Excel文件,方便后续本地快速调试
    data.to_excel('股票日行情{0}-{1}.xlsx'.format(start, end))
    print('下载数据条数为:{0}'.format(len(data)))
    print(data.head())

head.png

4.2 调用布林线指标及绘图

调用TA-Lib的BBANDS指标生成BOLL线数据,并且使用mplfinance画出K线和布林线。源代码如下:

import talib
import pandas as pd
from talib import MA_Type
import mplfinance as mpf

def showPlot(data):
close_p = data['close_price'].values

#BBANDS Bollinger Bands,布林线指标
#upperband, middleband, lowerband = BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)

data["BBANDS_upper"], data["BBANDS_middle"], data["BBANDS_lower"] = talib.BBANDS(
    close_p, timeperiod=20, matype=MA_Type.SMA)

#数据处理
#剔除非交易日
data = data.loc[data.turnover_status == '交易']
#选取日期、高开低收价格、成交量数据
data_price = data[['trading_date', 'open_price', 'high_price', 'low_price', 'close_price', 'business_amount']]

#更换列名,为后面函数变量做准备
data_price = data_price.rename(
    columns={'trading_date': 'Date', 'open_price': 'Open', 'close_price': 'Close', 'high_price': 'High',
             'low_price': 'Low', 'business_amount': 'Volume'})
#设置date列为索引,覆盖原来索引,这个时候索引还是 object 类型,就是字符串类型。
data_price.set_index('Date', inplace=True)
#将object类型转化成 DateIndex 类型,pd.DatetimeIndex 是把某一列进行转换,同时把该列的数据设置为索引 index。
data_price.index = pd.DatetimeIndex(data_price.index)
data_price = data_price.sort_index(ascending=True)
my_color = mpf.make_marketcolors(up='red', down='green', edge='i', wick='i', volume='in')
my_style = mpf.make_mpf_style(marketcolors=my_color, gridaxis='both', gridstyle='-.', y_on_right=False)
#mav(5,10,20)显示5日,10日,20日移动均线
#mpf.plot(data_price, type='candle', mav=(5, 10, 20),style=my_style, volume=True, show_nontrading=False)

#将要额外添加的图线按照下边这种格式,放在一个列表中。然后传给mpf.plot的参数addplot就可以了。
add_plot = [
    mpf.make_addplot(data["BBANDS_upper"]),
    mpf.make_addplot(data["BBANDS_middle"]),
    mpf.make_addplot(data["BBANDS_lower"])]

#显示K线,布林线,成交量
mpf.plot(data_price, type='candle', addplot=add_plot, style=my_style, volume=True, show_nontrading=False)

if __name__ == '__main__':
data = pd.read_excel('股票日行情2021-01-01-2021-11-19.xlsx')
showPlot(data)

k.png

5、总结

本文主要描述了TA-Lib的简介,TA-Lib的安装方法,TA-Lib技术指标的查看方法。最后通过一个实例,讲解了TA-Lib布林带指标的使用以及使用mplfinance画K线,布林带,成交量图。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值